Project

General

Profile

Download (3.94 KB) Statistics
| Branch: | Tag: | Revision:
1 c2f269f9 Andreas Kohlbecker
// $Id$
2
/**
3
 * Copyright (C) 2007 EDIT
4 05cdf24e Andreas Müller
 * European Distributed Institute of Taxonomy
5 c2f269f9 Andreas Kohlbecker
 * http://www.e-taxonomy.eu
6 05cdf24e Andreas Müller
 *
7 c2f269f9 Andreas Kohlbecker
 * 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 6dc51956 ben.clark
package eu.etaxonomy.cdm.api.service;
11
12
import java.util.ArrayList;
13 2a64a8b5 Katja Luther
import java.util.Iterator;
14 6dc51956 ben.clark
import java.util.List;
15 2a64a8b5 Katja Luther
import java.util.Set;
16 645658b9 Katja Luther
import java.util.UUID;
17 6dc51956 ben.clark
18 219ab499 ben.clark
import org.hibernate.envers.query.criteria.AuditCriterion;
19 1995f802 Katja Luther
import org.springframework.beans.factory.annotation.Autowired;
20 d44277a9 ben.clark
import org.springframework.transaction.annotation.Transactional;
21
22 1995f802 Katja Luther
import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
23 aa3535e0 Katja Luther
import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
24 6dc51956 ben.clark
import eu.etaxonomy.cdm.api.service.pager.Pager;
25
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
26 1995f802 Katja Luther
import eu.etaxonomy.cdm.model.common.CdmBase;
27 6dc51956 ben.clark
import eu.etaxonomy.cdm.model.common.VersionableEntity;
28 219ab499 ben.clark
import eu.etaxonomy.cdm.model.view.AuditEvent;
29 6dc51956 ben.clark
import eu.etaxonomy.cdm.model.view.AuditEventRecord;
30
import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
31
import eu.etaxonomy.cdm.persistence.dao.common.IVersionableDao;
32
33
public abstract class VersionableServiceBase<T extends VersionableEntity, DAO extends IVersionableDao<T>> extends ServiceBase<T,DAO> implements IVersionableService<T> {
34 1995f802 Katja Luther
	@Autowired
35
    protected ICommonService commonService;
36 05cdf24e Andreas Müller
	@Override
37
    @Transactional(readOnly = true)
38 c4e812bc ben.clark
	public Pager<AuditEventRecord<T>> pageAuditEvents(T t, Integer pageSize,	Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
39 6dc51956 ben.clark
		Integer numberOfResults = dao.countAuditEvents(t, sort);
40 05cdf24e Andreas Müller
41 6dc51956 ben.clark
		List<AuditEventRecord<T>> results = new ArrayList<AuditEventRecord<T>>();
42 76de813f Andreas Kohlbecker
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
43 c4e812bc ben.clark
			results = dao.getAuditEvents(t, pageSize, pageNumber, sort,propertyPaths);
44 6dc51956 ben.clark
		}
45 05cdf24e Andreas Müller
46 6dc51956 ben.clark
		return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
47
	}
48
49 05cdf24e Andreas Müller
	@Override
50
    @Transactional(readOnly = true)
51 6dc51956 ben.clark
	public AuditEventRecord<T> getNextAuditEvent(T t) {
52
		return dao.getNextAuditEvent(t);
53
	}
54
55 05cdf24e Andreas Müller
	@Override
56
    @Transactional(readOnly = true)
57 6dc51956 ben.clark
	public AuditEventRecord<T> getPreviousAuditEvent(T t) {
58
		return dao.getPreviousAuditEvent(t);
59
	}
60 05cdf24e Andreas Müller
61
	@Override
62
    @Transactional(readOnly = true)
63 219ab499 ben.clark
	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) {
64
		Integer numberOfResults = dao.countAuditEvents(clazz, from, to, criteria);
65 05cdf24e Andreas Müller
66 219ab499 ben.clark
		List<AuditEventRecord<T>> results = new ArrayList<AuditEventRecord<T>>();
67 76de813f Andreas Kohlbecker
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
68 219ab499 ben.clark
			results = dao.getAuditEvents(clazz,from,to,criteria, pageSize, pageNumber, sort,propertyPaths);
69
		}
70 05cdf24e Andreas Müller
71 219ab499 ben.clark
		return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
72
	}
73 05cdf24e Andreas Müller
74 1995f802 Katja Luther
	 /**
75
     * the basic isDeletable method return false if the object is referenced from any other object.
76
     */
77 05cdf24e Andreas Müller
78 1995f802 Katja Luther
    @Override
79 645658b9 Katja Luther
    public DeleteResult isDeletable(UUID baseUUID, DeleteConfiguratorBase config){
80 5ddc7eb3 Katja Luther
    	DeleteResult result = new DeleteResult();
81 645658b9 Katja Luther
    	T base = this.find(baseUUID);
82 aa3535e0 Katja Luther
    	Set<CdmBase> references = commonService.getReferencingObjectsForDeletion(base);
83 5ddc7eb3 Katja Luther
    	if (references != null){
84
	    	result.addRelatedObjects(references);
85
	    	Iterator<CdmBase> iterator = references.iterator();
86
	    	CdmBase ref;
87
	    	while (iterator.hasNext()){
88
	    		ref = iterator.next();
89
	    		String message = "An object of " + ref.getClass().getName() + " with ID " + ref.getId() + " is referencing the object" ;
90
	    		result.addException(new ReferencedObjectUndeletableException(message));
91
	    		result.setAbort();
92
	    	}
93 1995f802 Katja Luther
    	}
94
    	return result;
95
    }
96 05cdf24e Andreas Müller
}