#783 Implement extensions
authorp.ciardelli <p.ciardelli@localhost>
Thu, 27 Aug 2009 18:17:57 +0000 (18:17 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Thu, 27 Aug 2009 18:17:57 +0000 (18:17 +0000)
.gitattributes
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CreateExtensionDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionsDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionsPropertyDescriptor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersDialog.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersPropertyDescriptor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/TaxonBasePropertySource.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/VocabularyStore.java

index 9f61680b1e55621cb524faf780e1e2014e9bc661..37311d1e72460d59b26a2ac3e8bdb948a14fb620 100644 (file)
@@ -831,8 +831,12 @@ taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CheckboxCell
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CheckboxPropertyDescriptor.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CollectionPropertySource.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CompletionProcessor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CreateExtensionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/DayValidator.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/EditorPropertySheetEntry.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionsDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionsPropertyDescriptor.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ICdmBasePropertySource.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkerPropertySource.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersDialog.java -text
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CreateExtensionDialog.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CreateExtensionDialog.java
new file mode 100644 (file)
index 0000000..35a1e4e
--- /dev/null
@@ -0,0 +1,218 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.propertysheet;\r
+\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+\r
+import org.eclipse.jface.dialogs.IDialogConstants;\r
+import org.eclipse.jface.dialogs.InputDialog;\r
+import org.eclipse.jface.viewers.DoubleClickEvent;\r
+import org.eclipse.jface.viewers.IDoubleClickListener;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.IStructuredContentProvider;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.ListViewer;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+import org.eclipse.jface.viewers.Viewer;\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.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\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.List;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Text;\r
+\r
+import eu.etaxonomy.cdm.model.common.Extension;\r
+import eu.etaxonomy.cdm.model.common.ExtensionType;\r
+import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class CreateExtensionDialog extends InputDialog {\r
+\r
+       private Set<ExtensionType> extensionTypes;\r
+       private ListViewer textViewer;\r
+       String typeMessage = "Choose a type for the new extension";\r
+       private String valueMessage = "Enter a value for the new extension";\r
+       private Button okButton;\r
+       private Set<ExtensionType> selectedExtensionTypes;\r
+       private Text text;\r
+       \r
+       protected boolean hasSelection = false;\r
+       private Extension newExtension;\r
+\r
+       /**\r
+        * @param parentShell\r
+        * @param extensionTypes \r
+        */\r
+       protected CreateExtensionDialog(Shell shell) {\r
+               super(shell, "Create a new extension", \r
+                               "Choose a type and value for the new extension", null, null);\r
+               \r
+               extensionTypes = VocabularyStore.getExtensionTypes();\r
+       }\r
+       \r
+    protected Control createDialogArea(Composite parent) {\r
+        // create composite\r
+               Composite composite = new Composite(parent, SWT.NONE);\r
+               GridLayout layout = new GridLayout();\r
+               layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);\r
+               layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);\r
+               layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);\r
+               layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);\r
+               composite.setLayout(layout);\r
+               composite.setLayoutData(new GridData(GridData.FILL_BOTH));\r
+               applyDialogFont(composite);\r
+        // create message\r
+        if (typeMessage != null) {\r
+            Label typeLabel = new Label(composite, SWT.WRAP);\r
+            typeLabel.setText(typeMessage);\r
+            GridData data = new GridData(GridData.GRAB_HORIZONTAL\r
+                    | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
+                    | GridData.VERTICAL_ALIGN_CENTER);\r
+            data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);\r
+            typeLabel.setLayoutData(data);\r
+            typeLabel.setFont(parent.getFont());\r
+        }\r
+        textViewer = new ListViewer(new List(composite, SWT.SINGLE | SWT.BORDER));\r
+        textViewer.getList().setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
+                | GridData.HORIZONTAL_ALIGN_FILL));\r
+        textViewer.setContentProvider(new ContentProvider());\r
+        textViewer.setLabelProvider(new LabelProvider() {\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)\r
+                */\r
+               @Override\r
+               public String getText(Object element) {\r
+                       return ((ExtensionType) element).getLabel();\r
+               }\r
+        });\r
+        textViewer.setInput(extensionTypes);\r
+        textViewer.addSelectionChangedListener(new ISelectionChangedListener () {\r
+                       public void selectionChanged(SelectionChangedEvent event) {\r
+                               hasSelection = true;\r
+                               setOkEnabled(true);\r
+                       }\r
+               });\r
+        // create message\r
+        if (valueMessage != null) {\r
+            Label valueLabel = new Label(composite, SWT.WRAP);\r
+            valueLabel.setText(valueMessage);\r
+            GridData data = new GridData(GridData.GRAB_HORIZONTAL\r
+                    | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
+                    | GridData.VERTICAL_ALIGN_CENTER);\r
+            data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);\r
+            valueLabel.setLayoutData(data);\r
+            valueLabel.setFont(parent.getFont());\r
+        }\r
+        text = new Text(composite, getInputTextStyle());\r
+        text.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
+                | GridData.HORIZONTAL_ALIGN_FILL));\r
+        text.addModifyListener(new ModifyListener() {\r
+            public void modifyText(ModifyEvent e) {\r
+                               setOkEnabled(true);\r
+            }\r
+        });\r
+        \r
+        applyDialogFont(composite);\r
+        return composite;\r
+    }\r
+    \r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.dialogs.InputDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       protected void createButtonsForButtonBar(Composite parent) {\r
+        // create OK and Cancel buttons by default\r
+        okButton = createButton(parent, IDialogConstants.OK_ID,\r
+                IDialogConstants.OK_LABEL, true);\r
+        okButton.addMouseListener(new MouseAdapter() {\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)\r
+                */\r
+               @Override\r
+               public void mouseUp(MouseEvent e) {\r
+                       close();\r
+               }\r
+        });\r
+        createButton(parent, IDialogConstants.CANCEL_ID,\r
+                IDialogConstants.CANCEL_LABEL, false);\r
+        setOkEnabled(false);\r
+    }\r
+    \r
+       /**\r
+        * @param enabled\r
+        */\r
+       protected void setOkEnabled(boolean enabled) {\r
+               if (text.getText().length() > 0 && hasSelection) {\r
+            okButton.setEnabled(enabled);                      \r
+               } else {\r
+            okButton.setEnabled(false);\r
+               }\r
+       }\r
+           \r
+    /* (non-Javadoc)\r
+     * @see org.eclipse.jface.dialogs.Dialog#close()\r
+     */\r
+    @Override\r
+    public boolean close() {\r
+       setNewExtension();\r
+       return super.close();\r
+    }\r
+    \r
+       /**\r
+        * @return \r
+        * \r
+        */\r
+       private void setNewExtension() {\r
+               selectedExtensionTypes = new HashSet<ExtensionType>();\r
+               \r
+               ExtensionType type = (ExtensionType) ((IStructuredSelection) textViewer.getSelection()).getFirstElement();\r
+               String value = text.getText();\r
+               \r
+               newExtension = Extension.NewInstance();\r
+               newExtension.setValue(value);\r
+               newExtension.setType(type);\r
+       }\r
+    \r
+    class ContentProvider implements IStructuredContentProvider {\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)\r
+                */\r
+               public Object[] getElements(Object inputElement) {\r
+                       return extensionTypes.toArray();\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.IContentProvider#dispose()\r
+                */\r
+               public void dispose() {}\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)\r
+                */\r
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}\r
+       \r
+    }\r
+\r
+       /**\r
+        * @return\r
+        */\r
+       public Extension getNewExtension() {\r
+               return newExtension;\r
+       }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionPropertySource.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionPropertySource.java
new file mode 100644 (file)
index 0000000..f412053
--- /dev/null
@@ -0,0 +1,44 @@
+package eu.etaxonomy.taxeditor.propertysheet;\r
+\r
+import eu.etaxonomy.cdm.model.common.Extension;\r
+import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
+\r
+public class ExtensionPropertySource extends CollectionPropertySource {\r
+\r
+       private IdentifiableEntity entity;\r
+\r
+       public ExtensionPropertySource(IdentifiableEntity entity) {\r
+               super(entity.getExtensions());\r
+               \r
+               this.entity = entity;\r
+       }\r
+       \r
+       @Override\r
+       protected String getItemDisplayName(Object item) {\r
+               if (item instanceof Extension) {\r
+                       Extension extension = (Extension) item;\r
+                       return extension.getType().getLabel();                  \r
+               }\r
+               return "";\r
+       }\r
+\r
+       @Override\r
+       public Object getPropertyValue(Object id) {\r
+               if (id instanceof Extension) {\r
+                       Extension extension = (Extension) id;\r
+                       return extension.getValue();\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public void setPropertyValue(Object id, Object value) {\r
+               // Fields not editable in property sheet view\r
+       }\r
+\r
+       @Override\r
+       public String toString() {\r
+               // "Extensions" header has no value\r
+               return "";\r
+       }\r
+}
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionsDialog.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionsDialog.java
new file mode 100644 (file)
index 0000000..82f3e14
--- /dev/null
@@ -0,0 +1,290 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.propertysheet;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.eclipse.jface.dialogs.IDialogConstants;\r
+import org.eclipse.jface.dialogs.TitleAreaDialog;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.IStructuredContentProvider;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.ITableLabelProvider;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.viewers.TableViewerColumn;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.jface.window.Window;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Table;\r
+\r
+import eu.etaxonomy.cdm.model.common.Extension;\r
+import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
+import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class ExtensionsDialog extends TitleAreaDialog {\r
+\r
+       private IdentifiableEntity entity;\r
+       private Button addButton;\r
+       private TableViewer tableViewer;\r
+       private Button removeButton;\r
+       private Set<Extension> extensions = new HashSet<Extension>();\r
+       private Button okButton;\r
+\r
+       /**\r
+        * @param parentShell\r
+        * @param entity \r
+        */\r
+       public ExtensionsDialog(Shell parentShell, IdentifiableEntity entity) {\r
+               super(parentShell);\r
+\r
+               this.entity = entity;\r
+               this.extensions.addAll(entity.getExtensions());         \r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.window.Window#open()\r
+        */\r
+       @Override\r
+       public int open() {\r
+               return super.open();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.dialogs.TitleAreaDialog#createContents(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       @Override\r
+       protected Control createContents(Composite parent) {\r
+           Control contents = super.createContents(parent);\r
+                               \r
+               setTitle("Edit extensions");\r
+               setMessage("Add or remove extensions");\r
+\r
+               this.getShell().setText("Extensions");\r
+               \r
+               return contents;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       @Override\r
+       protected Control createDialogArea(Composite parent) {\r
+               Composite container = (Composite) super.createDialogArea(parent);\r
+               \r
+        // create composite\r
+        Composite composite = new Composite(container, SWT.NULL);\r
+        composite.setLayoutData(new GridData(GridData.FILL_BOTH));\r
+               \r
+               final GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 2;\r
+               composite.setLayout(gridLayout);\r
+       \r
+               tableViewer = new TableViewer(composite, SWT.NULL);\r
+               GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, false);\r
+               tableLayoutData.heightHint = 300;\r
+               tableViewer.getTable().setLayoutData(tableLayoutData);\r
+               createColumns(tableViewer);\r
+               \r
+               tableViewer.setContentProvider(new ExtensionsContentProvider());\r
+               tableViewer.setLabelProvider(new ExtensionsLabelProvider());\r
+               \r
+               tableViewer.addSelectionChangedListener(new ISelectionChangedListener () {\r
+                       public void selectionChanged(SelectionChangedEvent event) {\r
+                               setRemovedEnabled(true);\r
+                       }\r
+               });\r
+                               \r
+               Composite buttonContainer = new Composite(composite, SWT.NULL);\r
+               GridData buttonContainerLayoutData = new GridData();\r
+               buttonContainerLayoutData.verticalAlignment = SWT.TOP;\r
+               buttonContainer.setLayoutData(buttonContainerLayoutData);\r
+               buttonContainer.setLayout(new GridLayout());\r
+               \r
+               addButton = new Button(buttonContainer, SWT.PUSH);\r
+               addButton.setText("Add ...");\r
+               addButton.addMouseListener(new MouseAdapter(){\r
+                       /* (non-Javadoc)\r
+                        * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)\r
+                        */\r
+                       @Override\r
+                       public void mouseUp(MouseEvent e) {\r
+                               createExtensions();\r
+                       }                       \r
+               });\r
+\r
+               removeButton = new Button(buttonContainer, SWT.PUSH);\r
+               removeButton.setText("Remove");\r
+               removeButton.addMouseListener(new MouseAdapter() {\r
+                       /* (non-Javadoc)\r
+                        * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)\r
+                        */\r
+                       @Override\r
+                       public void mouseUp(MouseEvent e) {\r
+                               removeSelectedExtension();\r
+                       }\r
+               });\r
+               setRemovedEnabled(false);\r
+                       \r
+               populateExtensions();\r
+               \r
+               return container;\r
+       }\r
+       \r
+       private void createColumns(TableViewer viewer) {\r
+               Table table = viewer.getTable();\r
+               String[] titles = {"Type", "Value"};\r
+               int[] bounds = { 100, 200 };\r
+\r
+               for (int i = 0; i < titles.length; i++) {\r
+                       TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);\r
+                       column.getColumn().setText(titles[i]);\r
+                       column.getColumn().setWidth(bounds[i]);\r
+                       column.getColumn().setResizable(true);\r
+                       column.getColumn().setMoveable(true);\r
+               }\r
+               table.setHeaderVisible(true);\r
+               table.setLinesVisible(true);\r
+       }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       protected void createExtensions() {\r
+               \r
+        CreateExtensionDialog dialog = new CreateExtensionDialog(getShell());\r
+               if (dialog.open() == Window.OK) {\r
+                       Extension extension = dialog.getNewExtension();\r
+                       if (extension != null) {\r
+                               extensions.add(extension);\r
+                               tableViewer.refresh();\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void removeSelectedExtension() {\r
+               Extension extension = getSelectedExtension();\r
+               if (extension != null) {\r
+                       extensions.remove(extension);\r
+                       tableViewer.refresh();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @return \r
+        * \r
+        */\r
+       private Extension getSelectedExtension() {\r
+               return (Extension) ((IStructuredSelection) tableViewer.getSelection()).getFirstElement();\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void setRemovedEnabled(boolean enabled) {\r
+               removeButton.setEnabled(enabled);               \r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void toggleSelection() {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       private void populateExtensions() {\r
+               tableViewer.setInput(extensions);\r
+       }\r
+\r
+\r
+       private class ExtensionsContentProvider implements IStructuredContentProvider{\r
+\r
+               public Object[] getElements(Object inputElement) {                      \r
+                       return ((Set<?>) inputElement).toArray();\r
+               }\r
+\r
+               public void dispose() {}\r
+\r
+               public void inputChanged(Viewer viewer, Object oldInput,\r
+                               Object newInput) {}\r
+               \r
+       };\r
+       \r
+       class ExtensionsLabelProvider extends LabelProvider implements ITableLabelProvider{\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)\r
+                */\r
+               public Image getColumnImage(Object element, int columnIndex) {\r
+                       return null;\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)\r
+                */\r
+               public String getColumnText(Object element, int columnIndex) {\r
+                       if (columnIndex == 0) {\r
+                               return ((Extension) element).getType().getLabel();\r
+                       }\r
+                       if (columnIndex == 1) {\r
+                               return ((Extension) element).getValue();\r
+                       }\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+    protected void createButtonsForButtonBar(Composite parent) {\r
+        okButton = createButton(parent, IDialogConstants.OK_ID,\r
+                IDialogConstants.OK_LABEL, true);\r
+        createButton(parent, IDialogConstants.CANCEL_ID,\r
+                IDialogConstants.CANCEL_LABEL, false);\r
+    }\r
+    \r
+    /* (non-Javadoc)\r
+     * @see org.eclipse.jface.dialogs.Dialog#okPressed()\r
+     */\r
+    @Override\r
+    protected void okPressed() {\r
+               Set<Extension> savedExtensions = entity.getExtensions();\r
+               for (Extension extension : extensions) {\r
+                       if (!savedExtensions.contains(extension)) {\r
+                               entity.addExtension(extension);\r
+                       }\r
+               }\r
+               Set<Extension> removeExtensions = new HashSet<Extension>();\r
+               for (Extension extension : savedExtensions) {\r
+                       if (!extensions.contains(extension)) {\r
+                               removeExtensions.add(extension);\r
+                       }\r
+               }\r
+               for (Extension extension : removeExtensions) {\r
+                       entity.removeExtension(extension);\r
+               }\r
+       super.okPressed();\r
+    }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionsPropertyDescriptor.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/ExtensionsPropertyDescriptor.java
new file mode 100644 (file)
index 0000000..4bef3b8
--- /dev/null
@@ -0,0 +1,49 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.propertysheet;\r
+\r
+import org.eclipse.jface.dialogs.Dialog;\r
+import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.jface.viewers.DialogCellEditor;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class ExtensionsPropertyDescriptor extends PropertyDescriptor {\r
+       private IdentifiableEntity entity;\r
+       \r
+       public ExtensionsPropertyDescriptor(Object id, String displayName, IdentifiableEntity entity) {\r
+               super(id, displayName);\r
+               this.entity = entity;\r
+       }\r
+\r
+    public CellEditor createPropertyEditor(Composite parent) {\r
+        CellEditor editor = new DialogCellEditor(parent) {\r
+\r
+               protected ExtensionsDialog dialog;\r
+               \r
+                       @Override\r
+                       protected Object openDialogBox(\r
+                                       Control cellEditorWindow) {\r
+                       dialog = new ExtensionsDialog(cellEditorWindow.getShell(), entity);\r
+                       int returnCode = ((ExtensionsDialog) dialog).open();\r
+                               if (returnCode == Dialog.OK) {\r
+                                       return new ExtensionPropertySource(entity);\r
+                               }\r
+                               return null;\r
+                       }\r
+               \r
+        };\r
+        if (getValidator() != null) {\r
+                       editor.setValidator(getValidator());\r
+               }\r
+        return editor;\r
+    }  \r
+}\r
index 7a49ccce65781f9e0763874c4949181855f9c793..236156b33d81dd02a7eac7a5cec58852653f6955 100644 (file)
@@ -57,11 +57,8 @@ public class MarkersDialog extends TitleAreaDialog {
        public MarkersDialog(Shell parentShell, AnnotatableEntity entity) {\r
                super(parentShell);\r
 \r
-               this.entity = entity;   \r
-               \r
-               for (Marker marker : entity.getMarkers()) {\r
-                       this.markers.add(marker);\r
-               }\r
+               this.entity = entity;                   \r
+               this.markers.addAll(entity.getMarkers());\r
                \r
        }\r
        \r
index 0fdf7508808782593acfd9127ace7b4aaf1c2a86..420e5862bd3c6c3ee020ffeb417c558db73bc03d 100644 (file)
@@ -3,12 +3,9 @@
  */\r
 package eu.etaxonomy.taxeditor.propertysheet;\r
 \r
-import java.util.Set;\r
-\r
 import org.eclipse.jface.dialogs.Dialog;\r
 import org.eclipse.jface.viewers.CellEditor;\r
 import org.eclipse.jface.viewers.DialogCellEditor;\r
-import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Control;\r
 import org.eclipse.ui.views.properties.PropertyDescriptor;\r
index 39fc705843e393dfdba0cbfbf7dfd54442d4ad1d..384c2f668ee470e3a6b44b5369bd5c4ca56ad4dd 100644 (file)
@@ -26,10 +26,10 @@ import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.taxeditor.model.NameHelper;\r
-import eu.etaxonomy.taxeditor.propertysheet.AnnotationsPropertyDescriptor;\r
+import eu.etaxonomy.taxeditor.propertysheet.ExtensionPropertySource;\r
+import eu.etaxonomy.taxeditor.propertysheet.ExtensionsPropertyDescriptor;\r
 import eu.etaxonomy.taxeditor.propertysheet.ICdmBasePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.MarkerPropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.MarkersPropertyDescriptor;\r
@@ -121,6 +121,11 @@ public class TaxonBasePropertySource implements ICdmBasePropertySource {
                        descriptors.addElement(\r
                                        new MarkersPropertyDescriptor(P_ID_MARKERS, P_MARKERS, taxonBase));                     \r
                }\r
+\r
+               if (id.equals(P_ID_EXTENSIONS)) {\r
+                       descriptors.addElement(\r
+                                       new ExtensionsPropertyDescriptor(P_ID_EXTENSIONS, P_EXTENSIONS, taxonBase));                    \r
+               }\r
        }\r
        \r
        /* (non-Javadoc)\r
@@ -218,6 +223,10 @@ public class TaxonBasePropertySource implements ICdmBasePropertySource {
                if (id.equals(P_ID_MARKERS)) {\r
                        return new MarkerPropertySource(taxonBase);\r
                }\r
+\r
+               if (id.equals(P_ID_EXTENSIONS)) {\r
+                       return new ExtensionPropertySource(taxonBase);\r
+               }\r
                \r
                return null;\r
        }\r
index 248aacaf92da41ab482cff0b5e81545f0dad1737..8d612252b19c16743007265ecee3dfb9d5d89023 100644 (file)
@@ -18,6 +18,7 @@ import eu.etaxonomy.cdm.api.application.CdmApplicationController;
 import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.ExtensionType;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.model.common.OrderedTermBase;
@@ -144,6 +145,15 @@ public class VocabularyStore {
                return markerTypes;
        }
        
+
+       /**
+        * @return
+        */
+       public static Set<ExtensionType> getExtensionTypes() {
+               Set extensionTypes = getDefault().getTermVocabulary(VocabularyEnum.ExtensionType).getTermsOrderedByLabels(getDefaultLanguage());
+               return extensionTypes;
+       }
+       
        /**
         * Retrieve all ranks from data store.
         *