Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/modelingproject/manager/ModelingProjectManagerImpl.java42
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/modelingproject/ModelingProject.java80
2 files changed, 57 insertions, 65 deletions
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/modelingproject/manager/ModelingProjectManagerImpl.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/modelingproject/manager/ModelingProjectManagerImpl.java
index cb5ff1edae..73187fa880 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/modelingproject/manager/ModelingProjectManagerImpl.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/modelingproject/manager/ModelingProjectManagerImpl.java
@@ -355,12 +355,16 @@ public class ModelingProjectManagerImpl implements ModelingProjectManager {
// check project
Option<ModelingProject> optionalModelingProject = ModelingProject.asModelingProject(project);
if (optionalModelingProject.some()) {
+ ModelingProject modelingProject = optionalModelingProject.get();
try {
// See 525466. we set the validity to true in case of DefaultModelingProjectResourceListener that
// has set it to false or the representation file will not be created if it does not exist yet.
- optionalModelingProject.get().setValid(true);
- Option<URI> mainRepresentationsFileURI = optionalModelingProject.get().getMainRepresentationsFileURI(new SubProgressMonitor(monitor, 1), false, true);
- if (mainRepresentationsFileURI.some()) {
+ Option<URI> mainRepresentationsFileURI;
+ synchronized (modelingProject) {
+ modelingProject.setValid(true);
+ mainRepresentationsFileURI = modelingProject.getMainRepresentationsFileURI(new SubProgressMonitor(monitor, 1), false, true);
+ }
+ if (mainRepresentationsFileURI != null && mainRepresentationsFileURI.some()) {
// Open the session.
loadAndOpenRepresentationsFiles(Lists.newArrayList(mainRepresentationsFileURI.get()), true, true);
}
@@ -371,31 +375,33 @@ public class ModelingProjectManagerImpl implements ModelingProjectManager {
} catch (final CoreException ce) {
SiriusPlugin.getDefault().getLog().log(ce.getStatus());
}
- // Add a marker on this project
- try {
- final IMarker marker = project.createMarker(ModelingMarker.MARKER_TYPE);
- marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
- marker.setAttribute(IMarker.MESSAGE, e.getMessage());
- } catch (final CoreException ce) {
- SiriusPlugin.getDefault().getLog().log(ce.getStatus());
- }
if (e.getCause() != null && ModelingProjectQuery.ZERO_REPRESENTATIONS_FILE_FOUND_IN.equals(e.getCause().getMessage())) {
// 0 files has been found : create a representation
ModelingProjectManager.INSTANCE.createLocalRepresentationsFile(project, new SubProgressMonitor(monitor, 1));
// Project has been marked as invalid but now it has a
// main representation file, force the computation of
// its mainRepresentationFileURI.
- optionalModelingProject.get().getMainRepresentationsFileURI(new SubProgressMonitor(monitor, 1), true, true);
- } else if (e.getCause() != null && ModelingProjectQuery.A_MODELING_PROJECT_MUST_CONTAIN_ONLY_ONE.equals(e.getCause().getMessage())) {
- // several files have been found : rollback
- removeModelingNature(project, new SubProgressMonitor(monitor, 1));
- throw new CoreException(new Status(IStatus.ERROR, SiriusEditPlugin.ID, e.getMessage()));
+ modelingProject.getMainRepresentationsFileURI(new SubProgressMonitor(monitor, 1), true, true);
+ } else {
+ // Add a marker on this project
+ try {
+ final IMarker marker = project.createMarker(ModelingMarker.MARKER_TYPE);
+ marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
+ marker.setAttribute(IMarker.MESSAGE, e.getMessage());
+ } catch (final CoreException ce) {
+ SiriusPlugin.getDefault().getLog().log(ce.getStatus());
+ }
+ if (e.getCause() != null && ModelingProjectQuery.A_MODELING_PROJECT_MUST_CONTAIN_ONLY_ONE.equals(e.getCause().getMessage())) {
+ // several files have been found : rollback
+ removeModelingNature(project, new SubProgressMonitor(monitor, 1));
+ throw new CoreException(new Status(IStatus.ERROR, SiriusEditPlugin.ID, e.getMessage()));
+ }
}
}
- if (optionalModelingProject.get().getSession() != null) {
+ if (modelingProject.getSession() != null) {
// add semantic resources if already existing in the project
- addSemanticResources(project, optionalModelingProject.get().getSession(), new SubProgressMonitor(monitor, 1));
+ addSemanticResources(project, modelingProject.getSession(), new SubProgressMonitor(monitor, 1));
}
}
} finally {
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/modelingproject/ModelingProject.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/modelingproject/ModelingProject.java
index f2efc24c5b..f2f9e4d404 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/modelingproject/ModelingProject.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/modelingproject/ModelingProject.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2011, 2016 THALES GLOBAL SERVICES.
+ * Copyright (c) 2011, 2018 THALES GLOBAL SERVICES.
* 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
@@ -26,8 +26,7 @@ import org.eclipse.sirius.ext.base.Options;
import org.eclipse.sirius.viewpoint.Messages;
/**
- * A modeling project nature is used to know which projects should be handled in
- * project mode by the modeling explorer.
+ * A modeling project nature is used to know which projects should be handled in project mode by the modeling explorer.
*
* @author mchauvin
*/
@@ -48,8 +47,7 @@ public class ModelingProject implements IProjectNature, IModelingElement {
private URI mainRepresentationsFileURI;
/**
- * A modeling project is not valid if its main representations file has not
- * be loaded correctly.
+ * A modeling project is not valid if its main representations file has not be loaded correctly.
*/
private boolean valid = true;
@@ -101,8 +99,7 @@ public class ModelingProject implements IProjectNature, IModelingElement {
}
/**
- * Check if the given project is accessible and it has a modeling project
- * nature.
+ * Check if the given project is accessible and it has a modeling project nature.
*
* @param project
* the project to check
@@ -122,8 +119,7 @@ public class ModelingProject implements IProjectNature, IModelingElement {
*
* @param project
* The original project
- * @return an optional ModelingProject (none if this project is not a
- * modeling project).
+ * @return an optional ModelingProject (none if this project is not a modeling project).
*/
public static Option<ModelingProject> asModelingProject(IProject project) {
IProjectNature nature = null;
@@ -146,14 +142,13 @@ public class ModelingProject implements IProjectNature, IModelingElement {
/**
* Retrieve the opened session in this project.
*
- * @return the opened session associated to this project, <code>null</code>
- * if it can not be found or if session is not yet opened
+ * @return the opened session associated to this project, <code>null</code> if it can not be found or if session is
+ * not yet opened
*/
public Session getSession() {
/*
- * this method should remain fastest as possible : - the number of aird
- * file for a a project should be very low, most often there will be
- * only one.
+ * this method should remain fastest as possible : - the number of aird file for a a project should be very low,
+ * most often there will be only one.
*/
final Option<URI> optionalUri = getMainRepresentationsFileURI(new NullProgressMonitor());
if (optionalUri.some()) {
@@ -167,16 +162,14 @@ public class ModelingProject implements IProjectNature, IModelingElement {
}
/**
- * Return an optional URI corresponding to the main representations file of
- * this project. If the main representations file is not known, it will be
- * computed by a specific SaxParser that analyzes representations files of
- * this project to determine which is never referenced.
+ * Return an optional URI corresponding to the main representations file of this project. If the main
+ * representations file is not known, it will be computed by a specific SaxParser that analyzes representations
+ * files of this project to determine which is never referenced.
*
* @param monitor
- * the monitor to be used for reporting progress and responding
- * to cancellation. The monitor is never <code>null</code>
- * @return an optional URI corresponding to the main session file of this
- * project.
+ * the monitor to be used for reporting progress and responding to cancellation. The monitor is never
+ * <code>null</code>
+ * @return an optional URI corresponding to the main session file of this project.
* @throws IllegalArgumentException
* In case of multiples main aird in the references.
*/
@@ -185,28 +178,23 @@ public class ModelingProject implements IProjectNature, IModelingElement {
}
/**
- * Return an optional URI corresponding to the main representations file of
- * this project. If the main representations file is not known, it will be
- * computed by a specific SaxParser that analyzes representations files of
- * this project to determine which is never referenced.<BR>
+ * Return an optional URI corresponding to the main representations file of this project. If the main
+ * representations file is not known, it will be computed by a specific SaxParser that analyzes representations
+ * files of this project to determine which is never referenced.<BR>
* This method marks this project as invalid.
*
* @param monitor
- * the monitor to be used for reporting progress and responding
- * to cancellation. The monitor is never <code>null</code>
+ * the monitor to be used for reporting progress and responding to cancellation. The monitor is never
+ * <code>null</code>
* @param force
- * true if the main representations file must be compute even if
- * it is already known.
+ * true if the main representations file must be compute even if it is already known.
* @param throwException
- * true if you want to throw exception in case of problem or only
- * have an None option result.
- * @return an optional URI corresponding to the main session file of this
- * project.
+ * true if you want to throw exception in case of problem or only have an None option result.
+ * @return an optional URI corresponding to the main session file of this project.
* @throws IllegalArgumentException
- * In case of problem during computing the main representations
- * file.
+ * In case of problem during computing the main representations file.
*/
- public Option<URI> getMainRepresentationsFileURI(IProgressMonitor monitor, boolean force, boolean throwException) throws IllegalArgumentException {
+ public synchronized Option<URI> getMainRepresentationsFileURI(IProgressMonitor monitor, boolean force, boolean throwException) throws IllegalArgumentException {
Option<URI> mainRepresentationsFileURIOption = Options.newNone();
try {
monitor.beginTask(Messages.ModelingProject_getMainRepFileURIMsg, 1);
@@ -238,13 +226,11 @@ public class ModelingProject implements IProjectNature, IModelingElement {
}
/**
- * Check if this representations file is the main representations file of
- * this project.
+ * Check if this representations file is the main representations file of this project.
*
* @param representationsFile
* the file to check
- * @return true if this file is the main representations file, false
- * otherwise
+ * @return true if this file is the main representations file, false otherwise
*/
public boolean isMainRepresentationsFile(IFile representationsFile) {
boolean result = false;
@@ -256,23 +242,23 @@ public class ModelingProject implements IProjectNature, IModelingElement {
}
/**
- * Get the valid status of this project.A modeling project is not valid if
- * its main representations file has not be loaded correctly.
+ * Get the valid status of this project.A modeling project is not valid if its main representations file has not be
+ * loaded correctly.
*
* @return true is the Modeling project is valid, false otherwise.
*/
- public boolean isValid() {
+ public synchronized boolean isValid() {
return this.valid;
}
/**
- * Set the valid status of a modeling project. A modeling project is not
- * valid if its main representations file has not be loaded correctly.
+ * Set the valid status of a modeling project. A modeling project is not valid if its main representations file has
+ * not be loaded correctly.
*
* @param valid
* The new valid state
*/
- public void setValid(boolean valid) {
+ public synchronized void setValid(boolean valid) {
this.valid = valid;
}
}

Back to the top