add DerivationEvent to PermissionClass
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / permission / PermissionClass.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 package eu.etaxonomy.cdm.model.permission;
10
11 import java.util.Set;
12 import java.util.UUID;
13
14 import org.apache.logging.log4j.LogManager;
15 import org.apache.logging.log4j.Logger;
16
17 import eu.etaxonomy.cdm.model.CdmBaseType;
18 import eu.etaxonomy.cdm.model.common.CdmBase;
19 import eu.etaxonomy.cdm.model.common.Language;
20 import eu.etaxonomy.cdm.model.term.EnumeratedTermVoc;
21 import eu.etaxonomy.cdm.model.term.IEnumTerm;
22
23 /**
24 * see also {@link CdmBaseType}
25 *
26 * @author k.luther
27 * @author a.kohlbecker
28 * @author a.mueller
29 * @since 06.07.2011
30 */
31 public enum PermissionClass implements IEnumTerm<PermissionClass>{
32 ALL("All"),
33 AGENTBASE("Agent"),
34 ANNOTATION("Annotation"),
35 ANNOTATIONTYPE("AnnotationType"),
36 CDMMETADATA("CdmMetaData"),
37 CLASSIFICATION("Classification"),
38 COLLECTION("Collectioni"),
39 DEFINEDTERM("DefinedTerm"),
40 DERIVATIONEVENT("DerivationEvent"),
41 DESCRIPTIONBASE("Description"),
42 DESCRIPTIONELEMENTBASE("DescriptionElement"),
43 DESCRIPTIONELEMENTSOURCE("DescriptionElementSource"),
44 DESCRIPTIVEDATASET("DescriptiveDataSet"),
45 EXTENSION("Extension"),
46 EXTENSIONTYPE("ExtensionType"),
47 FEATURE("Feature"),
48 TERMNODE("TermNode"),
49 TERMTREE("TermTree"),
50 GATHERINGEVENT("GatheringEvent"),
51 GRANTEDAUTHORITYIMPL("GrantedAuthorityImpl"),
52 GROUP("Group"),
53 HOMOTYPICALGROUP("HomotypicalGroup"),
54 HYBRIDRELATIONSHIP("HybridRelationship"),
55 IDENTIFIABLESOURCE("IdentifiableSource"),
56 IDENTIFIER("Identifier"),
57 KEYSTATEMENT("KeyStatement"),
58 LANGUAGE("Language"),
59 LANGUAGESTRING("LanguageString"),
60 MARKER("Marker"),
61 MARKERTYPE("MarkerType"),
62 MEDIA("Media"),
63 MEDIAREPRESENTATION("MediaRepresentation"),
64 MEDIAREPRESENTATIONPART("MediaRepresentationPart"),
65 NAMEDAREA("NamedArea"),
66 NAMEDAREALEVEL("NamedAreaLevel"),
67 NAMEDSOURCE("NamedSource"),
68 NAMERELATIONSHIP("NameRelationship"),
69 NAMETYPEDESIGNATION("NameTypeDesignation"),
70 NOMENCLATURALSTATUS("NomenclaturalStatus"),
71 NOMENCLATURALSOURCE("NomenclaturalSource"),
72 NOMENCLATURALSTATUSTYPE("NomenclaturalStatusType"),
73 PRESENCEABSENCETERM("PresenceAbsenceTerm"),
74 POLYTOMOUSKEY("PolytomousKey"),
75 POLYTOMOUSKEYNODE("PolytomousKeyNode"),
76 RANK("Rank"),
77 REFERENCE("Reference"),
78 REGISTRATION("Registration"),
79 REPRESENTATION("Representation"),
80 SECUNDUMSOURCE("SecundumSource"),
81 SEQUENCE("Sequence"),
82 SPECIMENOROBSERVATIONBASE("SpecimenOrObservation"),
83 SPECIMENTYPEDESIGNATION("SpecimenTypeDesignation"),
84 STATEDATA("StateData"),
85 STATISTICALMEASUREMENTVALUE("StatisticalMeasurementValue"),
86 TAXONBASE("TaxonBase"),
87 TAXONNAME("TaxonName"),
88 TAXONNODE("TaxonNode"),
89 TAXONRELATIONSHIP("TaxonRelationship"),
90 TEAMORPERSONBASE("TeamOrPerson"),
91 TERMVOCABULARY("TermVocabulary"),
92 TEXTUALTYPEDESIGNATION("TextualTypeDesignation"),
93 USER("User"),
94 ;
95
96 private static final Logger logger = LogManager.getLogger();
97
98 private PermissionClass(String key){
99 //we have no UUIDs defined yet, but needed for tests
100 this(UUID.randomUUID(), key, key, null);
101 }
102
103 private PermissionClass(UUID uuid, String defaultString, String key){
104 this(uuid, defaultString, key, null);
105 }
106
107 private PermissionClass(UUID uuid, String defaultString, String key, PermissionClass parent){
108 delegateVocTerm = EnumeratedTermVoc.addTerm(getClass(), this, uuid, defaultString, key, parent);
109 }
110
111 // *************************** DELEGATE **************************************/
112
113 private static EnumeratedTermVoc<PermissionClass> delegateVoc;
114 private IEnumTerm<PermissionClass> delegateVocTerm;
115
116 static {
117 delegateVoc = EnumeratedTermVoc.getVoc(PermissionClass.class);
118 }
119
120 @Override
121 public String getKey(){return delegateVocTerm.getKey();}
122
123 @Override
124 public String getLabel(){return delegateVocTerm.getLabel();}
125
126 @Override
127 public String getLabel(Language language){return delegateVocTerm.getLabel(language);}
128
129 @Override
130 public UUID getUuid() {return delegateVocTerm.getUuid();}
131
132 @Override
133 public PermissionClass getKindOf() {return delegateVocTerm.getKindOf();}
134
135 @Override
136 public Set<PermissionClass> getGeneralizationOf() {return delegateVocTerm.getGeneralizationOf();}
137
138 @Override
139 public boolean isKindOf(PermissionClass ancestor) {return delegateVocTerm.isKindOf(ancestor); }
140
141 @Override
142 public Set<PermissionClass> getGeneralizationOf(boolean recursive) {return delegateVocTerm.getGeneralizationOf(recursive);}
143
144 public static PermissionClass getByKey(String key){return delegateVoc.getByKey(key);}
145 public static PermissionClass getByUuid(UUID uuid) {return delegateVoc.getByUuid(uuid);}
146
147 // ************************ METHODS *******************************/
148
149 /**
150 * return the appropriate CdmPermissionClass for the given Object
151 *
152 * @param cdmBase
153 * @return the CdmPermissionClass or null
154 */
155 public static PermissionClass getValueOf(CdmBase cdmBase){
156 return PermissionClass.getValueOf(cdmBase.getClass());
157 }
158
159 /**
160 * Return the appropriate CdmPermissionClass for the given Object
161 *
162 * @param clazz
163 * @return the CdmPermissionClass or null
164 */
165 public static PermissionClass getValueOf(Class clazz){
166
167 PermissionClass permissionClass = doValueOf(clazz);
168 if(permissionClass == null) {
169 logger.error("Permission class support for " + clazz + " not implemented");
170 }
171 return permissionClass;
172 }
173
174 private static PermissionClass doValueOf(Class<?> clazz) {
175 try{
176 String normalizedName = clazz.getSimpleName().toUpperCase();
177 return PermissionClass.valueOf(normalizedName);
178 } catch(IllegalArgumentException e){
179 if (CdmBase.class.isAssignableFrom(clazz)){
180 return doValueOf(clazz.getSuperclass());
181 }
182 }
183 return null;
184 }
185 }