Project

General

Profile

Download (6.66 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.io.operation;
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.io.common.CdmImportBase;
10
import eu.etaxonomy.cdm.io.common.DefaultImportState;
11
import eu.etaxonomy.cdm.io.operation.config.CacheUpdaterConfigurator;
12
import eu.etaxonomy.cdm.model.agent.AgentBase;
13
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
14
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
15
import eu.etaxonomy.cdm.model.common.TermBase;
16
import eu.etaxonomy.cdm.model.common.TermVocabulary;
17
import eu.etaxonomy.cdm.model.description.DescriptionBase;
18
import eu.etaxonomy.cdm.model.description.FeatureTree;
19
import eu.etaxonomy.cdm.model.description.PolytomousKey;
20
import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
21
import eu.etaxonomy.cdm.model.media.Media;
22
import eu.etaxonomy.cdm.model.molecular.Sequence;
23
import eu.etaxonomy.cdm.model.name.TaxonName;
24
import eu.etaxonomy.cdm.model.occurrence.Collection;
25
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
26
import eu.etaxonomy.cdm.model.reference.Reference;
27
import eu.etaxonomy.cdm.model.taxon.Classification;
28
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
29

    
30

    
31
@Component
32
public class CacheUpdater extends CdmImportBase<CacheUpdaterConfigurator, DefaultImportState<CacheUpdaterConfigurator>> {
33

    
34
    private static final long serialVersionUID = -1410600568024821771L;
35

    
36
    private static final Logger logger = Logger.getLogger(CacheUpdater.class);
37

    
38
	@Override
39
	protected void doInvoke(DefaultImportState<CacheUpdaterConfigurator> state) {
40
		CacheUpdaterConfigurator config = state.getConfig();
41
		if (config.getClassList() == null || config.getClassList().isEmpty()){
42
			//!! not yet implemented
43
			logger.warn("Create class list from boolean values is not yet implemented for cache updater");
44
			createClassListFromBoolean();
45
		}
46

    
47
		//handle class list
48
		handleClassList(config.getClassList());
49

    
50
		return;
51
	}
52

    
53

    
54
	private boolean handleClassList(List<Class<? extends IdentifiableEntity>> classList) {
55
		boolean result = true;
56
		for (Class<? extends IdentifiableEntity> clazz : classList){
57
			//WE need to separate classes , because hibernate
58
			//returns multiple values for service.count() for e.g. IdentifableEntity.class
59
			//which leads to an exception
60
			if (! handleMultiTableClasses(clazz)){
61
				result &= this.handleSingleTableClass(clazz);
62
			}
63
		}
64
		return result;
65
	}
66

    
67
	private boolean handleMultiTableClasses(Class<? extends IdentifiableEntity> clazz) {
68
		if (clazz.isAssignableFrom(IdentifiableEntity.class)){
69
            @SuppressWarnings("rawtypes")
70
            List list = Arrays.asList(new Class[]{
71
					DescriptionBase.class, IdentifiableMediaEntity.class,
72
					Media.class, Sequence.class,
73
					TaxonBase.class, TaxonName.class,
74
					Classification.class, TermBase.class
75
					});
76
			handleClassList(list);
77
		}else if (clazz.isAssignableFrom(IdentifiableMediaEntity.class)){
78
			@SuppressWarnings("rawtypes")
79
            List list = Arrays.asList(new Class[]{AgentBase.class, Collection.class, Reference.class, SpecimenOrObservationBase.class});
80
			handleClassList(list);
81
		}else if (clazz.isAssignableFrom(TermBase.class)){
82
			@SuppressWarnings("rawtypes")
83
            List list = Arrays.asList(new Class[]{DefinedTermBase.class, FeatureTree.class, TermVocabulary.class });
84
			handleClassList(list);
85
		}else{
86
			return false;
87
		}
88
		return true;
89
	}
90

    
91
	private boolean handleSingleTableClass(Class<? extends IdentifiableEntity> clazz) {
92
		if (clazz == null){
93
		    return true;
94
		}
95
	    logger.info("Updating class " + clazz.getSimpleName() + " ...");
96
		try {
97
			//TermBase
98
			if (DefinedTermBase.class.isAssignableFrom(clazz)){
99
				getTermService().updateTitleCache((Class) clazz, null, null, null);
100
			}else if (FeatureTree.class.isAssignableFrom(clazz)){
101
				getFeatureTreeService().updateTitleCache((Class) clazz, null, null, null);
102
			}else if (TermVocabulary.class.isAssignableFrom(clazz)){
103
				getVocabularyService().updateTitleCache((Class) clazz, null, null, null);
104
			}
105
			//DescriptionBase
106
			else if (DescriptionBase.class.isAssignableFrom(clazz)){
107
				getDescriptionService().updateTitleCache((Class) clazz, null, null, null);
108
			}
109
			//Media
110
			else if (Media.class.isAssignableFrom(clazz)){
111
				getMediaService().updateTitleCache((Class) clazz, null, null, null);
112
			}//TaxonBase
113
			else if (TaxonBase.class.isAssignableFrom(clazz)){
114
				getTaxonService().updateTitleCache((Class) clazz, null, null, null);
115
			}
116
			//IdentifiableMediaEntity
117
			else if (AgentBase.class.isAssignableFrom(clazz)){
118
				getAgentService().updateTitleCache((Class) clazz, null, null, null);
119
			}else if (Collection.class.isAssignableFrom(clazz)){
120
				getCollectionService().updateTitleCache((Class) clazz, null, null, null);
121
			}else if (Reference.class.isAssignableFrom(clazz)){
122
				getReferenceService().updateTitleCache((Class) clazz, null, null, null);
123
			}else if (SpecimenOrObservationBase.class.isAssignableFrom(clazz)){
124
				getOccurrenceService().updateTitleCache((Class) clazz, null, null, null);
125
			}
126
//			//Sequence  //currently not identifiable and therefore has not caches
127
//			else if (Sequence.class.isAssignableFrom(clazz)){
128
//				//TODO misuse TaxonService for sequence update, use sequence service when it exists
129
//				getTaxonService().updateTitleCache((Class) clazz, null, null, null);
130
//			}
131
			//TaxonName
132
			else if (TaxonName.class.isAssignableFrom(clazz)){
133
				getNameService().updateTitleCache((Class) clazz, null, null, null);
134
			}
135
			//Classification
136
			else if (Classification.class.isAssignableFrom(clazz)){
137
				getClassificationService().updateTitleCache((Class) clazz, null, null, null);
138
			}
139
			//Polytomous Key
140
            else if (PolytomousKey.class.isAssignableFrom(clazz)){
141
                getPolytomousKeyService().updateTitleCache((Class) clazz, null, null, null);
142
            }
143
			//unknown class
144
			else {
145
				String warning = "Unknown identifable entity subclass + " + clazz.getName();
146
				logger.error(warning);
147
				return false;
148
			}
149
			return true;
150
		} catch (Exception e) {
151
			String warning = "Exception occurred when trying to update class + " + clazz.getName();
152
			warning += " Exception was: " + e.getMessage();
153
			logger.error(warning);
154
			e.printStackTrace();
155
			return false;
156
		}
157
	}
158

    
159
	private void createClassListFromBoolean() {
160
		logger.warn("Create class list from boolean not yet implemented. Can't run cache updater");
161
	}
162

    
163

    
164
// ************* inherited form CdmIoBase but not needed here ********************/
165

    
166
	@Override
167
	protected boolean doCheck(DefaultImportState<CacheUpdaterConfigurator> state) {
168
		//not needed here
169
		return false;
170
	}
171

    
172
	@Override
173
	protected boolean isIgnore(DefaultImportState<CacheUpdaterConfigurator> state) {
174
		//not needed here
175
		return false;
176
	}
177

    
178
}
(1-1/5)