package org.docear.plugin.core.features;
import org.docear.plugin.core.features.DocearNodeModelExtension.DocearExtensionKey;
import org.freeplane.core.extension.IExtension;
import org.freeplane.core.io.ReadManager;
import org.freeplane.core.io.WriteManager;
import org.freeplane.features.map.MapController;
import org.freeplane.features.map.NodeModel;
import org.freeplane.features.mode.Controller;
import org.freeplane.features.mode.ModeController;
public class DocearNodeModelExtensionController implements IExtension{
public static DocearNodeModelExtensionController getController() {
return getController(Controller.getCurrentModeController());
}
public static DocearNodeModelExtensionController getController(ModeController modeController) {
return (DocearNodeModelExtensionController) modeController.getExtension(DocearNodeModelExtensionController.class);
}
public static void install( final DocearNodeModelExtensionController docearNodeModelController) {
Controller.getCurrentModeController().addExtension(DocearNodeModelExtensionController.class, docearNodeModelController);
}
public DocearNodeModelExtensionController(final ModeController modeController){
final MapController mapController = Controller.getCurrentModeController().getMapController();
final ReadManager readManager = mapController.getReadManager();
final WriteManager writeManager = mapController.getWriteManager();
DocearNodeModelExtensionXmlBuilder builder = new DocearNodeModelExtensionXmlBuilder();
builder.registerBy(readManager, writeManager);
}
public static DocearNodeModelExtension getModel(final NodeModel node) {
DocearNodeModelExtension docearNodeModel = (DocearNodeModelExtension) node.getExtension(DocearNodeModelExtension.class);
return docearNodeModel;
}
public static void setModel(final NodeModel node, final DocearNodeModelExtension docearNodeModel) {
final DocearNodeModelExtension olddocearNodeModel = (DocearNodeModelExtension) node.getExtension(DocearNodeModelExtension.class);
if (docearNodeModel != null && olddocearNodeModel == null) {
node.addExtension(docearNodeModel);
}
else if (docearNodeModel == null && olddocearNodeModel != null) {
node.removeExtension(DocearNodeModelExtension.class);
}
}
public static boolean containsKey(NodeModel node, DocearExtensionKey key){
DocearNodeModelExtension extension = getModel(node);
if(extension != null){
return extension.containsKey(key.toString());
}
return false;
}
public static DocearNodeModelExtension setEntry(NodeModel node, DocearExtensionKey key, Object value){
return setEntry(node, key.toString(), value);
}
public static DocearNodeModelExtension setEntry(NodeModel node, String key, Object value){
DocearNodeModelExtension extension = getModel(node);
if(extension == null){
extension = new DocearNodeModelExtension();
extension.putEntry(key, value);
setModel(node, extension);
}
else{
extension.putEntry(key, value);
}
return extension;
}
}