package org.docear.plugin.core.features;
import org.docear.plugin.core.util.CoreUtils;
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.MapModel;
import org.freeplane.features.mode.Controller;
import org.freeplane.features.mode.ModeController;
public class DocearMapModelController implements IExtension{
public static DocearMapModelController getController() {
return getController(Controller.getCurrentModeController());
}
public static DocearMapModelController getController(ModeController modeController) {
return (DocearMapModelController) modeController.getExtension(DocearMapModelController.class);
}
public static void install( final DocearMapModelController docearMapModelController) {
Controller.getCurrentModeController().addExtension(DocearMapModelController.class, docearMapModelController);
}
public DocearMapModelController(final ModeController modeController){
final MapController mapController = modeController.getMapController();
final ReadManager readManager = mapController.getReadManager();
final WriteManager writeManager = mapController.getWriteManager();
DocearMapModelExtensionXmlBuilder builder = new DocearMapModelExtensionXmlBuilder();
builder.registerBy(readManager, writeManager);
// Controller.getCurrentController().getMapViewManager().addMapSelectionListener(new IMapSelectionListener() {
//
// public void beforeMapChange(MapModel oldMap, MapModel newMap) {}
//
// public void afterMapClose(MapModel oldMap) {}
//
// public void afterMapChange(MapModel oldMap, MapModel newMap) {
// if(newMap == null || newMap.getExtension(DocearMapModelExtension.class) != null || newMap.getFile() != null) return;
// DocearMapModelController.setModelWithCurrentVersion(newMap);
// }
// });
}
public static DocearMapModelExtension getModel(final MapModel map) {
DocearMapModelExtension mapModelExtension = (DocearMapModelExtension) map.getExtension(DocearMapModelExtension.class);
return mapModelExtension;
}
public static void setModel(final MapModel map, final DocearMapModelExtension mapModelExtension) {
final DocearMapModelExtension oldMapModelExtension = (DocearMapModelExtension) map.getExtension(DocearMapModelExtension.class);
if (mapModelExtension != null && oldMapModelExtension == null) {
map.addExtension(mapModelExtension);
}
else if (mapModelExtension == null && oldMapModelExtension != null) {
map.removeExtension(DocearMapModelExtension.class);
}
else if (mapModelExtension != null && oldMapModelExtension != null) {
map.removeExtension(DocearMapModelExtension.class);
map.addExtension(mapModelExtension);
}
}
public static DocearMapModelExtension setModelWithCurrentVersion(final MapModel map) {
DocearMapModelExtension mapModelExtension = new DocearMapModelExtension();
//ResourceController resourceController = ResourceController.getResourceController();
//mapModelExtension.setVersion(resourceController.getProperty("docear_map_extension_version"));
mapModelExtension.setMapId(createMapId());
DocearMapModelController.setModel(map, mapModelExtension);
return mapModelExtension;
}
public static String createMapId() {
return ""+System.currentTimeMillis()+"_"+CoreUtils.createRandomString(16);
}
}