Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractBaseModel.java')
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractBaseModel.java70
1 files changed, 69 insertions, 1 deletions
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractBaseModel.java b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractBaseModel.java
index e682ced360b..af63fc6987a 100644
--- a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractBaseModel.java
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractBaseModel.java
@@ -24,6 +24,7 @@ import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.URIConverter;
import org.eclipse.emf.ecore.xmi.XMIResource;
@@ -37,7 +38,7 @@ import org.eclipse.papyrus.infra.core.Activator;
* @author cedric dumoulin
*
*/
-public abstract class AbstractBaseModel extends AbstractModel implements IVersionableModel {
+public abstract class AbstractBaseModel extends AbstractModel implements IVersionableModel, IEMFModel {
/**
* The associated resource.
@@ -52,6 +53,7 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
/**
* @return the resource
*/
+ @Override
public Resource getResource() {
return resource;
}
@@ -85,12 +87,14 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
*
* @param fullPath
*/
+ @Override
@Deprecated
public void createModel(IPath fullPath) {
createModel(getPlatformURI(fullPath));
}
+ @Override
public void createModel(URI uri) {
// Compute model URI
resourceURI = uri.appendFileExtension(getModelFileExtension());
@@ -156,6 +160,7 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
*
* @param fullPathWithoutExtension
*/
+ @Override
@Deprecated
public void loadModel(IPath fullPathWithoutExtension) {
loadModel(getPlatformURI(fullPathWithoutExtension));
@@ -167,6 +172,7 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
*
* @param fullPathWithoutExtension
*/
+ @Override
public void loadModel(URI uriWithoutExtension) {
// Compute model URI
resourceURI = uriWithoutExtension.appendFileExtension(getModelFileExtension());
@@ -181,17 +187,31 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
}
/**
+ * Queries whether my resource (based on the given URI) exists in the current model set.
+ *
+ * @param uriWithoutExtension
+ * the base resource URI to check
+ *
+ * @return whether my resource based on this URI exists
+ */
+ protected boolean exists(URI uriWithoutExtension) {
+ return modelSet.getURIConverter().exists(uriWithoutExtension.appendFileExtension(getModelFileExtension()), null);
+ }
+
+ /**
* Import the model by using the provided fullpath as a hint for the
* resource URI. In this implementation, simply call {@link #loadModel(IPath)}
*
* @param fullPathWithoutExtension
*/
+ @Override
@Deprecated
public void importModel(IPath fullPathWithoutExtension) {
loadModel(fullPathWithoutExtension);
}
+ @Override
public void importModel(URI uriWithoutExtension) {
loadModel(uriWithoutExtension);
}
@@ -201,6 +221,7 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
* @see org.eclipse.papyrus.infra.core.resource.IModel#saveModel()
*
*/
+ @Override
public void saveModel() throws IOException {
if(!getModelManager().getTransactionalEditingDomain().isReadOnly(resource) && !ModelUtils.resourceFailedOnLoad(resource)) {
resource.save(null);
@@ -212,11 +233,13 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
*
* @param nameWithoutExt
*/
+ @Override
@Deprecated
public void changeModelPath(IPath fullPath) {
setModelURI(getPlatformURI(fullPath));
}
+ @Override
public void setModelURI(URI uriWithoutExtension) {
// Compute model URI
resourceURI = uriWithoutExtension.appendFileExtension(getModelFileExtension());
@@ -228,6 +251,7 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
* @see org.eclipse.papyrus.infra.core.resource.IModel#dispose()
*
*/
+ @Override
public void unload() {
// call registered snippets
snippets.performDispose(this);
@@ -237,6 +261,8 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
resource.unload();
resource = null;
}
+
+ super.unload();
}
@@ -259,6 +285,7 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
}
+ @Override
public void saveCopy(IPath targetPathWithoutExtension, Map<Object, Object> targetMap) {
// OutputStream targetStream = getOutputStream(targetPath);
Map<Object, Object> saveOptions = new HashMap<Object, Object>();
@@ -275,6 +302,7 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
// resource.save(targetStream, options);
}
+ @Override
public void fillTargetMap(IPath targetPathWithoutExtension, Map<Object, Object> targetMap) {
targetMap.put(getResourceURI(), getTargetURI(targetPathWithoutExtension));
}
@@ -342,6 +370,7 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
}
+ @Override
public Set<URI> getModifiedURIs() {
if(getResource() != null) {
if(!getResource().isTrackingModification() || getResource().isModified()) {
@@ -351,4 +380,43 @@ public abstract class AbstractBaseModel extends AbstractModel implements IVersio
return Collections.emptySet();
}
+ @Override
+ public void handle(Resource resource) {
+ //Default: do nothing
+ }
+
+ @Override
+ public boolean isModelFor(Object element) {
+ return element != null && element == resource;
+ }
+
+ /**
+ * For standard controlled resources, resources have a single root with a non-null eContainer
+ *
+ *
+ * @param resource
+ * @return
+ */
+ @Override
+ public boolean isControlled(Resource resource) {
+ if(resource == this.resource || resource == null) {
+ return false;
+ }
+
+ if(resource.getContents().isEmpty()) {
+ return false;
+ }
+
+ EObject rootElement = resource.getContents().get(0);
+
+ boolean isControlled = rootElement.eContainer() != null;
+ if(isControlled) {
+ Resource parentResource = rootElement.eContainer().eResource();
+ boolean isChildOfMainResource = parentResource == this.resource || isControlled(parentResource);
+ return isChildOfMainResource;
+ }
+
+ return false;
+ }
+
}

Back to the top