diff options
author | Quentin Le Menez | 2015-05-21 16:23:08 +0000 |
---|---|---|
committer | Camille Letavernier | 2015-05-26 08:32:15 +0000 |
commit | c4a29864907306bed517e391056705539836e8fe (patch) | |
tree | 0a57413ba1bff4926a402cbf1ac94a08f7b032e0 | |
parent | 47b0f29f12f7d8476474edd524feaa9113f078f5 (diff) | |
download | org.eclipse.papyrus-c4a29864907306bed517e391056705539836e8fe.tar.gz org.eclipse.papyrus-c4a29864907306bed517e391056705539836e8fe.tar.xz org.eclipse.papyrus-c4a29864907306bed517e391056705539836e8fe.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 in the workspace
- disabled the Next and Finish buttons if a project with the same name already extists in the workspace
- added a message signaling why those buttons were disabled
- added an error message if the user is unable to create and open the new papyrus model
Change-Id: Iea3b3162ad5102a34612e2ed96e6dd33322cc735
Signed-off-by: Quentin Le Menez <quentin.lemenez@cea.fr>
Reviewed-on: https://git.eclipse.org/r/48394
Tested-by: Hudson CI
Reviewed-by: Camille Letavernier <camille.letavernier@cea.fr>
5 files changed, 92 insertions, 36 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 45ad8dbe007..88301b63cc7 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 @@ -50,6 +50,10 @@ public class Messages extends NLS { /** The New papyrus project wizard_papyrus_project_desc. */ public static String NewPapyrusProjectWizard_papyrus_project_desc; + public static String PapyrusProjectCreationPage_page_same_case_desc; + + public static String PapyrusProjectCreationPage_page_incorrect_desc; + /** The Diagram category registry_bad_class_name_of_category. */ public static String DiagramCategoryRegistry_bad_class_name_of_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 b4efe254779..c3db50ee148 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 @@ -25,6 +25,8 @@ NewPapyrusProjectWizard_exception_on_opening=Problems during opening of the proj NewPapyrusProjectWizard_new_papyrus_project=New Papyrus Project NewPapyrusProjectWizard_papyrus_project=Papyrus Project NewPapyrusProjectWizard_papyrus_project_desc=Create a New Papyrus Project +PapyrusProjectCreationPage_page_same_case_desc=There already is a project with this name: +PapyrusProjectCreationPage_page_incorrect_desc=Please enter a correct name for the new project DiagramCategoryRegistry_bad_class_name_of_category=Could not find implementation for a diagram category 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 222e03d9af2..a5501442382 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 @@ -14,10 +14,10 @@ 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 java.util.LinkedList; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; @@ -53,8 +53,6 @@ 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. * @@ -80,8 +78,7 @@ public class NewModelFilePage extends WizardNewFileCreationPage { public NewModelFilePage(String pageId, IStructuredSelection selection, String modelKindName) { super(pageId, selection); setTitle(NLS.bind(Messages.NewModelFilePage_3, modelKindName)); - DefaultDescription = NLS.bind(Messages.NewModelFilePage_page_desc, modelKindName); - setDescription(DefaultDescription); + setDescription(NLS.bind(Messages.NewModelFilePage_page_desc, modelKindName)); setFileExtension(DEFAULT_DIAGRAM_EXTENSION); } @@ -233,46 +230,58 @@ public class NewModelFilePage extends WizardNewFileCreationPage { */ @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); - } + String existingModelName = ""; - for (String memberName : selectionMembers) { - if (getFileName().equalsIgnoreCase(memberName)) { + for (String existingName : getExistingNames()) { + if (existingName.toLowerCase().equals(getFileName().toLowerCase())) { canFlip = false; - this.setDescription(Messages.NewModelFilePage_page_same_case_desc + memberName); + existingModelName = existingName; + break; } } - if (canFlip) { - this.setDescription(DefaultDescription); + if (!canFlip) { + this.setErrorMessage(Messages.NewModelFilePage_page_same_case_desc + existingModelName); } + return canFlip; } /** + * This method fetches all the IFiles' name in the workspace + * + * @return + * The list of the names + */ + public Collection<String> getExistingNames() { + Collection<String> result = new LinkedList<String>(); + + try { + IResource rootResource = ResourcesPlugin.getWorkspace().getRoot().findMember(getContainerFullPath()); + // Need to go through all the resources of the selected container to check if there is an homograph + if (rootResource.getType() == IResource.PROJECT) { + result.addAll(getMembersNames(((IProject) rootResource).members())); + } + if (rootResource.getType() == IResource.FOLDER) { + result.addAll(getMembersNames(((IFolder) rootResource).members())); + } + + } catch (CoreException ce) { + Activator.log.error(ce); + } + + return result; + } + + /** * 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>(); + Collection<String> membersList = new LinkedList<String>(); for (Iterator<IResource> arrayIter = Arrays.asList(membersArray).iterator(); arrayIter.hasNext();) { IResource iResource = arrayIter.next(); membersList.add(iResource.getName()); diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/PapyrusProjectCreationPage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/PapyrusProjectCreationPage.java index 60747ed11e3..a19ecf82672 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/PapyrusProjectCreationPage.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.wizards/src/org/eclipse/papyrus/uml/diagram/wizards/pages/PapyrusProjectCreationPage.java @@ -12,6 +12,8 @@ package org.eclipse.papyrus.uml.diagram.wizards.pages;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.papyrus.uml.diagram.wizards.messages.Messages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
@@ -31,6 +33,7 @@ public class PapyrusProjectCreationPage extends WizardNewProjectCreationPage { private Listener fileNameModifyListener = new Listener() {
+ @Override
public void handleEvent(Event e) {
boolean valid = canFlipToNextPage();
setPageComplete(valid);
@@ -47,7 +50,7 @@ public class PapyrusProjectCreationPage extends WizardNewProjectCreationPage { @Override
public void createControl(Composite parent) {
super.createControl(parent);
- Composite composite = (Composite)getControl();
+ Composite composite = (Composite) getControl();
composite.setLayoutData(new GridData(SWT.FILL, SWT.DOWN, true, false));
GridLayout gridLayout = new GridLayout(1, false);
composite.setLayout(gridLayout);
@@ -64,9 +67,9 @@ public class PapyrusProjectCreationPage extends WizardNewProjectCreationPage { * Creates the group.
*
* @param parent
- * the parent
+ * the parent
* @param name
- * the name
+ * the name
* @return the group
*/
private static Group createGroup(Composite parent, String name) {
@@ -83,8 +86,8 @@ public class PapyrusProjectCreationPage extends WizardNewProjectCreationPage { @Override
protected boolean validatePage() {
- if(fileName != null) {
- if(fileName.getText().equals("")) { //$NON-NLS-1$
+ if (fileName != null) {
+ if (fileName.getText().equals("")) { //$NON-NLS-1$
this.setErrorMessage(Messages.PapyrusProjectCreationPage_3);
return false;
}
@@ -97,12 +100,36 @@ public class PapyrusProjectCreationPage extends WizardNewProjectCreationPage { return fileName.getText();
}
+ /**
+ * This method is used to avoid case conflicts between existing and newly created projects
+ *
+ * @see org.eclipse.jface.wizard.WizardPage#canFlipToNextPage()
+ *
+ * @return
+ */
@Override
public boolean canFlipToNextPage() {
- if(validatePage() && !fileName.getText().equals("")) { //$NON-NLS-1$
- return true;
+ // retrieve the selected elements and get its children
+ boolean canFlip = true;
+
+ if (!validatePage() || fileName.getText().equals("")) { //$NON-NLS-1$
+ canFlip = false;
+ this.setErrorMessage(Messages.PapyrusProjectCreationPage_page_incorrect_desc + this.getProjectName().toLowerCase());
}
- return false;
+
+ IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ if (canFlip != false) {
+ for (IProject iproject : projects) {
+ if (this.getProjectName().equalsIgnoreCase(iproject.getName())) {
+ canFlip = false;
+ this.setErrorMessage(Messages.PapyrusProjectCreationPage_page_same_case_desc + iproject.getName());
+ // A conflict has been found, no need to go further
+ break;
+ }
+ }
+ }
+
+ return canFlip;
}
@Override
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 c2996c83006..9d5cedbd4e0 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 @@ -23,6 +23,8 @@ import java.util.Collections; import java.util.List;
import java.util.Map;
+import javax.net.ssl.SSLEngineResult.Status;
+
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
@@ -39,12 +41,15 @@ import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.papyrus.infra.core.editor.BackboneException;
import org.eclipse.papyrus.infra.core.extension.commands.IModelCreationCommand;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
@@ -62,6 +67,7 @@ import org.eclipse.papyrus.uml.diagram.wizards.command.InitFromTemplateCommand; import org.eclipse.papyrus.uml.diagram.wizards.command.NewPapyrusModelCommand;
import org.eclipse.papyrus.uml.diagram.wizards.messages.Messages;
import org.eclipse.papyrus.uml.diagram.wizards.pages.NewModelFilePage;
+import org.eclipse.papyrus.uml.diagram.wizards.pages.PapyrusProjectCreationPage;
import org.eclipse.papyrus.uml.diagram.wizards.pages.SelectDiagramCategoryPage;
import org.eclipse.papyrus.uml.diagram.wizards.pages.SelectDiagramKindPage;
import org.eclipse.papyrus.uml.diagram.wizards.pages.SelectDiagramKindPage.CategoryProvider;
@@ -76,6 +82,7 @@ import org.eclipse.papyrus.uml.tools.commands.ApplyProfileCommand; import org.eclipse.papyrus.uml.tools.commands.RenameElementCommand;
import org.eclipse.papyrus.uml.tools.model.UmlModel;
import org.eclipse.papyrus.uml.tools.model.UmlUtils;
+import org.eclipse.swt.SWT;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
@@ -85,6 +92,7 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
import org.eclipse.ui.services.IEvaluationService;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.NamedElement;
@@ -303,9 +311,12 @@ public class CreateModelWizard extends Wizard implements INewWizard { initProfile(modelSet);
initTemplate(modelSet);
openDiagram(newURI);
+
} catch (ServiceException e) {
Activator.log.error(e);
+ this.selectDiagramKindPage.setErrorMessage(e.getMessage());
return false;
+
} finally {
try {
registry.disposeRegistry();
@@ -919,6 +930,9 @@ public class CreateModelWizard extends Wizard implements INewWizard { if (page instanceof NewModelFilePage) {
return page.canFlipToNextPage();
}
+ if (page instanceof PapyrusProjectCreationPage) {
+ return page.canFlipToNextPage();
+ }
}
return result;
|