package org.freeplane.plugin.workspace.features;
import java.awt.Component;
import java.awt.datatransfer.Transferable;
import java.net.URI;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.swing.Icon;
import javax.swing.tree.TreePath;
import org.freeplane.core.extension.IExtension;
import org.freeplane.features.mode.ModeController;
import org.freeplane.plugin.workspace.components.IWorkspaceView;
import org.freeplane.plugin.workspace.dnd.INodeDropHandler;
import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferHandler;
import org.freeplane.plugin.workspace.dnd.NoDropHandlerFoundExeption;
import org.freeplane.plugin.workspace.event.AWorkspaceEvent;
import org.freeplane.plugin.workspace.event.IWorkspaceListener;
import org.freeplane.plugin.workspace.handler.INodeTypeIconHandler;
import org.freeplane.plugin.workspace.handler.INodeTypeIconManager;
import org.freeplane.plugin.workspace.handler.IOController;
import org.freeplane.plugin.workspace.io.FileReadManager;
import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
import org.freeplane.plugin.workspace.model.WorkspaceModel;
import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
import org.freeplane.plugin.workspace.model.project.IProjectSelectionListener;
import org.freeplane.plugin.workspace.model.project.ProjectLoader;
public abstract class AWorkspaceModeExtension implements IExtension {
private final IOController workspaceIOController = new IOController();
private final Set<IWorkspaceListener> listeners = new LinkedHashSet<IWorkspaceListener>();
private ProjectLoader projectLoader;
public AWorkspaceModeExtension(ModeController modeController) {
}
public abstract void start(ModeController modeController);
public abstract WorkspaceModel getModel();
public abstract void setModel(WorkspaceModel model);
public abstract FileReadManager getFileTypeManager();
public abstract URI getDefaultProjectHome();
public abstract AWorkspaceProject getSelectedProject();
public abstract void save();
public abstract void shutdown();
public abstract void load();
public abstract void clear();
public IWorkspaceView getView() {
return new IWorkspaceView() {
public void setPaintingEnabled(boolean enabled) {
}
public void refreshView() {
}
public boolean isPaintingEnabled() {
return false;
}
public IWorkspaceTransferHandler getTransferHandler() {
return new IWorkspaceTransferHandler() {
public void registerNodeDropHandler(Class<? extends AWorkspaceTreeNode> clzz, INodeDropHandler handler) {
}
public boolean handleDrop(AWorkspaceTreeNode targetNode, Transferable transf, int dndAction)
throws NoDropHandlerFoundExeption {
return false;
}
};
}
public TreePath getSelectionPath() {
return null;
}
public TreePath getPathForLocation(int x, int y) {
return null;
}
public INodeTypeIconManager getNodeTypeIconManager() {
return new INodeTypeIconManager() {
public INodeTypeIconHandler removeNodeTypeIconHandler(Class<? extends AWorkspaceTreeNode> type) {
return null;
}
public Icon getIconForNode(AWorkspaceTreeNode node) {
return null;
}
public void addNodeTypeIconHandler(Class<? extends AWorkspaceTreeNode> type, INodeTypeIconHandler handler) {
}
};
}
public AWorkspaceTreeNode getNodeForLocation(int x, int y) {
return null;
}
public void expandPath(TreePath treePath) {
}
public boolean containsComponent(Component comp) {
return false;
}
public void collapsePath(TreePath treePath) {
}
public void addProjectSelectionListener(IProjectSelectionListener projectSelectionListener) {
}
public WorkspaceNodeSelectionHandler getNodeSelectionHandler() {
return new WorkspaceNodeSelectionHandler();
}
public Component getComponent() {
return null;
}
};
}
public IOController getIOController() {
return workspaceIOController;
}
public final void addWorkspaceListener(IWorkspaceListener listener) {
if(listener == null) {
return;
}
synchronized (listeners) {
listeners.add(listener);
}
}
public final void removeWorkspaceListener(IWorkspaceListener listener) {
if(listener == null) {
return;
}
synchronized (listeners) {
listeners.remove(listener);
}
}
public final void dispatchWorkspaceEvent(AWorkspaceEvent event) {
synchronized (listeners) {
for (IWorkspaceListener listener : listeners) {
listener.handleWorkspaceEvent(event);
}
}
}
public ProjectLoader getProjectLoader() {
if(this.projectLoader == null) {
this.projectLoader = new ProjectLoader();
}
return this.projectLoader;
}
public void setProjectLoader(ProjectLoader loader) {
this.projectLoader = loader;
}
}