Project

General

Profile

Download (11.4 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

    
11
package eu.etaxonomy.cdm.api.service;
12

    
13
import java.util.Collection;
14
import java.util.HashMap;
15
import java.util.Iterator;
16
import java.util.List;
17
import java.util.Map;
18
import java.util.Set;
19

    
20
import org.apache.log4j.Logger;
21
import org.hibernate.collection.spi.PersistentCollection;
22
import org.springframework.beans.factory.annotation.Autowired;
23
import org.springframework.stereotype.Service;
24
import org.springframework.transaction.annotation.Transactional;
25

    
26
import eu.etaxonomy.cdm.model.common.CdmBase;
27
import eu.etaxonomy.cdm.model.common.ISourceable;
28
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
29
import eu.etaxonomy.cdm.model.common.OriginalSourceBase;
30
import eu.etaxonomy.cdm.model.metadata.CdmMetaData;
31
import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName;
32
import eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao;
33
import eu.etaxonomy.cdm.persistence.dao.common.IOriginalSourceDao;
34
import eu.etaxonomy.cdm.strategy.match.DefaultMatchStrategy;
35
import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
36
import eu.etaxonomy.cdm.strategy.match.IMatchable;
37
import eu.etaxonomy.cdm.strategy.match.MatchException;
38
import eu.etaxonomy.cdm.strategy.match.MatchStrategyConfigurator;
39
import eu.etaxonomy.cdm.strategy.match.MatchStrategyConfigurator.MatchStrategy;
40
import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;
41
import eu.etaxonomy.cdm.strategy.merge.IMergable;
42
import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
43
import eu.etaxonomy.cdm.strategy.merge.MergeException;
44

    
45

    
46
@Service
47
@Transactional(readOnly = true)
48
public class CommonServiceImpl extends ServiceBase<OriginalSourceBase,IOriginalSourceDao> implements ICommonService {
49
	@SuppressWarnings("unused")
50
	private static final Logger logger = Logger.getLogger(CommonServiceImpl.class);
51

    
52
	@Autowired
53
	IOriginalSourceDao originalSourceDao;
54

    
55
	@Autowired
56
	ICdmGenericDao genericDao;
57

    
58

    
59
	@Override
60
    @Autowired
61
	protected void setDao(IOriginalSourceDao dao) {
62
		this.dao = dao;
63
	}
64

    
65
	@Override
66
	public CdmBase find(Class<? extends CdmBase> clazz, int id){
67
		return genericDao.find(clazz, id);
68
	}
69

    
70

    
71
	@Override
72
	public Map<String, ? extends ISourceable> getSourcedObjectsByIdInSource(Class clazz, Set<String> idInSourceSet, String idNamespace) {
73
		Map<String, ? extends ISourceable> list = originalSourceDao.findOriginalSourcesByIdInSource(clazz, idInSourceSet, idNamespace);
74
		return list;
75
	}
76

    
77
	@Override
78
	public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {
79
		ISourceable result = null;
80
		List<IdentifiableEntity> list = originalSourceDao.findOriginalSourceByIdInSource(clazz, idInSource, idNamespace);
81
		if (! list.isEmpty()){
82
			result = list.get(0);
83
		}return result;
84
	}
85

    
86

    
87
	@Override
88
	public Set<CdmBase> getReferencingObjects(CdmBase referencedCdmBase){
89
		return this.genericDao.getReferencingObjects(referencedCdmBase);
90
	}
91

    
92

    
93
	@Override
94
	public Set<CdmBase> getReferencingObjectsForDeletion(CdmBase referencedCdmBase){
95
		return this.genericDao.getReferencingObjectsForDeletion(referencedCdmBase);
96
	}
97
//		try {
98
//			Set<Class<? extends CdmBase>> allCdmClasses = genericDao.getAllCdmClasses(false); //findAllCdmClasses();
99
//
100
//			referencedCdmBase = (CdmBase)HibernateProxyHelper.deproxy(referencedCdmBase);
101
//			Class referencedClass = referencedCdmBase.getClass();
102
//			Set<CdmBase> result = new HashSet<CdmBase>();
103
//			logger.debug("Referenced Class: " + referencedClass.getName());
104
//
105
//			for (Class<? extends CdmBase> cdmClass : allCdmClasses){
106
//				Set<Field> fields = getFields(cdmClass);
107
//				for (Field field: fields){
108
//					Class<?> type = field.getType();
109
//					//class
110
//					if (! type.isInterface()){
111
//						if (referencedClass.isAssignableFrom(type)||
112
//								type.isAssignableFrom(referencedClass) && CdmBase.class.isAssignableFrom(type)){
113
//							handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, false);
114
//						}
115
//					//interface
116
//					}else if (type.isAssignableFrom(referencedClass)){
117
//							handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, false);
118
//					}else if (Collection.class.isAssignableFrom(type)){
119
//
120
//						if (checkIsSetOfType(field, referencedClass, type) == true){
121
//							handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, true);
122
//						}
123
//					}
124
////				Class[] interfaces = referencedClass.getInterfaces();
125
////				for (Class interfaze: interfaces){
126
////					if (interfaze == type){
127
//////					if(interfaze.isAssignableFrom(returnType)){
128
////						handleSingleClass(interfaze, type, field, cdmClass, result, referencedCdmBase);
129
////					}
130
////				}
131
//				}
132
//			}
133
//			return result;
134
//		} catch (Exception e) {
135
//			e.printStackTrace();
136
//			throw new RuntimeException(e);
137
//		}
138
//
139
//	}
140
//
141
//	private boolean checkIsSetOfType(Field field, Class referencedClass, Class<?> type){
142
//		Type genericType = (ParameterizedTypeImpl)field.getGenericType();
143
//		if (genericType instanceof ParameterizedTypeImpl){
144
//			ParameterizedTypeImpl paraType = (ParameterizedTypeImpl)genericType;
145
//			paraType.getRawType();
146
//			Type[] arguments = paraType.getActualTypeArguments();
147
//			//logger.debug(arguments.length);
148
//			if (arguments.length == 1){
149
//				Class collectionClass;
150
//				try {
151
//					if (arguments[0] instanceof Class){
152
//						collectionClass = (Class)arguments[0];
153
//					}else if(arguments[0] instanceof TypeVariableImpl){
154
//						TypeVariableImpl typeVariable = (TypeVariableImpl)arguments[0];
155
//						GenericDeclaration genericDeclaration = typeVariable.getGenericDeclaration();
156
//						collectionClass = (Class)genericDeclaration;
157
//					}else{
158
//						logger.warn("Unknown Type");
159
//						return false;
160
//					}
161
//					if (CdmBase.class.isAssignableFrom(collectionClass) && collectionClass.isAssignableFrom(referencedClass)  ){
162
//						return true;
163
//					}
164
//				} catch (Exception e) {
165
//					logger.warn(e.getMessage());
166
//				}
167
//			}else{
168
//				logger.warn("Length of arguments <> 1");
169
//			}
170
//		}else{
171
//			logger.warn("Not a generic type of type ParameterizedTypeImpl");
172
//		}
173
//		return false;
174
//	}
175
//
176
//
177
//
178
//
179
//	private boolean handleSingleClass(Class itemClass, Class type, Field field, Class cdmClass, Set<CdmBase> result,CdmBase value, boolean isCollection){
180
//		if (! Modifier.isStatic(field.getModifiers())){
181
//			String methodName = StringUtils.rightPad(field.getName(), 30);
182
//			String className = StringUtils.rightPad(cdmClass.getSimpleName(), 30);
183
//			String returnTypeName = StringUtils.rightPad(type.getSimpleName(), 30);
184
//
185
//			logger.debug(methodName +   "\t\t" + className + "\t\t" + returnTypeName);
186
////			result_old.add(method);
187
//			result.addAll(getCdmBasesByFieldAndClass(field, itemClass, cdmClass, value, isCollection));
188
//		}
189
//		return true;
190
//	}
191
//
192
//	private Set<Field> getFields(Class clazz){
193
//		Set<Field> result = new HashSet<Field>();
194
//		for (Field field: clazz.getDeclaredFields()){
195
//			if (!Modifier.isStatic(field.getModifiers())){
196
//				result.add(field);
197
//			}
198
//		}
199
//		Class superclass = clazz.getSuperclass();
200
//		if (CdmBase.class.isAssignableFrom(superclass)){
201
//			result.addAll(getFields(superclass));
202
//		}
203
//		return result;
204
//	}
205
//
206
//	private Set<CdmBase> getCdmBasesByFieldAndClass(Field field, Class itemClass, Class otherClazz, CdmBase item, boolean isCollection){
207
//		Set<CdmBase> result = new HashSet<CdmBase>();
208
//		if (isCollection){
209
//			result.addAll(genericDao.getCdmBasesWithItemInCollection(itemClass, otherClazz, field.getName(), item));
210
//		}else{
211
//			result.addAll(genericDao.getCdmBasesByFieldAndClass(otherClazz, field.getName(), item));
212
//		}
213
//		return result;
214
//	}
215

    
216
	@Override
217
	public List getHqlResult(String hqlQuery){
218
		return genericDao.getHqlResult(hqlQuery);
219
	}
220

    
221
	@Override
222
	public <T extends IMergable> void merge(T mergeFirst, T mergeSecond, IMergeStrategy mergeStrategy) throws MergeException {
223
		if (mergeStrategy == null){
224
			mergeStrategy = DefaultMergeStrategy.NewInstance(((CdmBase)mergeFirst).getClass());
225
		}
226
		genericDao.merge((CdmBase)mergeFirst, (CdmBase)mergeSecond, mergeStrategy);
227
	}
228

    
229

    
230
	@Override
231
	public <T extends IMatchable> List<T> findMatching(T objectToMatch, IMatchStrategy matchStrategy) throws MatchException {
232
		if (matchStrategy == null){
233
			matchStrategy = DefaultMatchStrategy.NewInstance(((objectToMatch).getClass()));
234
		}
235
		return genericDao.findMatching(objectToMatch, matchStrategy);
236
	}
237

    
238

    
239
    /* (non-Javadoc)
240
     * @see eu.etaxonomy.cdm.api.service.ICommonService#findMatching(eu.etaxonomy.cdm.strategy.match.IMatchable, eu.etaxonomy.cdm.strategy.match.MatchStrategyConfigurator.MatchStrategy)
241
     */
242
    @Override
243
    public <T extends IMatchable> List<T> findMatching(T objectToMatch, MatchStrategy strategy) throws MatchException {
244
        return findMatching(objectToMatch, MatchStrategyConfigurator.getMatchStrategy(strategy));
245
    }
246

    
247
//	/* (non-Javadoc)
248
//	 * @see eu.etaxonomy.cdm.api.service.IService#list(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
249
//	 */
250
//	@Override
251
//	public <TYPE extends OriginalSourceBase> Pager<TYPE> list(Class<TYPE> type,
252
//			Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,
253
//			List<String> propertyPaths) {
254
//		logger.warn("Not yet implemented");
255
//		return null;
256
//	}
257

    
258
	@Transactional(readOnly = false)
259
	@Override
260
	public void saveAllMetaData(Collection<CdmMetaData> metaData) {
261
		Iterator<CdmMetaData> iterator = metaData.iterator();
262
		while(iterator.hasNext()){
263
			CdmMetaData cdmMetaData = iterator.next();
264
			genericDao.saveMetaData(cdmMetaData);
265
		}
266
	}
267

    
268
	@Override
269
	public Map<MetaDataPropertyName, CdmMetaData> getCdmMetaData() {
270
		Map<MetaDataPropertyName, CdmMetaData> result = new HashMap<MetaDataPropertyName, CdmMetaData>();
271
		List<CdmMetaData> metaDataList = genericDao.getMetaData();
272
		for (CdmMetaData metaData : metaDataList){
273
			MetaDataPropertyName propertyName = metaData.getPropertyName();
274
			result.put(propertyName, metaData);
275
		}
276
		return result;
277
	}
278

    
279
    @Override
280
    public PersistentCollection initializeCollection(PersistentCollection col) {
281
            return genericDao.initializeCollection(col);
282

    
283
    }
284

    
285
    @Override
286
    public boolean isEmpty(PersistentCollection col) {
287
            return genericDao.isEmpty(col);
288

    
289
    }
290

    
291
    @Override
292
	public int size(PersistentCollection col) {
293
    	return genericDao.size(col);
294
    }
295

    
296
    @Override
297
    public Object get(PersistentCollection col, int index) {
298
    	return genericDao.get(col, index);
299
    }
300

    
301
    @Override
302
    public boolean contains(PersistentCollection col, Object element) {
303
    	return genericDao.contains(col, element);
304
    }
305

    
306
    @Override
307
    public boolean containsKey(PersistentCollection col, Object key) {
308
    	return genericDao.containsKey(col, key);
309
    }
310

    
311
    @Override
312
    public boolean containsValue(PersistentCollection col, Object element) {
313
    	return genericDao.containsValue(col, element);
314
    }
315

    
316
	@Override
317
	@Transactional(readOnly = false)
318
	public void createFullSampleData() {
319
		genericDao.createFullSampleData();
320
	}
321

    
322
}
(9-9/88)