Project

General

Profile

Download (6.14 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(1-1/48)