1 package eu
.etaxonomy
.cdm
.io
.common
;
3 import java
.util
.Arrays
;
6 import org
.apache
.log4j
.Logger
;
7 import org
.springframework
.stereotype
.Component
;
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
;
28 public class CacheUpdater
extends CdmIoBase
<DefaultImportState
<CacheUpdaterConfigurator
>>{
29 private static final Logger logger
= Logger
.getLogger(CacheUpdater
.class);
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();
39 handleClassList(config
.getClassList());
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
);
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
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
);
83 private boolean handleSingleTableClass(Class
<?
extends IdentifiableEntity
> clazz
) {
84 logger
.warn("Updating class " + clazz
.getSimpleName() + " ...");
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);
95 else if (DescriptionBase
.class.isAssignableFrom(clazz
)){
96 getDescriptionService().updateTitleCache((Class
) clazz
, null, null, null);
99 else if (Media
.class.isAssignableFrom(clazz
)){
100 getMediaService().updateTitleCache((Class
) clazz
, null, null, null);
102 else if (TaxonBase
.class.isAssignableFrom(clazz
)){
103 getTaxonService().updateTitleCache((Class
) clazz
, null, null, null);
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);
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);
121 else if (TaxonNameBase
.class.isAssignableFrom(clazz
)){
122 getNameService().updateTitleCache((Class
) clazz
, null, null, null);
125 else if (Classification
.class.isAssignableFrom(clazz
)){
126 getClassificationService().updateTitleCache((Class
) clazz
, null, null, null);
130 String warning
= "Unknown identifable entity subclass + " + clazz
== null ?
"null" : clazz
.getName();
131 logger
.error(warning
);
133 //getTaxonService().updateTitleCache((Class) clazz);
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
);
147 private void createClassListFromBoolean() {
148 logger
.warn("Create class list from boolean not yet implemented. Can't run cache updater");
153 // ************* inherited form CdmIoBase but not needed here ********************/
156 protected boolean doCheck(DefaultImportState
<CacheUpdaterConfigurator
> state
) {
162 protected boolean isIgnore(DefaultImportState
<CacheUpdaterConfigurator
> state
) {