View Javadoc

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.ReferenceBase;
23  import eu.etaxonomy.cdm.model.taxon.TaxonBase;
24  import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
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 boolean 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 true;
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  				TaxonomicTree.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, ReferenceBase.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);
89  			}else if (FeatureTree.class.isAssignableFrom(clazz)){
90  				getFeatureTreeService().updateTitleCache((Class) clazz);
91  			}else if (TermVocabulary.class.isAssignableFrom(clazz)){
92  				getVocabularyService().updateTitleCache((Class) clazz);
93  			} 
94  			//DescriptionBase
95  			else if (DescriptionBase.class.isAssignableFrom(clazz)){
96  				getDescriptionService().updateTitleCache((Class) clazz);
97  			}
98  			//Media
99  			else if (Media.class.isAssignableFrom(clazz)){
100 				getMediaService().updateTitleCache((Class) clazz);
101 			}//TaxonBase
102 			else if (TaxonBase.class.isAssignableFrom(clazz)){
103 				getTaxonService().updateTitleCache((Class) clazz);
104 			}
105 			//IdentifiableMediaEntity
106 			else if (AgentBase.class.isAssignableFrom(clazz)){
107 				getAgentService().updateTitleCache((Class) clazz);
108 			}else if (Collection.class.isAssignableFrom(clazz)){
109 				getCollectionService().updateTitleCache((Class) clazz);
110 			}else if (ReferenceBase.class.isAssignableFrom(clazz)){
111 				getReferenceService().updateTitleCache((Class) clazz);
112 			}else if (SpecimenOrObservationBase.class.isAssignableFrom(clazz)){
113 				getReferenceService().updateTitleCache((Class) clazz);
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);
119 			}
120 			//TaxonNameBase
121 			else if (TaxonNameBase.class.isAssignableFrom(clazz)){
122 				getNameService().updateTitleCache((Class) clazz);
123 			}
124 			//TaxonNameBase
125 			else if (TaxonomicTree.class.isAssignableFrom(clazz)){
126 				getTaxonTreeService().updateTitleCache((Class) clazz);
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 }