\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
\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
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
\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
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