All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.xmind.core.io.DirectoryInputSource Maven / Gradle / Ivy

Go to download

Plugin that manages JBehave stories storage in XMind mindmap file, which allows design jBehave tests right after the brainstorm

The newest version!
/* ******************************************************************************
 * Copyright (c) 2006-2012 XMind Ltd. and others.
 * 
 * This file is a part of XMind 3. XMind releases 3 and
 * above are dual-licensed under the Eclipse Public License (EPL),
 * which is available at http://www.eclipse.org/legal/epl-v10.html
 * and the GNU Lesser General Public License (LGPL), 
 * which is available at http://www.gnu.org/licenses/lgpl.html
 * See http://www.xmind.net/license.html for details.
 * 
 * Contributors:
 *     XMind Ltd. - initial API and implementation
 *******************************************************************************/
package org.xmind.core.io;

import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.xmind.core.Core;

public class DirectoryInputSource implements IInputSource {

    private File dir;

    private FileFilter filter;

    public DirectoryInputSource(File file) {
        this(file, null);
    }

    public DirectoryInputSource(String path) {
        this(new File(path), null);
    }

    /**
     * 
     */
    public DirectoryInputSource(File file, FileFilter filter) {
        this.dir = file;
        this.filter = filter;
    }

    /**
     * @return the file
     */
    public File getFile() {
        return dir;
    }

    public FileFilter getFilter() {
        return filter;
    }

    public void setFilter(FileFilter filter) {
        this.filter = filter;
    }

    public String getName() {
        return dir.getName();
    }

    public Iterator getEntries() {
        List list = new ArrayList();
        getSubFiles("", dir, list); //$NON-NLS-1$
        return list.iterator();
    }

    private void getSubFiles(String parentEntry, File parentFile,
            List list) {
        if (!parentFile.isDirectory())
            return;

        for (File file : parentFile.listFiles()) {
            if (filter == null || filter.accept(file)) {
                String entryName;
                if ("".equals(parentEntry)) { //$NON-NLS-1$
                    entryName = file.getName();
                } else {
                    entryName = parentEntry + "/" + file.getName(); //$NON-NLS-1$
                }
                if (!file.isDirectory()) {
                    list.add(entryName);
                }
                getSubFiles(entryName, file, list);
            }
        }
    }

    public boolean isEntryAvailable(String entryName) {
        return isAvailable() && !new File(dir, entryName).isDirectory();
    }

    protected boolean isAvailable() {
        return dir.exists() && dir.isDirectory();
    }

    public boolean hasEntry(String entryName) {
        File f = new File(dir, entryName);
        return f.exists() && f.canRead()
                && (filter == null || filter.accept(f));
    }

    public InputStream getEntryStream(String entryName) {
        if (!isAvailable())
            return null;

        File file = new File(dir, entryName);
        if (file.isFile() && file.canRead()) {
            try {
                return new FileInputStream(file);
            } catch (FileNotFoundException e) {
                Core.getLogger().log(e,
                        "Failed to get entry input stream: " + entryName); //$NON-NLS-1$
            }
        }
        return null;
    }

    public InputStream openEntryStream(String entryName) throws IOException {
        return new FileInputStream(new File(dir, entryName));
    }

    public boolean closeEntryStream(String entryPath, InputStream stream) {
        try {
            stream.close();
            return true;
        } catch (IOException e) {
            Core.getLogger().log(e,
                    "Failed to close entry input stream: " + entryPath); //$NON-NLS-1$
        }
        return false;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.xmind.core.io.IInputSource#getEntrySize(java.lang.String)
     */
    public long getEntrySize(String entryName) {
        File f = new File(dir, entryName);
        if (f.exists())
            return f.length();
        return -1;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.xmind.core.io.IInputSource#getEntryTime(java.lang.String)
     */
    public long getEntryTime(String entryName) {
        File f = new File(dir, entryName);
        if (f.exists())
            return f.lastModified();
        return -1;
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == this)
            return true;
        if (obj == null || !(obj instanceof DirectoryInputSource))
            return false;
        DirectoryInputSource that = (DirectoryInputSource) obj;
        return this.dir.equals(that.dir)
                && (this.filter == that.filter || (this.filter != null && this.filter
                        .equals(that.filter)));
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        return this.dir.hashCode()
                ^ (this.filter == null ? 1 : this.filter.hashCode());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy