/*FreeMind - A Program for creating and viewing Mindmaps *Copyright (C) 2000-2001 Joerg Mueller <joergmueller@bigfoot.com> *See COPYING for Details * *This program is free software; you can redistribute it and/or *modify it under the terms of the GNU General Public License *as published by the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package freemind.modes.mindmapmode; import java.lang.reflect.Constructor; import java.util.HashMap; import java.util.Vector; import freemind.main.FreeMindMain; import freemind.main.XMLElement; import freemind.modes.ArrowLinkAdapter; import freemind.modes.ArrowLinkTarget; import freemind.modes.CloudAdapter; import freemind.modes.EdgeAdapter; import freemind.modes.MindMap; import freemind.modes.ModeController; import freemind.modes.NodeAdapter; import freemind.modes.XMLElementAdapter; public class MindMapXMLElement extends XMLElementAdapter { // Logging: private static java.util.logging.Logger logger; public MindMapXMLElement(ModeController pModeController) { super(pModeController); init(); } protected MindMapXMLElement(ModeController pModeController, Vector ArrowLinkAdapters, HashMap IDToTarget) { super(pModeController, ArrowLinkAdapters, IDToTarget); init(); } /** * */ private void init() { if (logger == null) { logger = getFrame().getLogger(this.getClass().getName()); } } /** abstract method to create elements of my type (factory). */ protected XMLElement createAnotherElement() { // We do not need to initialize the things of XMLElement. return new MindMapXMLElement(mModeController, mArrowLinkAdapters, mIdToTarget); } protected NodeAdapter createNodeAdapter(FreeMindMain frame, String nodeClass) { if (nodeClass == null) { return new MindMapNodeModel(frame, getMap()); } // reflection: try { // construct class loader: ClassLoader loader = this.getClass().getClassLoader(); // constructed. Class nodeJavaClass = Class.forName(nodeClass, true, loader); Class[] constrArgs = new Class[] { Object.class, FreeMindMain.class, MindMap.class }; Object[] constrObjs = new Object[] { null, frame, getMap() }; Constructor constructor = nodeJavaClass.getConstructor(constrArgs); NodeAdapter nodeImplementor = (NodeAdapter) constructor .newInstance(constrObjs); return nodeImplementor; } catch (Exception e) { freemind.main.Resources.getInstance().logException(e, "Error occurred loading node implementor: " + nodeClass); // the best we can do is to return the normal class: NodeAdapter node = new MindMapNodeModel(frame, getMap()); return node; } } protected EdgeAdapter createEdgeAdapter(NodeAdapter node, FreeMindMain frame) { return new MindMapEdgeModel(node, frame); } protected CloudAdapter createCloudAdapter(NodeAdapter node, FreeMindMain frame) { return new MindMapCloudModel(node, frame); } protected ArrowLinkAdapter createArrowLinkAdapter(NodeAdapter source, NodeAdapter target, FreeMindMain frame) { return new MindMapArrowLinkModel(source, target, frame); } protected ArrowLinkTarget createArrowLinkTarget(NodeAdapter source, NodeAdapter target, FreeMindMain frame) { return new ArrowLinkTarget(source, target, frame); } protected NodeAdapter createEncryptedNode(String additionalInfo) { NodeAdapter node = createNodeAdapter(frame, EncryptedMindMapNode.class.getName()); setUserObject(node); copyAttributesToNode(node); node.setAdditionalInfo(additionalInfo); return node; } }