88e5cb77c04429d86b91cc07d51c736e62c9211e
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / propertysheet / type / wizard / TypeListWizard.java
1 /**
2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9
10 package eu.etaxonomy.taxeditor.propertysheet.type.wizard;
11
12 import org.eclipse.core.databinding.observable.list.WritableList;
13 import org.eclipse.jface.wizard.IWizardPage;
14 import org.eclipse.jface.wizard.Wizard;
15
16 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
17 import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
18 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
19 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
20 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
21 import eu.etaxonomy.cdm.model.occurrence.Specimen;
22 import eu.etaxonomy.taxeditor.model.NameUtil;
23
24 /**
25 * @author p.ciardelli
26 * @created 11.02.2009
27 * @version 1.0
28 */
29 public class TypeListWizard extends Wizard {
30
31 private TaxonNameBase<?, ?> name;
32 private WritableList typeDesignationsList;
33
34 /**
35 * @param name
36 */
37 public TypeListWizard(TaxonNameBase<?, ?> name) {
38 super();
39
40 this.name = name;
41 this.typeDesignationsList = new WritableList();
42 if (name != null) {
43 if (NameUtil.isNameSupraSpecific(name)) {
44 this.typeDesignationsList.addAll(name.getNameTypeDesignations());
45 } else {
46 this.typeDesignationsList.addAll(name.getSpecimenTypeDesignations());
47 }
48 }
49 }
50
51 public void addPages(){
52 IWizardPage chooseTypePage = new ListTypeWizardPage(name, typeDesignationsList);
53 addPage(chooseTypePage);
54 }
55
56 /* (non-Javadoc)
57 * @see org.eclipse.jface.wizard.Wizard#performFinish()
58 */
59 @Override
60 public boolean performFinish() {
61
62 if (name != null) {
63
64 if (NameUtil.isNameSupraSpecific(name)) {
65
66 // Remove all designations
67 for (Object typeDesignation : name.getNameTypeDesignations()) {
68 if (typeDesignation instanceof NameTypeDesignation) {
69 name.removeTypeDesignation((NameTypeDesignation) typeDesignation);
70 }
71 }
72
73 // Then re-add them from list
74 for (Object typeDesignation : typeDesignationsList) {
75 if (typeDesignation instanceof NameTypeDesignation) {
76 name.addNameTypeDesignation(
77 ((NameTypeDesignation) typeDesignation).getTypeName(),
78 ((NameTypeDesignation) typeDesignation).getCitation(),
79 ((NameTypeDesignation) typeDesignation).getCitationMicroReference(),
80 ((NameTypeDesignation) typeDesignation).getOriginalNameString(),
81 ((NameTypeDesignation) typeDesignation).isRejectedType(),
82 ((NameTypeDesignation) typeDesignation).isConservedType(),
83 ((NameTypeDesignation) typeDesignation).isLectoType(),
84 ((NameTypeDesignation) typeDesignation).isNotDesignated(),
85 false);
86 }
87 }
88
89 } else {
90
91 // Remove all designations
92 for (Object typeDesignation : name.getSpecimenTypeDesignations()) {
93 if (typeDesignation instanceof SpecimenTypeDesignation) {
94 name.removeTypeDesignation((SpecimenTypeDesignation) typeDesignation);
95 }
96 }
97
98 // Then re-add them from list
99 for (Object typeDesignation : typeDesignationsList) {
100 if (typeDesignation instanceof SpecimenTypeDesignation) {
101
102 SpecimenTypeDesignation specimenTypeDesignation = (SpecimenTypeDesignation) typeDesignation;
103
104 Specimen specimen = HibernateProxyHelper.deproxy(
105 specimenTypeDesignation.getTypeSpecimen(), Specimen.class);
106
107 SpecimenTypeDesignationStatus typeStatus = HibernateProxyHelper.deproxy(
108 specimenTypeDesignation.getTypeStatus(), SpecimenTypeDesignationStatus.class);
109
110 name.addSpecimenTypeDesignation(
111 specimen,
112 typeStatus,
113 specimenTypeDesignation.getCitation(),
114 specimenTypeDesignation.getCitationMicroReference(),
115 specimenTypeDesignation.getOriginalNameString(),
116 specimenTypeDesignation.isNotDesignated(),
117 false);
118 }
119 }
120 }
121 }
122 return true;
123 }
124 }