Project

General

Profile

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

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

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

    
22
import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
23
import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
24
import eu.etaxonomy.cdm.api.service.pager.Pager;
25
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
26
import eu.etaxonomy.cdm.model.common.CdmBase;
27
import eu.etaxonomy.cdm.model.common.VersionableEntity;
28
import eu.etaxonomy.cdm.model.view.AuditEvent;
29
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>>
34
        extends ServiceBase<T,DAO>
35
        implements IVersionableService<T> {
36

    
37
    @Autowired
38
    protected ICommonService commonService;
39

    
40
	@Override
41
    @Transactional(readOnly = true)
42
	public Pager<AuditEventRecord<T>> pageAuditEvents(T t, Integer pageSize,	Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
43
		long numberOfResults = dao.countAuditEvents(t, sort);
44

    
45
		List<AuditEventRecord<T>> results = new ArrayList<>();
46
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
47
			results = dao.getAuditEvents(t, pageSize, pageNumber, sort,propertyPaths);
48
		}
49

    
50
		return new DefaultPagerImpl<>(pageNumber, numberOfResults, pageSize, results);
51
	}
52

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

    
59
	@Override
60
    @Transactional(readOnly = true)
61
	public AuditEventRecord<T> getPreviousAuditEvent(T t) {
62
		return dao.getPreviousAuditEvent(t);
63
	}
64

    
65
	@Override
66
    @Transactional(readOnly = true)
67
	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) {
68
		long numberOfResults = dao.countAuditEvents(clazz, from, to, criteria);
69

    
70
		List<AuditEventRecord<T>> results = new ArrayList<>();
71
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
72
			results = dao.getAuditEvents(clazz,from,to,criteria, pageSize, pageNumber, sort,propertyPaths);
73
		}
74

    
75
		return new DefaultPagerImpl<>(pageNumber, numberOfResults, pageSize, results);
76
	}
77

    
78
	 /**
79
     * the basic isDeletable method return false if the object is referenced from any other object.
80
     */
81

    
82
    @Override
83
    @Transactional(readOnly = true)
84
    public DeleteResult isDeletable(UUID baseUUID, DeleteConfiguratorBase config){
85
    	DeleteResult result = new DeleteResult();
86
    	T base = this.find(baseUUID);
87
    	if (base == null){
88
    	    result.setAbort();
89
    	    result.addException(new ObjectDeletedException("The object was already deleted.", baseUUID, null));
90
    	}
91
    	Set<CdmBase> references = commonService.getReferencingObjectsForDeletion(base);
92
    	if (references != null){
93
	    	result.addRelatedObjects(references);
94
	    	Iterator<CdmBase> iterator = references.iterator();
95
	    	CdmBase ref;
96
	    	while (iterator.hasNext()){
97
	    		ref = iterator.next();
98
	    		String message = "An object of " + ref.getClass().getName() + " with ID " + ref.getId() + " is referencing the object" ;
99
	    		result.addException(new ReferencedObjectUndeletableException(message));
100
	    		result.setAbort();
101
	    	}
102
    	}
103
    	return result;
104
    }
105
}
(94-94/95)