diff options
author | Quentin Le Menez | 2015-05-13 09:32:17 +0000 |
---|---|---|
committer | Camille Letavernier | 2015-05-19 08:00:03 +0000 |
commit | 45296aa80187b6a8f4324b664f1fcc63c4680816 (patch) | |
tree | 5c5ea65d2d6995ac5cc18af8d5119294753c9951 /plugins/uml | |
parent | 6411ef7f714a63f7ac673b68607186549bbd5940 (diff) | |
download | org.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')
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;
}
|