Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuentin Le Menez2015-05-13 09:32:17 +0000
committerCamille Letavernier2015-05-19 08:00:03 +0000
commit45296aa80187b6a8f4324b664f1fcc63c4680816 (patch)
tree5c5ea65d2d6995ac5cc18af8d5119294753c9951 /plugins/uml
parent6411ef7f714a63f7ac673b68607186549bbd5940 (diff)
downloadorg.eclipse.papyrus-45296aa80187b6a8f4324b664f1fcc63c4680816.tar.gz
org.eclipse.papyrus-45296aa80187b6a8f4324b664f1fcc63c4680816.tar.xz
org.eclipse.papyrus-45296aa80187b6a8f4324b664f1fcc63c4680816.zip
Bug 466259: [Wizards] Error message not displayed when trying to create a project/model which already exists (With different case)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=466259 - disabled the Next and Finish buttons if a model with the same name already extists - added a message signaling why those buttons were disabled Change-Id: I233bf7a85e767cb40b3703c51a82c716ab28543f Signed-off-by: Quentin Le Menez <quentin.lemenez@cea.fr> Reviewed-on: https://git.eclipse.org/r/47800 Tested-by: Hudson CI Reviewed-by: Camille Letavernier <camille.letavernier@cea.fr>
Diffstat (limited to 'plugins/uml')
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/Messages.java3
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/messages.properties3
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/NewModelFilePage.java113
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/wizards/CreateModelWizard.java13
4 files changed, 114 insertions, 18 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/Messages.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/Messages.java
index 3287c65c017..45ad8dbe007 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/Messages.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/Messages.java
@@ -82,6 +82,9 @@ public class Messages extends NLS {
/** The New model file page_page_desc. */
public static String NewModelFilePage_page_desc;
+ /** The New model file page_page_desc. */
+ public static String NewModelFilePage_page_same_case_desc;
+
/** The Select diagram category page_cannot_find_category. */
public static String SelectDiagramCategoryPage_cannot_find_category;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/messages.properties b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/messages.properties
index 2fc2be3d5a0..b4efe254779 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/messages.properties
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/messages/messages.properties
@@ -41,9 +41,10 @@ NewModelFilePage_default_diagram_name=model
NewModelFilePage_diagram_file_was_renamed=Thus, the diagram file has been renamed from {0} to {1}
NewModelFilePage_new_diagram_category_needs_specific_extension=The new diagram category requires a specific diagram file extension.
NewModelFilePage_page_desc=Create a new {0} model
+NewModelFilePage_page_same_case_desc=There already is a model with this name:
SelectDiagramCategoryPage_cannot_find_category=Could not find DiagramCategory for {0}
SelectDiagramCategoryPage_diagram_language_group=Diagram Language:
-SelectDiagramCategoryPage_select_language=Select language of the diagram
+SelectDiagramCategoryPage_select_language=Select the language of the new diagrams
SelectDiagramCategoryPage_select_one_category=Please select at least one category
SelectDiagramKindPage_0=Choose a profile to apply
SelectDiagramKindPage_default_diagram_name=RootElement
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/NewModelFilePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/NewModelFilePage.java
index 221bbf350fc..222e03d9af2 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/NewModelFilePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/NewModelFilePage.java
@@ -13,14 +13,25 @@
*******************************************************************************/
package org.eclipse.papyrus.uml.diagram.wizards.pages;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.uml.diagram.wizards.Activator;
import org.eclipse.papyrus.uml.diagram.wizards.messages.Messages;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
@@ -42,6 +53,8 @@ public class NewModelFilePage extends WizardNewFileCreationPage {
/** The Constant PAGE_ID. */
public static final String PAGE_ID = "NewPapyrusModel"; //$NON-NLS-1$
+ private String DefaultDescription;
+
/**
* Instantiates a new new model file page.
*
@@ -67,7 +80,8 @@ public class NewModelFilePage extends WizardNewFileCreationPage {
public NewModelFilePage(String pageId, IStructuredSelection selection, String modelKindName) {
super(pageId, selection);
setTitle(NLS.bind(Messages.NewModelFilePage_3, modelKindName));
- setDescription(NLS.bind(Messages.NewModelFilePage_page_desc, modelKindName));
+ DefaultDescription = NLS.bind(Messages.NewModelFilePage_page_desc, modelKindName);
+ setDescription(DefaultDescription);
setFileExtension(DEFAULT_DIAGRAM_EXTENSION);
}
@@ -81,7 +95,7 @@ public class NewModelFilePage extends WizardNewFileCreationPage {
public void createControl(Composite parent) {
super.createControl(parent);
String filename = getFileName();
- if(filename.contains("%20")) {
+ if (filename.contains("%20")) {
filename = filename.replaceAll("%20", " ");
}
setFileName(getUniqueFileName(getContainerFullPath(), filename, getFileExtension()));
@@ -101,22 +115,22 @@ public class NewModelFilePage extends WizardNewFileCreationPage {
String currentExtension = getFileExtension();
if (!currentExtension.equals(newExtension)) {
- // String oldFileName = getFileName();
+ // String oldFileName = getFileName();
String newFileName = NewModelFilePage.getUniqueFileName(getContainerFullPath(), getFileName().replace(currentExtension, ""), newExtension);
setFileName(newFileName);
setFileExtension(newExtension);
- // String message1 = Messages.NewModelFilePage_new_diagram_category_needs_specific_extension;
- // String message2 = Messages.bind(Messages.NewModelFilePage_diagram_file_was_renamed, oldFileName, newFileName);
- // String message = message1 + message2;
- // Status resultStatus = new Status(Status.INFO, Activator.PLUGIN_ID, message);
+ // String message1 = Messages.NewModelFilePage_new_diagram_category_needs_specific_extension;
+ // String message2 = Messages.bind(Messages.NewModelFilePage_diagram_file_was_renamed, oldFileName, newFileName);
+ // String message = message1 + message2;
+ // Status resultStatus = new Status(Status.INFO, Activator.PLUGIN_ID, message);
//
- // String errorMessage = getErrorMessage();
- // if(errorMessage != null) {
- // resultStatus = new Status(Status.ERROR, Activator.PLUGIN_ID, errorMessage);
- // }
- // return resultStatus;
+ // String errorMessage = getErrorMessage();
+ // if(errorMessage != null) {
+ // resultStatus = new Status(Status.ERROR, Activator.PLUGIN_ID, errorMessage);
+ // }
+ // return resultStatus;
}
return Status.OK_STATUS;
}
@@ -152,7 +166,7 @@ public class NewModelFilePage extends WizardNewFileCreationPage {
fileName = DEFAULT_NAME;
}
- if(fileName.contains(".")) { //$NON-NLS-1$
+ if (fileName.contains(".")) { //$NON-NLS-1$
fileName = fileName.substring(0, fileName.lastIndexOf(".")); //$NON-NLS-1$
}
@@ -193,4 +207,77 @@ public class NewModelFilePage extends WizardNewFileCreationPage {
}
+ /**
+ * @see org.eclipse.ui.dialogs.WizardNewFileCreationPage#createNewFile()
+ *
+ * @return
+ * The model's IFile
+ */
+ @Override
+ public IFile createNewFile() {
+ // This will generate a dialog if there are conflicts during the creation
+ // TODO implement a local version of this method to catch the generated exceptions to stop the creation there
+ // This will avoid saving problems in the end (CreateModelWizard>saveDiagram) and the possible corruption of the handled models
+ // final IPath containerPath = getContainerFullPath();
+ // IPath newFilePath = containerPath.append(getFileName());
+
+ return super.createNewFile();
+ }
+
+ /**
+ * This method is used to avoid case conflicts between existing and newly created models
+ *
+ * @see org.eclipse.jface.wizard.WizardPage#canFlipToNextPage()
+ *
+ * @return
+ */
+ @Override
+ public boolean canFlipToNextPage() {
+ Collection<String> selectionMembers = new ArrayList<String>();
+ boolean canFlip = true;
+ // retrieve the selected elements and get its children
+ try {
+ IResource iResource = ResourcesPlugin.getWorkspace().getRoot().findMember(getContainerFullPath());
+ if (iResource != null) {
+ if (iResource instanceof IFolder) {
+ IFolder iFolder = (IFolder) iResource;
+ selectionMembers = getMembersNames(iFolder.members());
+ }
+ if (iResource instanceof IProject) {
+ IProject iProject = (IProject) iResource;
+ selectionMembers = getMembersNames(iProject.members());
+ }
+ }
+ } catch (CoreException e) {
+ Activator.log.error(e);
+ }
+
+ for (String memberName : selectionMembers) {
+ if (getFileName().equalsIgnoreCase(memberName)) {
+ canFlip = false;
+ this.setDescription(Messages.NewModelFilePage_page_same_case_desc + memberName);
+ }
+ }
+
+ if (canFlip) {
+ this.setDescription(DefaultDescription);
+ }
+ return canFlip;
+ }
+
+ /**
+ * This method returns the names of the first level children of the selected element
+ *
+ * @param membersArray
+ * @return
+ */
+ public Collection<String> getMembersNames(IResource[] membersArray) {
+ Collection<String> membersList = new ArrayList<String>();
+ for (Iterator<IResource> arrayIter = Arrays.asList(membersArray).iterator(); arrayIter.hasNext();) {
+ IResource iResource = arrayIter.next();
+ membersList.add(iResource.getName());
+ }
+ return membersList;
+ }
+
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/wizards/CreateModelWizard.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/wizards/CreateModelWizard.java
index 82a9caf7d75..17e1e2c929d 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/wizards/CreateModelWizard.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/wizards/CreateModelWizard.java
@@ -257,7 +257,6 @@ public class CreateModelWizard extends Wizard implements INewWizard {
createAndOpenPapyrusModel(newURI, diagramCategoryId);
-
return true;
}
@@ -301,11 +300,9 @@ public class CreateModelWizard extends Wizard implements INewWizard {
initDiagramModel(modelSet, diagramCategoryId);
-
-
initProfile(modelSet);
initTemplate(modelSet);
- openDiagram(newURI);
+ // openDiagram(newURI);
} catch (ServiceException e) {
Activator.log.error(e);
return false;
@@ -625,6 +622,7 @@ public class CreateModelWizard extends Wizard implements INewWizard {
* the di resource set
*/
private void saveDiagram(ModelSet modelSet) {
+ // TODO verify that there are no conflicts with the existing files and the newly created one
try {
modelSet.save(new NullProgressMonitor());
} catch (IOException e) {
@@ -916,6 +914,13 @@ public class CreateModelWizard extends Wizard implements INewWizard {
result = allPages[i].isPageComplete();
}
+ // This takes care of the case problems when creating a model with the same name but different case
+ for (IWizardPage page : allPages) {
+ if (page instanceof NewModelFilePage) {
+ return page.canFlipToNextPage();
+ }
+ }
+
return result;
}

Back to the top