Project

General

Profile

Download (3.88 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
package eu.etaxonomy.cdm.api.service;
11

    
12
import java.util.ArrayList;
13
import java.util.Iterator;
14
import java.util.List;
15
import java.util.Set;
16

    
17
import org.hibernate.envers.query.criteria.AuditCriterion;
18
import org.springframework.beans.factory.annotation.Autowired;
19
import org.springframework.transaction.annotation.Transactional;
20

    
21
import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
22
import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
23
import eu.etaxonomy.cdm.api.service.pager.Pager;
24
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
25
import eu.etaxonomy.cdm.model.common.CdmBase;
26
import eu.etaxonomy.cdm.model.common.VersionableEntity;
27
import eu.etaxonomy.cdm.model.view.AuditEvent;
28
import eu.etaxonomy.cdm.model.view.AuditEventRecord;
29
import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
30
import eu.etaxonomy.cdm.persistence.dao.common.IVersionableDao;
31

    
32
public abstract class VersionableServiceBase<T extends VersionableEntity, DAO extends IVersionableDao<T>> extends ServiceBase<T,DAO> implements IVersionableService<T> {
33
	@Autowired
34
    protected ICommonService commonService;
35
	@Override
36
    @Transactional(readOnly = true)
37
	public Pager<AuditEventRecord<T>> pageAuditEvents(T t, Integer pageSize,	Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
38
		Integer numberOfResults = dao.countAuditEvents(t, sort);
39

    
40
		List<AuditEventRecord<T>> results = new ArrayList<AuditEventRecord<T>>();
41
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
42
			results = dao.getAuditEvents(t, pageSize, pageNumber, sort,propertyPaths);
43
		}
44

    
45
		return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
46
	}
47

    
48
	@Override
49
    @Transactional(readOnly = true)
50
	public AuditEventRecord<T> getNextAuditEvent(T t) {
51
		return dao.getNextAuditEvent(t);
52
	}
53

    
54
	@Override
55
    @Transactional(readOnly = true)
56
	public AuditEventRecord<T> getPreviousAuditEvent(T t) {
57
		return dao.getPreviousAuditEvent(t);
58
	}
59

    
60
	@Override
61
    @Transactional(readOnly = true)
62
	public Pager<AuditEventRecord<T>> pageAuditEvents(Class<? extends T> clazz,AuditEvent from,AuditEvent to, List<AuditCriterion> criteria, Integer pageSize, Integer pageNumber, AuditEventSort sort,List<String> propertyPaths) {
63
		Integer numberOfResults = dao.countAuditEvents(clazz, from, to, criteria);
64

    
65
		List<AuditEventRecord<T>> results = new ArrayList<AuditEventRecord<T>>();
66
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
67
			results = dao.getAuditEvents(clazz,from,to,criteria, pageSize, pageNumber, sort,propertyPaths);
68
		}
69

    
70
		return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
71
	}
72

    
73
	 /**
74
     * the basic isDeletable method return false if the object is referenced from any other object.
75
     */
76

    
77
    @Override
78
    public DeleteResult isDeletable(T base, DeleteConfiguratorBase config){
79
    	DeleteResult result = new DeleteResult();
80
    	Set<CdmBase> references = commonService.getReferencingObjectsForDeletion(base);
81
    	if (references != null){
82
	    	result.addRelatedObjects(references);
83
	    	Iterator<CdmBase> iterator = references.iterator();
84
	    	CdmBase ref;
85
	    	while (iterator.hasNext()){
86
	    		ref = iterator.next();
87
	    		String message = "An object of " + ref.getClass().getName() + " with ID " + ref.getId() + " is referencing the object" ;
88
	    		result.addException(new ReferencedObjectUndeletableException(message));
89
	    		result.setAbort();
90
	    	}
91
    	}
92
    	return result;
93
    }
94
}
(95-95/97)