2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.propertysheet
.name
;
12 import java
.beans
.PropertyChangeEvent
;
13 import java
.beans
.PropertyChangeListener
;
15 import java
.util
.Vector
;
17 import org
.apache
.log4j
.Logger
;
18 import org
.eclipse
.ui
.views
.properties
.IPropertyDescriptor
;
19 import org
.eclipse
.ui
.views
.properties
.IPropertySource
;
20 import org
.eclipse
.ui
.views
.properties
.PropertyDescriptor
;
22 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
23 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
24 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
25 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
26 import eu
.etaxonomy
.cdm
.model
.name
.ZoologicalName
;
27 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
28 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
29 import eu
.etaxonomy
.taxeditor
.controller
.GlobalController
;
30 import eu
.etaxonomy
.taxeditor
.propertysheet
.reference
.IReferenceSearch
;
31 import eu
.etaxonomy
.taxeditor
.propertysheet
.reference
.ReferencePropertySource
;
32 import eu
.etaxonomy
.taxeditor
.propertysheet
.reference
.ReferenceSearchDescriptor
;
33 import eu
.etaxonomy
.taxeditor
.propertysheet
.type
.TypePropertyDescriptor
;
40 public class TaxonBasePropertySource
implements IPropertySource
{
41 private static final Logger logger
= Logger
42 .getLogger(TaxonBasePropertySource
.class);
44 private TaxonBase taxon
;
46 // Property unique keys
47 public static final String P_ID_TAXONNAME
= "P_ID_TAXONNAME";
48 public static final String P_ID_TAXONSEC
= "P_ID_TAXONSEC";
49 public static final String P_ID_TYPES
= "P_ID_TYPES";
51 // Property display keys
52 public String P_TAXONNAME
;
53 public static final String P_TAXONSEC
= "01:Secundum";
54 public static final String P_TYPES
= "02:Name Types";
57 public TaxonBasePropertySource(TaxonBase taxon
, String nameTitle
) {
60 this.P_TAXONNAME
= "00:" + nameTitle
;
62 addDescriptor(P_ID_TAXONNAME
);
63 addDescriptor(P_ID_TAXONSEC
);
64 addDescriptor(P_ID_TYPES
);
67 protected Vector
<PropertyDescriptor
> descriptors
= new Vector
<PropertyDescriptor
>();
69 protected void addDescriptor(String id
) {
70 if (id
.equals(P_ID_TAXONNAME
)) {
71 descriptors
.addElement(
72 new PropertyDescriptor(P_ID_TAXONNAME
, P_TAXONNAME
));
74 if (id
.equals(P_ID_TAXONSEC
)) {
75 descriptors
.addElement(new ReferenceSearchDescriptor(P_ID_TAXONSEC
, P_TAXONSEC
, IReferenceSearch
.BIBREF
) {
76 protected void saveReference(ReferenceBase reference
) {
77 setPropertyValue(P_ID_TAXONSEC
, reference
);
81 if (id
.equals(P_ID_TYPES
)) {
82 descriptors
.addElement(
83 new TypePropertyDescriptor(P_ID_TYPES
, P_TYPES
, taxon
.getName()) {
84 protected void saveTypes(Set set
) {
85 setPropertyValue(P_ID_TYPES
, set
);
93 * @see org.eclipse.ui.views.properties.IPropertySource#getEditableValue()
95 public Object
getEditableValue() {
100 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
102 public IPropertyDescriptor
[] getPropertyDescriptors() {
103 return (IPropertyDescriptor
[]) descriptors
.toArray(
104 new IPropertyDescriptor
[descriptors
.size()]);
108 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
110 public Object
getPropertyValue(Object id
) {
113 if (id
.equals(P_ID_TAXONNAME
)) {
116 logger
.warn("no taxon");
119 TaxonNameBase name
= taxon
.getName();
121 // Create taxon name as necessary
123 name
= NonViralName
.NewInstance(Rank
.SPECIES());
126 // Send taxon name to appropriate property source for submenu
127 if (name
instanceof BotanicalName
) {
128 return new BotanicalNamePropertySource((BotanicalName
) name
);
130 if (name
instanceof ZoologicalName
) {
131 return new ZoologicalNamePropertySource((ZoologicalName
) name
);
133 if (name
instanceof NonViralName
) {
134 return new NonViralNamePropertySource((NonViralName
) name
);
139 // Edit taxon's sec. reference
140 if (id
.equals(P_ID_TAXONSEC
)) {
145 ReferenceBase sec
= taxon
.getSec();
147 // Create property source for submenu
148 ReferencePropertySource secPropertySource
= new ReferencePropertySource(sec
);
150 // Add listener to notify taxon of all changes to sec
151 secPropertySource
.addPropertyChangeListener(new PropertyChangeListener() {
152 public void propertyChange(PropertyChangeEvent evt
) {
153 if (evt
.getNewValue() instanceof ReferenceBase
) {
154 taxon
.setSec((ReferenceBase
) evt
.getNewValue());
158 return secPropertySource
;
165 * @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
167 public boolean isPropertySet(Object id
) {
172 * @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
174 public void resetPropertyValue(Object id
) {}
177 * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object, java.lang.Object)
179 public void setPropertyValue(Object id
, Object value
) {
180 if (id
.equals(P_ID_TAXONSEC
)) {
181 if (value
instanceof ReferenceBase
) {
182 taxon
.setSec((ReferenceBase
) value
);