Project

General

Profile

Download (6.35 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.media.IdentifiableMediaEntity;
20
import eu.etaxonomy.cdm.model.media.Media;
21
import eu.etaxonomy.cdm.model.molecular.Sequence;
22
import eu.etaxonomy.cdm.model.name.TaxonName;
23
import eu.etaxonomy.cdm.model.occurrence.Collection;
24
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
25
import eu.etaxonomy.cdm.model.reference.Reference;
26
import eu.etaxonomy.cdm.model.taxon.Classification;
27
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
28

    
29

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

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

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

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

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

    
49
		return;
50
	}
51

    
52

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

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

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

    
151
	private void createClassListFromBoolean() {
152
		logger.warn("Create class list from boolean not yet implemented. Can't run cache updater");
153
	}
154

    
155

    
156
// ************* inherited form CdmIoBase but not needed here ********************/
157

    
158
	@Override
159
	protected boolean doCheck(DefaultImportState<CacheUpdaterConfigurator> state) {
160
		//not needed here
161
		return false;
162
	}
163

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

    
170
}
(1-1/5)