Skip to content

Commit fc73380

Browse files
committed
enhanced workspace root setting, new workspace configuration extension point
1 parent 3a02220 commit fc73380

12 files changed

Lines changed: 206 additions & 50 deletions

File tree

plugins/org.dslforge.texteditor.demo/RAP Text Editor Demo.launch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@
3232
<booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>
3333
<stringAttribute key="pde.version" value="3.3"/>
3434
<booleanAttribute key="show_selected_only" value="false"/>
35-
<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"/>
35+
<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"/>
3636
<stringAttribute key="timestamp" value="1463000689673"/>
3737
<booleanAttribute key="tracing" value="false"/>
3838
<booleanAttribute key="useCustomFeatures" value="false"/>
3939
<booleanAttribute key="useDefaultConfigArea" value="true"/>
40-
<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"/>
40+
<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"/>
4141
</launchConfiguration>

plugins/org.dslforge.workspace/META-INF/MANIFEST.MF

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Require-Bundle: org.eclipse.core.runtime,
1111
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
1212
Export-Package: org.dslforge.database.pu.tables,
1313
org.dslforge.workspace,
14+
org.dslforge.workspace.contribution,
1415
org.dslforge.workspace.internal
1516
Import-Package: javax.persistence;version="2.1.0",
1617
org.apache.log4j;version="1.2.15",

plugins/org.dslforge.workspace/build.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ bin.includes = META-INF/,\
55
icons/,\
66
lib/derby.jar,\
77
plugin.xml,\
8-
about.html
8+
about.html,\
9+
schema/

plugins/org.dslforge.workspace/schema/configuration.exsd

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
</appinfo>
1818
</annotation>
1919
<complexType>
20+
<sequence minOccurs="0" maxOccurs="1">
21+
<element ref="contribution"/>
22+
</sequence>
2023
<attribute name="point" type="string" use="required">
2124
<annotation>
2225
<documentation>
@@ -44,6 +47,23 @@
4447
</complexType>
4548
</element>
4649

50+
<element name="contribution">
51+
<annotation>
52+
<documentation>
53+
A workspace contribution to the text editor workbench.
54+
</documentation>
55+
</annotation>
56+
<complexType>
57+
<attribute name="path" type="string" use="required">
58+
<annotation>
59+
<documentation>
60+
The root path of the workspace, e.g. D:/www/dslforge/workspace or /var/lib/tomcat7/workspace
61+
</documentation>
62+
</annotation>
63+
</attribute>
64+
</complexType>
65+
</element>
66+
4767
<annotation>
4868
<appinfo>
4969
<meta.section type="since"/>

plugins/org.dslforge.workspace/src/org/dslforge/workspace/IWorkspaceConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ public interface IWorkspaceConstants {
2626
public static final String PATH_SEPARATOR = "\\";
2727
public static final String LOCKED = "locked";
2828
public static final String UNLOCKED = "unlocked";
29+
public static final String WORKSPACE_DEFAULT_PATH = "D:/www/dslforge/workspace";
2930
}

plugins/org.dslforge.workspace/src/org/dslforge/workspace/WorkspaceManager.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* <copyright>
33
*
4-
* Copyright (c) 2015 PlugBee. All rights reserved.
4+
* Copyright (c) 2016 PlugBee. All rights reserved.
55
*
66
* This program and the accompanying materials are made available
77
* under the terms of the Eclipse Public License v1.0 which
@@ -30,6 +30,8 @@
3030
import org.dslforge.database.pu.tables.Resource;
3131
import org.dslforge.database.pu.tables.User;
3232
import org.dslforge.workspace.internal.DatabaseService;
33+
import org.eclipse.core.runtime.IPath;
34+
import org.eclipse.core.runtime.Path;
3335
import org.eclipse.emf.common.util.URI;
3436
import org.eclipse.jface.dialogs.MessageDialog;
3537
import org.eclipse.rap.rwt.RWT;
@@ -45,7 +47,7 @@ public class WorkspaceManager {
4547
private WorkspaceManager() {
4648
setupWorkspace();
4749
}
48-
50+
4951
private void setupWorkspace() {
5052
EntityManagerFactory emf = DatabaseService.getInstance().getEmf();
5153
Map<String, Object> properties = emf.getProperties();
@@ -90,31 +92,30 @@ private String computeResourceName(URI absoluteURI) {
9092
}
9193

9294
private String computeRelativePath(URI absoluteURI) {
93-
URI rootURI = URI.createFileURI(getWorkspaceRoot());
94-
URI relativeURI = absoluteURI.deresolve(rootURI);
95-
String[] segments = relativeURI.segments();
95+
IPath absolutePath = new Path(absoluteURI.devicePath());
96+
IPath relativePath = absolutePath.makeRelativeTo(new Path(getWorkspaceRoot()));
97+
String[] segments = relativePath.segments();
9698
if (segments.length == 0) {
9799
throw new RuntimeException("Problem when computing relative path for " + absoluteURI);
98100
}
99-
return relativeURI.toString();
101+
return relativePath.toString();
100102
}
101103

102104
private String computeProjectName(URI absoluteURI) {
103-
URI rootURI = URI.createFileURI(getWorkspaceRoot());
104-
URI relativeURI = absoluteURI.deresolve(rootURI);
105-
String[] segments = relativeURI.segments();
105+
IPath absolutePath = new Path(absoluteURI.devicePath());
106+
IPath relativePath = absolutePath.makeRelativeTo(new Path(getWorkspaceRoot()));
107+
String[] segments = relativePath.segments();
106108
if (segments.length == 0) {
107109
throw new RuntimeException("Problem when computing relative path for " + absoluteURI);
108110
}
109-
String projectName = relativeURI.segment(0);
110-
return projectName;
111+
return relativePath.segment(0);
111112
}
112113

113114
public void createProject(String projectName, String description, String visibility) {
114115
String userId = (String) RWT.getUISession().getAttribute("user");
115116
String workspaceRoot = getWorkspaceRoot();
116-
String projectPath = workspaceRoot + projectName;
117-
final File file = new File(projectPath);
117+
IPath projectPath = new Path(workspaceRoot).addTrailingSeparator().append(projectName);
118+
final File file = projectPath.toFile();
118119
if (!file.exists()) {
119120
createProject(projectName, description, projectName, userId, visibility);
120121
Display.getCurrent().syncExec(new Runnable() {
@@ -133,7 +134,10 @@ private void createProject(String projectName, String description, String path,
133134
}
134135

135136
public boolean isProject(File file) {
136-
return (file.isDirectory() && file.getParent() != null && file.getParent().equals(getWorkspaceRoot()));
137+
String parent = file.getParent();
138+
boolean result = new Path(parent).equals(new Path(getWorkspaceRoot()));
139+
return (file.isDirectory() && parent != null && result);
140+
137141
}
138142

139143
public void deleteProject(final File file) {
@@ -217,14 +221,14 @@ private boolean deleteProject(String projectName) {
217221
return false;
218222
}
219223
try {
220-
// delete files in the porject
224+
// delete files in the project
221225
List<Resource> allResourcesInProject = DatabaseService.getInstance().getAllResourcesInProject(projectName);
222226
for (Resource r : allResourcesInProject) {
223227
final String filePath = getWorkspaceRoot() + r.getPath().replace("/", "\\");
224228
final File file = new File(filePath);
225229
if (file.exists()) {
226230
if (!isLocked(file)) {
227-
WorkspaceManager.INSTANCE.deleteResource(projectName, r.getPath());
231+
deleteResource(projectName, r.getPath());
228232
String userId = (String) RWT.getUISession().getAttribute("user");
229233
logger.info(userId + " deleted file " + file.getPath());
230234
} else {
@@ -242,15 +246,15 @@ private boolean deleteProject(String projectName) {
242246
final File file = new File(filePath);
243247
if (file.exists()) {
244248
if (!isLocked(file)) {
245-
WorkspaceManager.INSTANCE.deleteFolder(folder.getPath());
249+
deleteFolder(folder.getPath());
246250
}
247251
}
248252
}
249253
// delete the project
250254
DatabaseService.getInstance().deleteProject(projectName);
251255

252256
} catch (PersistenceException ex) {
253-
// TODO: project contains resources, should make sure to delete all
257+
//project contains resources, should make sure to delete all
254258
// the resources inside the project.
255259
MessageDialog.openInformation(null, "Unexpected Error",
256260
"Project " + projectName + " could not be deleted, check your user access privileges.");
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* <copyright>
3+
*
4+
* Copyright (c) 2016 PlugBee. All rights reserved.
5+
*
6+
* This program and the accompanying materials are made available
7+
* under the terms of the Eclipse Public License v1.0 which
8+
* accompanies this distribution, and is available at
9+
* http://www.eclipse.org/legal/epl-v10.html
10+
*
11+
* Contributors:
12+
* Amine Lajmi - Initial API and implementation
13+
*
14+
* </copyright>
15+
*/
16+
package org.dslforge.workspace.contribution;
17+
18+
import org.eclipse.core.runtime.IPath;
19+
20+
public interface IWorkspaceContribution {
21+
22+
/**
23+
* Retursn the workspace root path declared in
24+
* org.dslforge.workspace.configuration extension. For example e.g.
25+
* D:/www/dslforge/workspace (windows) or /var/lib/tomcat/workspace (linux)
26+
*
27+
* @return the workspace root path
28+
*/
29+
IPath getWorkspaceRootPath();
30+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* <copyright>
3+
*
4+
* Copyright (c) 2016 PlugBee. All rights reserved.
5+
*
6+
* This program and the accompanying materials are made available
7+
* under the terms of the Eclipse Public License v1.0 which
8+
* accompanies this distribution, and is available at
9+
* http://www.eclipse.org/legal/epl-v10.html
10+
*
11+
* Contributors:
12+
* Amine Lajmi - Initial API and implementation
13+
*
14+
* </copyright>
15+
*/
16+
package org.dslforge.workspace.contribution;
17+
18+
import org.eclipse.core.runtime.IPath;
19+
import org.eclipse.core.runtime.Path;
20+
21+
public class WorkspaceContribution implements IWorkspaceContribution {
22+
23+
private IPath rootPath;
24+
25+
public WorkspaceContribution(String stringPath) {
26+
rootPath = new Path(stringPath);
27+
}
28+
29+
@Override
30+
public IPath getWorkspaceRootPath() {
31+
return rootPath;
32+
}
33+
}

0 commit comments

Comments
 (0)