package org.freeplane.plugin.workspace.model.project;
import java.io.File;
import java.net.URI;
import org.freeplane.core.util.Compat;
import org.freeplane.core.util.LogUtils;
import org.freeplane.core.util.UniqueIDCreator;
import org.freeplane.features.link.LinkController;
import org.freeplane.plugin.workspace.URIUtils;
import org.freeplane.plugin.workspace.WorkspaceController;
import org.freeplane.plugin.workspace.nodes.ProjectRootNode;
public class DefaultWorkspaceProjectCreator implements IWorkspaceProjectCreater {
public AWorkspaceProject newProject(final String projectID, final URI projectHome) {
return new AWorkspaceProject() {
private String id = projectID;
private URI home = projectHome;
@Override
public String getProjectID() {
if(this.id == null) {
this.id = UniqueIDCreator.getCreator().uniqueID();
}
return this.id;
}
@Override
public URI getProjectHome() {
return this.home;
}
@Override
public String getProjectName() {
if(getModel().getRoot() == null) {
return this.getProjectID();
}
return getModel().getRoot().getName().trim();
}
@Override
public URI getProjectDataPath() {
return URIUtils.createURI(getProjectHome().toString()+"/_data/"+getProjectID());
}
public URI getRelativeURI(URI uri) {
//WORKSPACE - todo: check new implementation
/* windows paths on different drives are getting a relative version as well
* -> modify method that builds the relative paths
*
*/
try {
URI relativeUri = LinkController.getController().createRelativeURI(new File(getProjectHome()), new File(uri), LinkController.LINK_RELATIVE_TO_MINDMAP);
if(Compat.isWindowsOS() && relativeUri.getRawPath().contains(":")) {
return uri;
}
else {
return new URI(WorkspaceController.PROJECT_RESOURCE_URL_PROTOCOL + "://"+ getProjectID() +"/"+relativeUri.getRawPath());
}
}
catch (Exception e) {
LogUtils.warn(e);
}
return null;
}
@Override
public ProjectVersion getVersion() {
String version = null;
if(getModel().getRoot() != null) {
version = ((ProjectRootNode)getModel().getRoot()).getVersion();
}
if(version == null) {
version = "freeplane 1.0";
}
return new ProjectVersion(version);
}
};
}
}