Skip to content

Commit

Permalink
enhanced workspace root setting, new workspace configuration extensio…
Browse files Browse the repository at this point in the history
…n point
  • Loading branch information
amlajmi committed Jul 1, 2016
1 parent 3a02220 commit fc73380
Show file tree
Hide file tree
Showing 12 changed files with 206 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@
<booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>
<stringAttribute key="pde.version" value="3.3"/>
<booleanAttribute key="show_selected_only" value="false"/>
<stringAttribute key="target_bundles" value="com.google.guava@default:default,com.google.inject@default:default,com.ibm.icu.base@default:default,javax.activation@default:default,javax.inject@default:default,javax.mail@default:default,javax.persistence@default:default,javax.servlet*3.1.0.v201410161800@default:default,javax.xml@default:default,org.antlr.runtime*3.2.0.v201101311130@default:default,org.antlr.runtime*4.3.0.v201502022030@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.log4j@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.rap.common.ui@default:default,org.eclipse.emf.rap.edit.ui@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.http.servletbridge@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.servletbridge@default:default,org.eclipse.equinox.util@default:default,org.eclipse.gemini.jpa@2:default,org.eclipse.help@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.persistence.antlr@default:default,org.eclipse.persistence.asm@default:default,org.eclipse.persistence.core@default:default,org.eclipse.persistence.jpa.jpql@default:default,org.eclipse.persistence.jpa@default:default,org.eclipse.rap.jface.databinding@default:default,org.eclipse.rap.jface@default:default,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.rap.ui.cheatsheets@default:default,org.eclipse.rap.ui.forms@default:default,org.eclipse.rap.ui.navigator@default:default,org.eclipse.rap.ui.views@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.rap.ui@default:default,org.eclipse.xtend.lib.macro@default:default,org.eclipse.xtend.lib@default:default,org.eclipse.xtext.common.types@default:default,org.eclipse.xtext.smap@default:default,org.eclipse.xtext.util@default:default,org.eclipse.xtext.xbase.lib@default:default,org.eclipse.xtext.xbase@default:default,org.eclipse.xtext@default:default,org.hamcrest.core@default:default,org.objectweb.asm@default:default,osgi.enterprise@1:default"/>
<stringAttribute key="target_bundles" value="com.google.guava@default:default,com.google.inject@default:default,com.ibm.icu.base@default:default,javax.activation@default:default,javax.inject@default:default,javax.mail@default:default,javax.persistence@default:default,javax.servlet*3.1.0.v201410161800@default:default,javax.xml@default:default,org.antlr.runtime@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.log4j@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.rap.common.ui@default:default,org.eclipse.emf.rap.edit.ui@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.http.servletbridge@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.servletbridge@default:default,org.eclipse.equinox.util@default:default,org.eclipse.gemini.jpa@2:default,org.eclipse.help@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.persistence.antlr@default:default,org.eclipse.persistence.asm@default:default,org.eclipse.persistence.core@default:default,org.eclipse.persistence.jpa.jpql@default:default,org.eclipse.persistence.jpa@default:default,org.eclipse.rap.jface.databinding@default:default,org.eclipse.rap.jface@default:default,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.rap.ui.cheatsheets@default:default,org.eclipse.rap.ui.forms@default:default,org.eclipse.rap.ui.navigator@default:default,org.eclipse.rap.ui.views@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.rap.ui@default:default,org.eclipse.xtend.lib.macro@default:default,org.eclipse.xtend.lib@default:default,org.eclipse.xtext.common.types@default:default,org.eclipse.xtext.smap@default:default,org.eclipse.xtext.util@default:default,org.eclipse.xtext.xbase.lib@default:default,org.eclipse.xtext.xbase@default:default,org.eclipse.xtext@default:default,org.hamcrest.core@default:default,org.objectweb.asm@default:default,osgi.enterprise@1:default"/>
<stringAttribute key="timestamp" value="1463000689673"/>
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="true"/>
<stringAttribute key="workspace_bundles" value="org.codingpark.piraterobot.play.web@default:default,org.codingpark.piraterobot.play@default:default,org.dslforge.common.logging@default:false,org.dslforge.example.java.web@default:default,org.dslforge.styledtext@default:default,org.dslforge.texteditor.demo@default:default,org.dslforge.texteditor@default:default,org.dslforge.workspace.ui@default:default,org.dslforge.workspace@3:default,org.dslforge.xtext.common@default:default,org.eclipse.rap.ui.forms@default:default,org.eclipse.sphinx.examples.xtext.hummingbird.web@default:default,org.eclipse.sphinx.examples.xtext.hummingbird@default:default,org.eclipse.xtext.example.arithmetics.web@default:default,org.eclipse.xtext.example.arithmetics@default:default,org.eclipse.xtext.example.domainmodel.web@default:default,org.eclipse.xtext.example.domainmodel@default:default,org.eclipse.xtext.example.fowlerdsl.web@default:default,org.eclipse.xtext.example.fowlerdsl@default:default,org.xtext.example.mydsl.web@default:default,org.xtext.example.mydsl@default:default"/>
<stringAttribute key="workspace_bundles" value="fr.inria.diverse.models2016.dsl.web@default:default,fr.inria.diverse.models2016.dsl@default:default,fr.inria.diverse.models2016.model@default:default,org.codingpark.piraterobot.play.web@default:default,org.codingpark.piraterobot.play@default:default,org.dslforge.common.logging@default:false,org.dslforge.styledtext@default:default,org.dslforge.texteditor.demo@default:default,org.dslforge.texteditor@default:default,org.dslforge.workspace.ui@default:default,org.dslforge.workspace@3:default,org.dslforge.xtext.common@default:default"/>
</launchConfiguration>
1 change: 1 addition & 0 deletions plugins/org.dslforge.workspace/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Require-Bundle: org.eclipse.core.runtime,
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: org.dslforge.database.pu.tables,
org.dslforge.workspace,
org.dslforge.workspace.contribution,
org.dslforge.workspace.internal
Import-Package: javax.persistence;version="2.1.0",
org.apache.log4j;version="1.2.15",
Expand Down
3 changes: 2 additions & 1 deletion plugins/org.dslforge.workspace/build.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ bin.includes = META-INF/,\
icons/,\
lib/derby.jar,\
plugin.xml,\
about.html
about.html,\
schema/
20 changes: 20 additions & 0 deletions plugins/org.dslforge.workspace/schema/configuration.exsd
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
</appinfo>
</annotation>
<complexType>
<sequence minOccurs="0" maxOccurs="1">
<element ref="contribution"/>
</sequence>
<attribute name="point" type="string" use="required">
<annotation>
<documentation>
Expand Down Expand Up @@ -44,6 +47,23 @@
</complexType>
</element>

<element name="contribution">
<annotation>
<documentation>
A workspace contribution to the text editor workbench.
</documentation>
</annotation>
<complexType>
<attribute name="path" type="string" use="required">
<annotation>
<documentation>
The root path of the workspace, e.g. D:/www/dslforge/workspace or /var/lib/tomcat7/workspace
</documentation>
</annotation>
</attribute>
</complexType>
</element>

<annotation>
<appinfo>
<meta.section type="since"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ public interface IWorkspaceConstants {
public static final String PATH_SEPARATOR = "\\";
public static final String LOCKED = "locked";
public static final String UNLOCKED = "unlocked";
public static final String WORKSPACE_DEFAULT_PATH = "D:/www/dslforge/workspace";
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* <copyright>
*
* Copyright (c) 2015 PlugBee. All rights reserved.
* Copyright (c) 2016 PlugBee. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0 which
Expand Down Expand Up @@ -30,6 +30,8 @@
import org.dslforge.database.pu.tables.Resource;
import org.dslforge.database.pu.tables.User;
import org.dslforge.workspace.internal.DatabaseService;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.rap.rwt.RWT;
Expand All @@ -45,7 +47,7 @@ public class WorkspaceManager {
private WorkspaceManager() {
setupWorkspace();
}

private void setupWorkspace() {
EntityManagerFactory emf = DatabaseService.getInstance().getEmf();
Map<String, Object> properties = emf.getProperties();
Expand Down Expand Up @@ -90,31 +92,30 @@ private String computeResourceName(URI absoluteURI) {
}

private String computeRelativePath(URI absoluteURI) {
URI rootURI = URI.createFileURI(getWorkspaceRoot());
URI relativeURI = absoluteURI.deresolve(rootURI);
String[] segments = relativeURI.segments();
IPath absolutePath = new Path(absoluteURI.devicePath());
IPath relativePath = absolutePath.makeRelativeTo(new Path(getWorkspaceRoot()));
String[] segments = relativePath.segments();
if (segments.length == 0) {
throw new RuntimeException("Problem when computing relative path for " + absoluteURI);
}
return relativeURI.toString();
return relativePath.toString();
}

private String computeProjectName(URI absoluteURI) {
URI rootURI = URI.createFileURI(getWorkspaceRoot());
URI relativeURI = absoluteURI.deresolve(rootURI);
String[] segments = relativeURI.segments();
IPath absolutePath = new Path(absoluteURI.devicePath());
IPath relativePath = absolutePath.makeRelativeTo(new Path(getWorkspaceRoot()));
String[] segments = relativePath.segments();
if (segments.length == 0) {
throw new RuntimeException("Problem when computing relative path for " + absoluteURI);
}
String projectName = relativeURI.segment(0);
return projectName;
return relativePath.segment(0);
}

public void createProject(String projectName, String description, String visibility) {
String userId = (String) RWT.getUISession().getAttribute("user");
String workspaceRoot = getWorkspaceRoot();
String projectPath = workspaceRoot + projectName;
final File file = new File(projectPath);
IPath projectPath = new Path(workspaceRoot).addTrailingSeparator().append(projectName);
final File file = projectPath.toFile();
if (!file.exists()) {
createProject(projectName, description, projectName, userId, visibility);
Display.getCurrent().syncExec(new Runnable() {
Expand All @@ -133,7 +134,10 @@ private void createProject(String projectName, String description, String path,
}

public boolean isProject(File file) {
return (file.isDirectory() && file.getParent() != null && file.getParent().equals(getWorkspaceRoot()));
String parent = file.getParent();
boolean result = new Path(parent).equals(new Path(getWorkspaceRoot()));
return (file.isDirectory() && parent != null && result);

}

public void deleteProject(final File file) {
Expand Down Expand Up @@ -217,14 +221,14 @@ private boolean deleteProject(String projectName) {
return false;
}
try {
// delete files in the porject
// delete files in the project
List<Resource> allResourcesInProject = DatabaseService.getInstance().getAllResourcesInProject(projectName);
for (Resource r : allResourcesInProject) {
final String filePath = getWorkspaceRoot() + r.getPath().replace("/", "\\");
final File file = new File(filePath);
if (file.exists()) {
if (!isLocked(file)) {
WorkspaceManager.INSTANCE.deleteResource(projectName, r.getPath());
deleteResource(projectName, r.getPath());
String userId = (String) RWT.getUISession().getAttribute("user");
logger.info(userId + " deleted file " + file.getPath());
} else {
Expand All @@ -242,15 +246,15 @@ private boolean deleteProject(String projectName) {
final File file = new File(filePath);
if (file.exists()) {
if (!isLocked(file)) {
WorkspaceManager.INSTANCE.deleteFolder(folder.getPath());
deleteFolder(folder.getPath());
}
}
}
// delete the project
DatabaseService.getInstance().deleteProject(projectName);

} catch (PersistenceException ex) {
// TODO: project contains resources, should make sure to delete all
//project contains resources, should make sure to delete all
// the resources inside the project.
MessageDialog.openInformation(null, "Unexpected Error",
"Project " + projectName + " could not be deleted, check your user access privileges.");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* <copyright>
*
* Copyright (c) 2016 PlugBee. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Amine Lajmi - Initial API and implementation
*
* </copyright>
*/
package org.dslforge.workspace.contribution;

import org.eclipse.core.runtime.IPath;

public interface IWorkspaceContribution {

/**
* Retursn the workspace root path declared in
* org.dslforge.workspace.configuration extension. For example e.g.
* D:/www/dslforge/workspace (windows) or /var/lib/tomcat/workspace (linux)
*
* @return the workspace root path
*/
IPath getWorkspaceRootPath();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* <copyright>
*
* Copyright (c) 2016 PlugBee. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Amine Lajmi - Initial API and implementation
*
* </copyright>
*/
package org.dslforge.workspace.contribution;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;

public class WorkspaceContribution implements IWorkspaceContribution {

private IPath rootPath;

public WorkspaceContribution(String stringPath) {
rootPath = new Path(stringPath);
}

@Override
public IPath getWorkspaceRootPath() {
return rootPath;
}
}
Loading

0 comments on commit fc73380

Please sign in to comment.