⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directoryproperty.java

📁 Office格式转换代码
💻 JAVA
字号:
/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and *    "Apache POI" must not be used to endorse or promote products *    derived from this software without prior written permission. For *    written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    "Apache POI", nor may "Apache" appear in their name, without *    prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */package org.apache.poi.poifs.property;import java.util.*;import java.io.IOException;import org.apache.poi.poifs.storage.SmallDocumentBlock;/** * Directory property * * @author Marc Johnson (mjohnson at apache dot org) */public class DirectoryProperty    extends Property    implements Parent{    // List of Property instances    private List _children;    // set of children's names    private Set  _children_names;    /**     * Default constructor     *     * @param name the name of the directory     */    public DirectoryProperty(String name)    {        super();        _children       = new ArrayList();        _children_names = new HashSet();        setName(name);        setSize(0);        setPropertyType(PropertyConstants.DIRECTORY_TYPE);        setStartBlock(0);        setNodeColor(_NODE_BLACK);   // simplification    }    /**     * reader constructor     *     * @param index index number     * @param array byte data     * @param offset offset into byte data     */    protected DirectoryProperty(final int index, final byte [] array,                                final int offset)    {        super(index, array, offset);        _children       = new ArrayList();        _children_names = new HashSet();    }    /**     * Change a Property's name     *     * @param property the Property whose name is being changed     * @param newName the new name for the Property     *     * @return true if the name change could be made, else false     */    public boolean changeName(final Property property, final String newName)    {        boolean result;        String  oldName = property.getName();        property.setName(newName);        String cleanNewName = property.getName();        if (_children_names.contains(cleanNewName))        {            // revert the change            property.setName(oldName);            result = false;        }        else        {            _children_names.add(cleanNewName);            _children_names.remove(oldName);            result = true;        }        return result;    }    /**     * Delete a Property     *     * @param property the Property being deleted     *     * @return true if the Property could be deleted, else false     */    public boolean deleteChild(final Property property)    {        boolean result = _children.remove(property);        if (result)        {            _children_names.remove(property.getName());        }        return result;    }    private class PropertyComparator        implements Comparator    {        /**         * Object equality, implemented as object identity         *         * @param o Object we're being compared to         *         * @return true if identical, else false         */        public boolean equals(Object o)        {            return this == o;        }        /**         * compare method. Assumes both parameters are non-null         * instances of Property. One property is less than another if         * its name is shorter than the other property's name. If the         * names are the same length, the property whose name comes         * before the other property's name, alphabetically, is less         * than the other property.         *         * @param o1 first object to compare, better be a Property         * @param o2 second object to compare, better be a Property         *         * @return negative value if o1 <  o2,         *         zero           if o1 == o2,         *         positive value if o1 >  o2.         */        public int compare(Object o1, Object o2)        {            String name1  = (( Property ) o1).getName();            String name2  = (( Property ) o2).getName();            int    result = name1.length() - name2.length();            if (result == 0)            {                result = name1.compareTo(name2);            }            return result;        }    }   // end private class PropertyComparator    /* ********** START extension of Property ********** */    /**     * @return true if a directory type Property     */    public boolean isDirectory()    {        return true;    }    /**     * Perform whatever activities need to be performed prior to     * writing     */    protected void preWrite()    {        if (_children.size() > 0)        {            Property[] children =                ( Property [] ) _children.toArray(new Property[ 0 ]);            Arrays.sort(children, new PropertyComparator());            int midpoint = children.length / 2;            setChildProperty(children[ midpoint ].getIndex());            children[ 0 ].setPreviousChild(null);            children[ 0 ].setNextChild(null);            for (int j = 1; j < midpoint; j++)            {                children[ j ].setPreviousChild(children[ j - 1 ]);                children[ j ].setNextChild(null);            }            if (midpoint != 0)            {                children[ midpoint ]                    .setPreviousChild(children[ midpoint - 1 ]);            }            if (midpoint != (children.length - 1))            {                children[ midpoint ].setNextChild(children[ midpoint + 1 ]);                for (int j = midpoint + 1; j < children.length - 1; j++)                {                    children[ j ].setPreviousChild(null);                    children[ j ].setNextChild(children[ j + 1 ]);                }                children[ children.length - 1 ].setPreviousChild(null);                children[ children.length - 1 ].setNextChild(null);            }            else            {                children[ midpoint ].setNextChild(null);            }        }    }    /* **********  END  extension of Property ********** */    /* ********** START implementation of Parent ********** */    /**     * Get an iterator over the children of this Parent; all elements     * are instances of Property.     *     * @return Iterator of children; may refer to an empty collection     */    public Iterator getChildren()    {        return _children.iterator();    }    /**     * Add a new child to the collection of children     *     * @param property the new child to be added; must not be null     *     * @exception IOException if we already have a child with the same     *                        name     */    public void addChild(final Property property)        throws IOException    {        String name = property.getName();        if (_children_names.contains(name))        {            throw new IOException("Duplicate name \"" + name + "\"");        }        _children_names.add(name);        _children.add(property);    }    /* **********  END  implementation of Parent ********** */}   // end public class DirectoryProperty

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -