Project

General

Profile

Download (7.3 KB) Statistics
| Branch: | Tag: | Revision:
1

    
2
//$Id$
3
/**
4
 * Copyright (C) 2009 EDIT
5
 * European Distributed Institute of Taxonomy
6
 * http://www.e-taxonomy.eu
7
 *
8
 * The contents of this file are subject to the Mozilla Public License Version 1.1
9
 * See LICENSE.TXT at the top of this package for the full license terms.
10
 */
11
package eu.etaxonomy.cdm.api.service;
12

    
13
import java.io.Serializable;
14
import java.util.Collection;
15
import java.util.HashSet;
16
import java.util.Set;
17

    
18
import org.apache.commons.collections.buffer.CircularFifoBuffer;
19
import org.apache.log4j.Logger;
20

    
21
import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier;
22
import eu.etaxonomy.cdm.model.common.CdmBase;
23
import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
24

    
25
/**
26
 * This class represents the result of an update action.
27
 *
28
 * @author k.luther
29
 * @date 11.02.2015
30
 *
31
 */
32
public class UpdateResult implements Serializable{
33

    
34
    private static final long serialVersionUID = 1L;
35

    
36
    @SuppressWarnings("unused")
37
    private static final Logger logger = Logger.getLogger(UpdateResult.class);
38

    
39
    private Status status = Status.OK;
40

    
41
    @SuppressWarnings("unchecked")
42
    private final Collection<Exception> exceptions = new CircularFifoBuffer(10);
43

    
44
    private final Set<CdmBase> updatedObjects = new HashSet<CdmBase>();
45

    
46
    private final Set<CdmEntityIdentifier> updatedCdmIds = new HashSet<CdmEntityIdentifier>();
47

    
48
    private final Set<CdmBase> unchangedObjects = new HashSet<CdmBase>();
49

    
50
    private CdmBase cdmEntity;
51

    
52

    
53
    //		private Set<PersistPair> objectsToDelete = new HashSet<PersistPair>();
54
    //
55
    //		private Set<PersistPair> objectsToSave = new HashSet<DeleteResult.PersistPair>();
56

    
57
    //		protected class PersistPair{
58
    //			protected CdmBase objectToPersist;
59
    //			protected ICdmEntityDao<CdmBase> dao;
60
    //		}
61

    
62
    public enum Status {
63
        OK(0),
64
        ABORT(1),
65
        ERROR(3),
66
        ;
67

    
68
        protected Integer severity;
69
        private Status(int severity){
70
            this.severity = severity;
71
        }
72

    
73
        public int compareSeverity(Status other){
74
            return this.severity.compareTo(other.severity);
75
        }
76
    }
77

    
78
    //***************************** GETTER /SETTER /ADDER *************************/
79
    /**
80
     * The resulting status of an update action.
81
     *
82
     * @see UpdateStatus
83
     * @return
84
     */
85
    public Status getStatus() {
86
        return status;
87
    }
88
    public void setStatus(Status status) {
89
        this.status = status;
90
    }
91

    
92
    /**
93
     * The highest exception that occurred during delete (if any).
94
     * @return
95
     */
96
    public Collection<Exception> getExceptions() {
97
        return exceptions;
98
    }
99
    public void addException(Exception exception) {
100
        this.exceptions.add(exception);
101
    }
102
    public void addExceptions(Collection<Exception> exceptions) {
103
        this.exceptions.addAll(exceptions);
104
    }
105

    
106
    /**
107
     * Related objects that prevent the delete action to take place.
108
     * @return
109
     */
110
    public Set<CdmEntityIdentifier> getUpdatedCdmIds() {
111
        return updatedCdmIds;
112
    }
113
    public void addUpdatedCdmId(CdmEntityIdentifier cdmId) {
114
        this.updatedCdmIds.add(cdmId);
115
    }
116
    public void addUpdatedCdmIds(Set<CdmEntityIdentifier> updatedCdmIds) {
117
        this.updatedCdmIds.addAll(updatedCdmIds);
118
    }
119

    
120

    
121
    public Set<CdmBase> getUpdatedObjects() {
122
        return updatedObjects;
123
    }
124
    public void addUpdatedObject(CdmBase relatedObject) {
125
        this.updatedObjects.add(relatedObject);
126
    }
127
    public void addUpdatedObjects(Set<? extends CdmBase> updatedObjects) {
128
        this.updatedObjects.addAll(updatedObjects);
129
    }
130

    
131
    //		/**
132
    //		 * @return
133
    //		 */
134
    //		public Set<PersistPair> getObjectsToDelete() {
135
    //			return objectsToDelete;
136
    //		}
137
    //		public void setObjectsToDelete(Set<PersistPair> objectsToDelete) {
138
    //			this.objectsToDelete = objectsToDelete;
139
    //		}
140
    //
141
    //		/**
142
    //		 * @return
143
    //		 */
144
    //		public Set<PersistPair> getObjectsToSave() {
145
    //			return objectsToSave;
146
    //		}
147
    //		public void setObjectsToSave(Set<PersistPair> objectsToSave) {
148
    //			this.objectsToSave = objectsToSave;
149
    //		}
150

    
151

    
152
    //****************** CONVENIENCE *********************************************/
153

    
154
    /**
155
     * Sets the status to {@link DeleteStatus#ERROR} if not yet set to a more serious
156
     * status.
157
     */
158
    public void setError(){
159
        setMaxStatus(Status.ERROR);
160
    }
161

    
162
    /**
163
     * Sets the status to {@link DeleteStatus#ABORT} if not yet set to a more serious
164
     * status.
165
     */
166
    public void setAbort(){
167
        setMaxStatus(Status.ABORT);
168
    }
169

    
170
    /**
171
     * Sets status to most severe status. If maxStatus is more severe then existing status
172
     * existing status is set to maxStatus. Otherwise nothing changes.
173
     * If minStatus is more severe then given status minStatus will be the new status.
174
     * @param maxStatus
175
     */
176
    public void setMaxStatus(Status maxStatus) {
177
        if (this.status.compareSeverity(maxStatus) < 0){
178
            this.status = maxStatus;
179
        }
180
    }
181

    
182
    public void includeResult(UpdateResult includedResult){
183
        this.setMaxStatus(includedResult.getStatus());
184
        this.addExceptions(includedResult.getExceptions());
185
        this.addUpdatedObjects(includedResult.getUpdatedObjects());
186
    }
187

    
188
    public boolean isOk(){
189
        return this.status == Status.OK;
190
    }
191

    
192
    public boolean isAbort(){
193
        return this.status == Status.ABORT;
194
    }
195

    
196
    public boolean isError(){
197
        return this.status == Status.ERROR;
198
    }
199

    
200

    
201

    
202
    @Override
203
    public String toString(){
204
        String separator = ", ";
205
        String exceptionString = "";
206
        for (Exception exception : exceptions) {
207
            exceptionString += exception.getLocalizedMessage()+separator;
208
        }
209
        if(exceptionString.endsWith(separator)){
210
            exceptionString = exceptionString.substring(0, exceptionString.length()-separator.length());
211
        }
212
        String relatedObjectString = "";
213
        for (CdmBase upatedObject: updatedObjects) {
214
            if(upatedObject instanceof IIdentifiableEntity){
215
                relatedObjectString += ((IIdentifiableEntity) upatedObject).getTitleCache()+separator;
216
            }
217
            else{
218
                relatedObjectString += upatedObject.toString()+separator;
219
            }
220
        }
221
        if(relatedObjectString.endsWith(separator)){
222
            relatedObjectString = relatedObjectString.substring(0, relatedObjectString.length()-separator.length());
223
        }
224
        return "[DeleteResult]\n" +
225
        "Status: " + status.toString()+"\n" +
226
        "Exceptions: " + exceptionString+"\n" +
227
        "Related Objects: "+relatedObjectString;
228
    }
229
    public void setCdmEntity(CdmBase cdmBase) {
230
        this.cdmEntity = cdmBase;
231

    
232
    }
233

    
234

    
235
    public CdmBase getCdmEntity(){
236
        return cdmEntity;
237
    }
238

    
239
    public Set<CdmBase> getUnchangedObjects() {
240
        return unchangedObjects;
241
    }
242

    
243
    public void addUnchangedObjects(Set<? extends CdmBase> unchangedObjects) {
244
        this.unchangedObjects.addAll(unchangedObjects);
245
    }
246
    public void addUnChangedObject(CdmBase unchangedObject) {
247
        this.unchangedObjects.add(unchangedObject);
248
    }
249

    
250

    
251

    
252
}
(93-93/97)