Package org.freeplane.plugin.workspace.features

Source Code of org.freeplane.plugin.workspace.features.WorkspaceModelExtensionWriterReader

package org.freeplane.plugin.workspace.features;

import org.freeplane.core.extension.IExtension;
import org.freeplane.core.io.IAttributeHandler;
import org.freeplane.core.io.IExtensionAttributeWriter;
import org.freeplane.core.io.ITreeWriter;
import org.freeplane.core.io.ReadManager;
import org.freeplane.core.util.LogUtils;
import org.freeplane.features.map.IMapLifeCycleListener;
import org.freeplane.features.map.MapController;
import org.freeplane.features.map.MapModel;
import org.freeplane.features.map.NodeModel;
import org.freeplane.features.mode.ModeController;
import org.freeplane.plugin.workspace.WorkspaceController;
import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;

public class WorkspaceModelExtensionWriterReader implements IExtensionAttributeWriter {

  private static final String PROJECT_ID_XML_TAG = "project";
  private static final String MAP_EXTENSION_XML_TAG = "map";
  private static final String PROJECT_HOME_XML_TAG = "project_last_home";
   
  private WorkspaceModelExtensionWriterReader(MapController mapController) {
    registerAttributeHandlers(mapController.getReadManager());
    mapController.getWriteManager().addExtensionAttributeWriter(WorkspaceMapModelExtension.class, this)
    mapController.addMapLifeCycleListener(new IMapLifeCycleListener() {
     
      public void onRemove(MapModel map) {}
     
      public void onCreate(MapModel map) {
        WorkspaceMapModelExtension wmme = WorkspaceController.getMapModelExtension(map);
        if(wmme.getProject() == null) {
          //WORKSPACE - fixme: make sure a project is loaded and selected?
          try {
            WorkspaceController.addMapToProject(map, WorkspaceController.getCurrentProject());
          }
          catch (Exception e) {
            LogUtils.warn("Exception in "+this.getClass()+".onCreate(MapModel): no current project was selected");
          }
        }
      }
    });   
  }

  private void registerAttributeHandlers(ReadManager reader) {
    reader.addAttributeHandler(MAP_EXTENSION_XML_TAG, PROJECT_ID_XML_TAG, new IAttributeHandler() {
     
      public void setAttribute(Object map, String value) {
        final MapModel mapModel = (MapModel) map;
       
        WorkspaceMapModelExtension wmme = WorkspaceController.getMapModelExtension(mapModel);
        if(wmme.getProject() == null) {
          AWorkspaceProject prj = WorkspaceController.getCurrentModel().getProject(value);
          if(prj == null) {
            //WORKSPACE - todo: propagate exception
            LogUtils.warn("project with id="+value+" was not found");
            return;
          }
          wmme.setProject(prj);
        }
      }     
    });
   
    reader.addAttributeHandler(MAP_EXTENSION_XML_TAG, PROJECT_HOME_XML_TAG, new IAttributeHandler() {
     
      public void setAttribute(Object map, String value) {
        final MapModel mapModel = (MapModel) map;
       
        WorkspaceMapModelExtension wmme = WorkspaceController.getMapModelExtension(mapModel);
        if(wmme.getProject() == null) {
          //WORKSPACE - todo: find project for uri?
//          AWorkspaceProject prj = WorkspaceController.getCurrentModel().getProject(value);
//          if(prj == null) {
//            //WORKSPACE - todo: propagate exception
//            LogUtils.warn("project with id="+value+" was not found");
//            return;
//          }
//          wmme.setProject(prj);
        }
        else {
          //ignore
        }
      }     
    });
  }

  public void writeAttributes(ITreeWriter writer, Object userObject, IExtension extension) {
    final WorkspaceMapModelExtension wmme = extension != null ? (WorkspaceMapModelExtension) extension : WorkspaceController.getMapModelExtension(((NodeModel) userObject).getMap());
    AWorkspaceProject prj = wmme.getProject();
   
    if(prj == null) {
      return;
    }   
    writer.addAttribute(PROJECT_ID_XML_TAG, prj.getProjectID());
    writer.addAttribute(PROJECT_HOME_XML_TAG, prj.getProjectHome().toString());
  }

  public static void register(ModeController modeController) {
    new WorkspaceModelExtensionWriterReader(modeController.getMapController());
  }
 
 
}
TOP

Related Classes of org.freeplane.plugin.workspace.features.WorkspaceModelExtensionWriterReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.