#919: LISA - Some fields in Properties Area do not hold information
authorp.ciardelli <p.ciardelli@localhost>
Fri, 25 Sep 2009 15:41:58 +0000 (15:41 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Fri, 25 Sep 2009 15:41:58 +0000 (15:41 +0000)
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDescriptor.java

index 27512eda6884745e7c525c5a06a6251d5673ecd2..f6f7297d24da6bc79fd3ce80c5a0ae54b4614f20 100644 (file)
@@ -9,13 +9,20 @@
 \r
 package eu.etaxonomy.taxeditor.propertysheet.reference;\r
 \r
+import org.eclipse.jface.dialogs.MessageDialog;\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.PlatformUI;\r
 import org.eclipse.ui.views.properties.PropertyDescriptor;\r
 \r
+import eu.etaxonomy.cdm.model.reference.Book;\r
+import eu.etaxonomy.cdm.model.reference.Journal;\r
+import eu.etaxonomy.cdm.model.reference.PrintSeries;\r
+import eu.etaxonomy.cdm.model.reference.Proceedings;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceType;\r
 import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredReferenceSelectionDialog;\r
 \r
 /**  \r
@@ -27,6 +34,7 @@ abstract public class ReferenceSearchDescriptor extends PropertyDescriptor {
                \r
        int searchType;\r
        private ReferenceBase existingReference;\r
+       private ReferenceType requiredType;\r
        \r
        public ReferenceSearchDescriptor(Object id, String displayName, int searchType, ReferenceBase existingReference) {\r
                super(id, displayName);\r
@@ -35,6 +43,14 @@ abstract public class ReferenceSearchDescriptor extends PropertyDescriptor {
                this.existingReference = existingReference;\r
        }\r
 \r
+       public ReferenceSearchDescriptor(Object id, String displayName, int searchType, ReferenceBase existingReference, ReferenceType requiredType) {\r
+               super(id, displayName);\r
+               \r
+               this.searchType = searchType;\r
+               this.existingReference = existingReference;\r
+               this.requiredType = requiredType;\r
+       }\r
+       \r
     public CellEditor createPropertyEditor(Composite parent) {\r
         CellEditor editor = new DialogCellEditor(parent) {\r
 \r
@@ -43,8 +59,14 @@ abstract public class ReferenceSearchDescriptor extends PropertyDescriptor {
 \r
                        ReferenceBase reference = FilteredReferenceSelectionDialog.selectReference(cellEditorWindow.getShell(), existingReference);\r
                                if (reference != null) {\r
-                                       saveReference(reference);\r
-                                       return new ReferencePropertySource(reference);\r
+                                       if (requiredType != null && !isRequiredType(reference)) {\r
+                                               MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), \r
+                                                               "Invalid In-Reference", "'" + reference.getTitleCache() + \r
+                                                               "' is not a reference of type '" + requiredType.getMessage() + "'.");\r
+                                       } else {\r
+                                               saveReference(reference);\r
+                                               return new ReferencePropertySource(reference);\r
+                                       }\r
                                }\r
                                return null;\r
                                \r
@@ -56,5 +78,28 @@ abstract public class ReferenceSearchDescriptor extends PropertyDescriptor {
         return editor;\r
     }\r
         \r
-    abstract protected void saveReference(ReferenceBase<?> reference); \r
+    /**\r
+     * Hacky bullshit until reference types are fully enabled. Assumes the required type\r
+     * is one of the in-reference types: Book, Journal, Series, Proceedings.\r
+     * \r
+        * @param reference\r
+        * @return\r
+        */\r
+       protected boolean isRequiredType(ReferenceBase reference) {\r
+               if (ReferenceType.Book.equals(requiredType) && !(reference instanceof Book)) {\r
+                       return false;\r
+               }\r
+               if (ReferenceType.Journal.equals(requiredType) && !(reference instanceof Journal)) {\r
+                       return false;\r
+               }\r
+               if (ReferenceType.PrintSeries.equals(requiredType) && !(reference instanceof PrintSeries)) {\r
+                       return false;\r
+               }\r
+               if (ReferenceType.Proceedings.equals(requiredType) && !(reference instanceof Proceedings)) {\r
+                       return false;\r
+               }\r
+               return true;\r
+       }\r
+\r
+       abstract protected void saveReference(ReferenceBase<?> reference);      \r
 }\r