]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.annotation.ui/src/org/simantics/annotation/ui/internal/SaveAnnotationDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.annotation.ui / src / org / simantics / annotation / ui / internal / SaveAnnotationDialog.java
diff --git a/bundles/org.simantics.annotation.ui/src/org/simantics/annotation/ui/internal/SaveAnnotationDialog.java b/bundles/org.simantics.annotation.ui/src/org/simantics/annotation/ui/internal/SaveAnnotationDialog.java
new file mode 100644 (file)
index 0000000..66d4a33
--- /dev/null
@@ -0,0 +1,115 @@
+/*******************************************************************************\r
+ * Copyright (c) 2013 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     Semantum Oy - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.annotation.ui.internal;\r
+\r
+import java.util.Map;\r
+\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.IDialogSettings;\r
+import org.eclipse.jface.layout.GridDataFactory;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.simantics.Simantics;\r
+import org.simantics.annotation.ui.Activator;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.uri.UnescapedChildMapOfResource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.ui.workbench.dialogs.ResourceSelectionDialog3;\r
+import org.simantics.utils.datastructures.Pair;\r
+\r
+/**\r
+ * @author Jani Simomaa <jani.simomaa@semantum.fi>\r
+ */\r
+public class SaveAnnotationDialog extends ResourceSelectionDialog3<Resource> {\r
+\r
+       private String name;\r
+\r
+       public SaveAnnotationDialog(Shell shell,\r
+                       Map<Resource, Pair<String, ImageDescriptor>> parameter, String title) {\r
+               super(shell, parameter, title);\r
+               this.name = "";\r
+       }\r
+\r
+       @Override\r
+       protected IDialogSettings getBaseDialogSettings() {\r
+               return Activator.getDefault().getDialogSettings();\r
+       }\r
+\r
+       @Override\r
+       protected Control createExtendedContentArea(Composite parent) {\r
+               Label l = new Label(parent, SWT.NONE); \r
+               l.setText("Select a name:");\r
+               GridDataFactory.fillDefaults().grab(true, false).applyTo(l);\r
+               final Text t = new Text(parent,SWT.BORDER);\r
+               t.addModifyListener(new ModifyListener() {\r
+                       @Override\r
+                       public void modifyText(ModifyEvent e) {\r
+                               name = t.getText();\r
+                               validatePage();\r
+                       }\r
+               });\r
+               GridDataFactory.fillDefaults().grab(true, false).applyTo(t);\r
+               validatePage();\r
+               return super.createExtendedContentArea(parent);\r
+       }\r
+\r
+       @Override\r
+       protected void handleSelected(StructuredSelection selection) {\r
+               super.handleSelected(selection);\r
+               validatePage(); \r
+       }\r
+\r
+       protected void validatePage() {\r
+               StructuredSelection selection = getSelectedItems();\r
+               String error = validateName(name);\r
+               if (error != null) {\r
+                       updateStatus(new Status(Status.ERROR, PlatformUI.PLUGIN_ID, error));\r
+               } else if (selection.isEmpty()) {\r
+                       updateStatus(new Status(Status.ERROR, PlatformUI.PLUGIN_ID, "No Library selected"));\r
+               } else {\r
+                       // Validate that the name is not in use.\r
+                       Resource library = (Resource) selection.getFirstElement();\r
+                       try {\r
+                               Map<String, Resource> children = Simantics.sync(new UnescapedChildMapOfResource(library));\r
+                               if (children.containsKey(name)) {\r
+                                       updateStatus(new Status(Status.ERROR, PlatformUI.PLUGIN_ID, "Name is already in use."));\r
+                               } else {\r
+                                       updateStatus(new Status(Status.OK, Activator.PLUGIN_ID, ""));\r
+                               }\r
+                       } catch (DatabaseException e) {\r
+                               updateStatus(new Status(Status.ERROR, PlatformUI.PLUGIN_ID, "Failed to check validity of name. See error log.", e));\r
+                       }\r
+               }\r
+       }\r
+\r
+       protected String validateName(String name) {\r
+               if (name.trim().isEmpty())\r
+                       return "Name cannot be empty";\r
+               if (name.startsWith("."))\r
+                       return "Name cannot begin with a dot";\r
+               return null;\r
+       }\r
+\r
+       public String getName() {\r
+               return name;\r
+       }\r
+\r
+}
\ No newline at end of file