Object change mapper for PESI and empty epithet bugfix and empty hybrid formula bugfix
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / common / CacheUpdater.java
1 package eu.etaxonomy.cdm.io.common;
2
3 import java.util.Arrays;
4 import java.util.List;
5
6 import org.apache.log4j.Logger;
7 import org.springframework.stereotype.Component;
8
9 import eu.etaxonomy.cdm.model.agent.AgentBase;
10 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
11 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
12 import eu.etaxonomy.cdm.model.common.TermBase;
13 import eu.etaxonomy.cdm.model.common.TermVocabulary;
14 import eu.etaxonomy.cdm.model.description.DescriptionBase;
15 import eu.etaxonomy.cdm.model.description.FeatureTree;
16 import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
17 import eu.etaxonomy.cdm.model.media.Media;
18 import eu.etaxonomy.cdm.model.molecular.Sequence;
19 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
20 import eu.etaxonomy.cdm.model.occurrence.Collection;
21 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
22 import eu.etaxonomy.cdm.model.reference.Reference;
23 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
24 import eu.etaxonomy.cdm.model.taxon.Classification;
25
26
27 @Component
28 public class CacheUpdater extends CdmIoBase<DefaultImportState<CacheUpdaterConfigurator>>{
29 private static final Logger logger = Logger.getLogger(CacheUpdater.class);
30
31 @Override
32 protected void doInvoke(DefaultImportState<CacheUpdaterConfigurator> state) {
33 CacheUpdaterConfigurator config = state.getConfig();
34 if (config.getClassList() == null || config.getClassList().isEmpty()){
35 //!! not yet implemented
36 logger.warn("Create class list from boolean values is not yet implemented for cache updater");
37 createClassListFromBoolean();
38 }
39 handleClassList(config.getClassList());
40 return;
41 }
42
43
44
45 private boolean handleClassList(List<Class<? extends IdentifiableEntity>> classList) {
46 boolean result = true;
47 for (Class<? extends IdentifiableEntity> clazz : classList){
48 //WE need to separate classes , because hibernate
49 //returns multiple values for service.count() for e.g. IdentifableEntity.class
50 //which leads to an exception
51 if (! handleMultiTableClasses(clazz)){
52 result &= handleSingleTableClass(clazz);
53 }
54 }
55 return result;
56 }
57
58
59
60 private boolean handleMultiTableClasses(Class<? extends IdentifiableEntity> clazz) {
61 if (clazz.isAssignableFrom(IdentifiableEntity.class)){
62 List list = Arrays.asList(new Class[]{
63 DescriptionBase.class, IdentifiableMediaEntity.class,
64 Media.class, Sequence.class,
65 TaxonBase.class, TaxonNameBase.class,
66 Classification.class, TermBase.class
67 });
68 handleClassList(list);
69 }else if (clazz.isAssignableFrom(IdentifiableMediaEntity.class)){
70 List list = Arrays.asList(new Class[]{AgentBase.class, Collection.class, Reference.class, SpecimenOrObservationBase.class});
71 handleClassList(list);
72 }else if (clazz.isAssignableFrom(TermBase.class)){
73 List list = Arrays.asList(new Class[]{DefinedTermBase.class, FeatureTree.class, TermVocabulary.class });
74 handleClassList(list);
75 }else{
76 return false;
77 }
78 return true;
79 }
80
81
82
83 private boolean handleSingleTableClass(Class<? extends IdentifiableEntity> clazz) {
84 logger.warn("Updating class " + clazz.getSimpleName() + " ...");
85 try {
86 //TermBase
87 if (DefinedTermBase.class.isAssignableFrom(clazz)){
88 getTermService().updateTitleCache((Class) clazz, null, null, null);
89 }else if (FeatureTree.class.isAssignableFrom(clazz)){
90 getFeatureTreeService().updateTitleCache((Class) clazz, null, null, null);
91 }else if (TermVocabulary.class.isAssignableFrom(clazz)){
92 getVocabularyService().updateTitleCache((Class) clazz, null, null, null);
93 }
94 //DescriptionBase
95 else if (DescriptionBase.class.isAssignableFrom(clazz)){
96 getDescriptionService().updateTitleCache((Class) clazz, null, null, null);
97 }
98 //Media
99 else if (Media.class.isAssignableFrom(clazz)){
100 getMediaService().updateTitleCache((Class) clazz, null, null, null);
101 }//TaxonBase
102 else if (TaxonBase.class.isAssignableFrom(clazz)){
103 getTaxonService().updateTitleCache((Class) clazz, null, null, null);
104 }
105 //IdentifiableMediaEntity
106 else if (AgentBase.class.isAssignableFrom(clazz)){
107 getAgentService().updateTitleCache((Class) clazz, null, null, null);
108 }else if (Collection.class.isAssignableFrom(clazz)){
109 getCollectionService().updateTitleCache((Class) clazz, null, null, null);
110 }else if (Reference.class.isAssignableFrom(clazz)){
111 getReferenceService().updateTitleCache((Class) clazz, null, null, null);
112 }else if (SpecimenOrObservationBase.class.isAssignableFrom(clazz)){
113 getReferenceService().updateTitleCache((Class) clazz, null, null, null);
114 }
115 //Sequence
116 else if (Sequence.class.isAssignableFrom(clazz)){
117 //TODO misuse TaxonServic for sequence update, use sequence service when it exists
118 getTaxonService().updateTitleCache((Class) clazz, null, null, null);
119 }
120 //TaxonNameBase
121 else if (TaxonNameBase.class.isAssignableFrom(clazz)){
122 getNameService().updateTitleCache((Class) clazz, null, null, null);
123 }
124 //TaxonNameBase
125 else if (Classification.class.isAssignableFrom(clazz)){
126 getClassificationService().updateTitleCache((Class) clazz, null, null, null);
127 }
128 //unknown class
129 else {
130 String warning = "Unknown identifable entity subclass + " + clazz == null ? "null" : clazz.getName();
131 logger.error(warning);
132 return false;
133 //getTaxonService().updateTitleCache((Class) clazz);
134 }
135 return true;
136 } catch (Exception e) {
137 String warning = "Exception occurred when trying to update class + " + clazz == null ? "null" : clazz.getName();
138 warning += " Exception was: " + e.getMessage();
139 logger.error(warning);
140 e.printStackTrace();
141 return false;
142 }
143 }
144
145
146
147 private void createClassListFromBoolean() {
148 logger.warn("Create class list from boolean not yet implemented. Can't run cache updater");
149 }
150
151
152
153 // ************* inherited form CdmIoBase but not needed here ********************/
154
155 @Override
156 protected boolean doCheck(DefaultImportState<CacheUpdaterConfigurator> state) {
157 //not needed here
158 return false;
159 }
160
161 @Override
162 protected boolean isIgnore(DefaultImportState<CacheUpdaterConfigurator> state) {
163 //not needed here
164 return false;
165 }
166
167 }