Merged from trunk to statistics branch
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / config / TaxonDeletionConfigurator.java
1 // $Id$
2 /**
3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.cdm.api.service.config;
11
12 import org.apache.log4j.Logger;
13
14 import eu.etaxonomy.cdm.api.service.ITaxonService;
15 import eu.etaxonomy.cdm.model.description.TaxonDescription;
16 import eu.etaxonomy.cdm.model.taxon.Classification;
17 import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
18 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
19 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
20 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
21
22 /**
23 * This class is used to configure taxon node deletion.
24 * It is initialized with the following default settings:
25 * <ul>
26 * <li> deleteSynonymRelations: <b>true</b></li>
27 * <li> deleteSynonymsIfPossible: <b>true</b></li>
28 * <li> deleteMisappliedNamesAndInvalidDesignations: <b>true</b></li>
29 * <li> deleteNameIfPossible: <b>true</b></li>
30 * <li> nameDeletionConfig: see {@link NameDeletionConfigurator}</li>
31 * <li> taxonNodeConfig: see {@link TaxonNodeDeletionConfigurator}</li>
32 * <li> deleteTaxonNodes: <b>true</b></li>
33 * <li> deleteTaxonRelationships: <b>true</b>; </li>
34 * <li> deleteDescriptions: <b>true</b></li>
35 * <li> deleteInAllClassifications: <b>true</b></li>
36 * </ul>
37 *
38 * @see ITaxonService#deleteTaxon(eu.etaxonomy.cdm.model.taxon.Taxon)
39 *
40 * @author a.mueller
41 * @date 09.11.2011
42 *
43 */
44 public class TaxonDeletionConfigurator extends TaxonBaseDeletionConfigurator {
45 @SuppressWarnings("unused")
46 private static final Logger logger = Logger.getLogger(TaxonDeletionConfigurator.class);
47
48 private boolean deleteSynonymRelations = true;
49
50 private boolean deleteSynonymsIfPossible = true;
51
52 private boolean deleteMisappliedNamesAndInvalidDesignations = true;
53
54 private boolean deleteNameIfPossible = true;
55
56 private NameDeletionConfigurator nameDeletionConfig = new NameDeletionConfigurator();
57
58
59 private TaxonNodeDeletionConfigurator taxonNodeConfig = new TaxonNodeDeletionConfigurator();
60
61
62 private boolean deleteTaxonNodes = true;
63
64 private boolean deleteTaxonRelationships = true;
65
66 private boolean deleteDescriptions = true;
67
68 private boolean deleteInAllClassifications = true;
69
70
71
72
73 public boolean isDeleteInAllClassifications() {
74 return deleteInAllClassifications;
75 }
76
77
78 public void setDeleteInAllClassifications(boolean deleteInAllClassifications) {
79 this.deleteInAllClassifications = deleteInAllClassifications;
80 }
81
82 /**
83 * If true the taxons name will be deleted if this is possible.
84 * It is possible if the name is not linked in a way that it can not be deleted.
85 * This depends also on the {@link NameDeletionConfigurator}
86 * @see #getNameDeletionConfig()
87 * @return
88 */
89 @Override
90 public boolean isDeleteNameIfPossible() {
91 return deleteNameIfPossible;
92 }
93
94 @Override
95 public void setDeleteNameIfPossible(boolean deleteNameIfPossible) {
96 this.deleteNameIfPossible = deleteNameIfPossible;
97 }
98
99
100 /**
101 * The configurator for name deletion. Only evaluated if {@link #isDeleteNameIfPossible()}
102 * is <code>true</code>.
103 * @see NameDeletionConfigurator
104 * @see #isDeleteNameIfPossible()
105 * @see #isDeleteSynonymsIfPossible()
106 * @return
107 */
108 @Override
109 public NameDeletionConfigurator getNameDeletionConfig() {
110 return nameDeletionConfig;
111 }
112
113 @Override
114 public void setNameDeletionConfig(NameDeletionConfigurator nameDeletionConfig) {
115 this.nameDeletionConfig = nameDeletionConfig;
116 }
117
118
119 /**
120 * If <code>true</code> related taxa with {@link TaxonRelationshipType} misappliedName or invalidDesignation will be removed if possible
121 * It is possible to remove a related taxon if it is not used in any other context, e.g. any
122 * other @link {@link TaxonRelationship} or in another @link {@link Classification}
123 * @return
124 */
125 public boolean isDeleteMisappliedNamesAndInvalidDesignations() {
126 return deleteMisappliedNamesAndInvalidDesignations;
127 }
128
129
130 public void setDeleteMisappliedNamesAndInvalidDesignations(
131 boolean deleteMisappliedNamesAndInvalidDesignations) {
132 this.deleteMisappliedNamesAndInvalidDesignations = deleteMisappliedNamesAndInvalidDesignations;
133 }
134
135
136
137
138 /**
139 * The configurator for node deletion. Only evaluated if {@link #isDeleteNode()}
140 * is <code>true</code>.
141 * @see TaxonNodeDeletionConfigurator
142 * @see #isDeleteNode()
143 * @see #isDeleteSynonymsIfPossible()
144 * @return
145 */
146
147 public TaxonNodeDeletionConfigurator getTaxonNodeConfig() {
148 return taxonNodeConfig;
149 }
150
151 public void setTaxonNodeConfig(TaxonNodeDeletionConfigurator taxonNodeConfig) {
152 this.taxonNodeConfig = taxonNodeConfig;
153 }
154
155
156 /**
157 *
158 * If <code>true</code> all {@link SynonymRelationship relations to synonyms} will be
159 * removed.
160 * Synonyms itself will be removed depending on {@link #deleteSynonymsIfPossible}.
161 * @return
162 */
163 public boolean isDeleteSynonymRelations() {
164 return deleteSynonymRelations;
165 }
166
167 public void setDeleteSynonymRelations(boolean deleteSynonymRelations) {
168 this.deleteSynonymRelations = deleteSynonymRelations;
169 }
170
171
172 /**
173 * If <code>true</code> synonyms will be removed if possible but only if {@link #isDeleteSynonymRelations()}
174 * is also <code>true</code>.
175 * It is possible to remove a synonym if it is not used in any other context, e.g. any
176 * other @link {@link SynonymRelationship}
177 * @return
178 */
179 public boolean isDeleteSynonymsIfPossible() {
180 return deleteSynonymsIfPossible;
181 }
182
183 public void setDeleteSynonymsIfPossible(boolean deleteSynonymsIfPossible) {
184 this.deleteSynonymsIfPossible = deleteSynonymsIfPossible;
185 }
186
187
188
189 /**
190 * If <code>true</code> all {@link TaxonNode taxon nodes} this taxon belongs to
191 * are deleted. If <code>false</code> an exception is thrown if this taxon belongs
192 * to a taxon node.
193 * @return
194 */
195 public boolean isDeleteTaxonNodes() {
196 return deleteTaxonNodes;
197 }
198
199 public void setDeleteTaxonNodes(boolean deleteTaxonNodes) {
200 this.deleteTaxonNodes = deleteTaxonNodes;
201 }
202
203 /**
204 * If <code>true</code> all {@link TaxonRelationship taxon relationships} linked to
205 * the taxon are removed.
206 */
207 // TODO how to handle missapllied names
208 public boolean isDeleteTaxonRelationships() {
209 return deleteTaxonRelationships;
210 }
211
212 public void setDeleteTaxonRelationships(boolean deleteTaxonRelationships) {
213 this.deleteTaxonRelationships = deleteTaxonRelationships;
214 }
215
216 /**
217 * If <code>true</code> all {@link TaxonDescription taxon descriptions} linked to
218 * the taxon are deleted.
219 */
220 public boolean isDeleteDescriptions() {
221 return deleteDescriptions;
222 }
223
224 public void setDeleteDescriptions(boolean deleteDescriptions) {
225 this.deleteDescriptions = deleteDescriptions;
226 }
227
228
229
230
231 }