package org.freeplane.plugin.workspace.io; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import org.freeplane.core.io.IReadCompletionListener; import org.freeplane.core.io.ListHashTable; import org.freeplane.features.map.NodeModel; public class FileReadManager { public final static String DIRECTORY_HANDLE = "__MaG__FS_DIRECTORY__MaG__"; public final static String DEFAULT_HANDLE = "__MaG__FS_DEFAULT__MaG__"; final private ListHashTable<String, IFileTypeHandler> fileHandlers; final private Collection<IReadCompletionListener> readCompletionListeners; public FileReadManager() { super(); fileHandlers = new ListHashTable<String, IFileTypeHandler>(); readCompletionListeners = new LinkedList<IReadCompletionListener>(); } public void addFileHandler(final String fileExtension, final IFileTypeHandler handler) { assert(fileExtension != null); assert(fileExtension.length()>0); if(fileExtension.toLowerCase().endsWith("default_handle")) { fileHandlers.add(DEFAULT_HANDLE, handler); return; } if(fileExtension.toLowerCase().endsWith("directory_handle")) { fileHandlers.add(DIRECTORY_HANDLE, handler); return; } fileHandlers.add(fileExtension, handler); } public void addFileHandler(final IFileTypeHandler handler) { for(Object ext : handler.getSupportedFileTypes()) { addFileHandler(ext.toString(), handler); } } public void addReadCompletionListener(final IReadCompletionListener listener) { readCompletionListeners.add(listener); } public ListHashTable<String, IFileTypeHandler> getFileTypeHandlers() { return fileHandlers; } public void readingCompleted(final NodeModel topNode, final HashMap<String, String> newIds) { final Iterator<IReadCompletionListener> iterator = readCompletionListeners.iterator(); while (iterator.hasNext()) { iterator.next().readingCompleted(topNode, newIds); } } public void removeElementHandler(final String fileExtension, final IFileTypeHandler handler) { final boolean removed = fileHandlers.remove(fileExtension, handler); assert removed; } public void removeReadCompletionListener(final IReadCompletionListener listener) { final boolean removed = readCompletionListeners.remove(listener); assert removed; } }