Project

General

Profile

« Previous | Next » 

Revision ea7b7584

Added by Cherian Mathew almost 9 years ago

#5025 : Implement load of UpdateResult using new cdm entity identifier

View differences:

eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java
11 11

  
12 12
import java.util.ArrayList;
13 13
import java.util.Collection;
14
import java.util.HashSet;
14 15
import java.util.List;
15 16
import java.util.Map;
17
import java.util.Set;
16 18

  
17 19
import net.sf.ehcache.Cache;
18 20
import net.sf.ehcache.CacheManager;
......
23 25

  
24 26
import org.apache.log4j.Logger;
25 27

  
28
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
26 29
import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
30
import eu.etaxonomy.cdm.api.service.UpdateResult;
31
import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier;
27 32
import eu.etaxonomy.cdm.model.ICdmCacher;
28 33
import eu.etaxonomy.cdm.model.common.CdmBase;
29 34
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
......
131 136
        return cacheLoader.load(cdmEntity, true, update);
132 137
    }
133 138

  
139

  
140
    private CdmBase load(CdmEntityIdentifier cei, boolean update) {
141
        return load(CdmBase.deproxy(CdmApplicationState.getCommonService().find(cei.getCdmClass(), cei.getId()),cei.getCdmClass()), update);
142
    }
143

  
144

  
145
    public UpdateResult load(UpdateResult result, boolean update) {
146
        // probably a good time to broadcast to other sessions
147

  
148
        Set<CdmBase> updatedObjects = result.getUpdatedObjects();
149
        Set<CdmBase> reloadedObjects = new HashSet<CdmBase>();
150
        Set<CdmEntityIdentifier> updatedCdmIds = result.getUpdatedCdmIds();
151
        boolean updatedCdmIdsIsEmpty = updatedCdmIds.isEmpty();
152

  
153
        // if the cdm identifier set contains identifiers of objects already
154
        // present in the updated objects set reomve them
155
        for(CdmBase updatedObject : updatedObjects) {
156
            CdmEntityIdentifier cdmEntityIdentifier = new CdmEntityIdentifier(updatedObject.getId(), updatedObject.getClass());
157
            if(!updatedCdmIdsIsEmpty && updatedCdmIds.contains(cdmEntityIdentifier)) {
158
                updatedCdmIds.remove(cdmEntityIdentifier);
159
            }
160
            reloadedObjects.add(cacheLoader.load(updatedObject, true, update));
161
        }
162

  
163
        // remote load cdm identifiers of objects which already exist
164
        // in the cache
165

  
166
        for(CdmEntityIdentifier cei : updatedCdmIds) {
167
            if(exists(new CdmEntityCacheKey(cei.getCdmClass(), cei.getId()))) {
168
                reloadedObjects.add(load(cei, update));
169
            }
170

  
171
        }
172
        updatedObjects.clear();
173
        result.addUpdatedObjects(reloadedObjects);
174
        return result;
175
    }
176

  
134 177
    public CdmModelFieldPropertyFromClass getFromCdmlibModelCache(String className) {
135 178
        return cacheLoader.getFromCdmlibModelCache(className);
136 179
    }
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java
45 45
			    } else if(rir.getValue() instanceof UpdateResult){
46 46
			        UpdateResult result = (UpdateResult)rir.getValue();
47 47
			        if(result.isOk()){
48
			            cdmEntitySessionManager.load(result.getUpdatedObjects(), true);
48
			            cdmEntitySessionManager.load(result, true);
49 49
			        }
50 50
			    } else {
51 51
			        rir = new RemoteInvocationResult(cdmEntitySessionManager.load(rir.getValue(), false));
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java
23 23

  
24 24
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
25 25
import eu.etaxonomy.cdm.api.service.IService;
26
import eu.etaxonomy.cdm.api.service.UpdateResult;
26 27
import eu.etaxonomy.cdm.model.common.CdmBase;
27 28
import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
28 29
import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
......
83 84
        return (T)cdmTransientEntityCacher.load(cdmBase, update);
84 85
    }
85 86

  
87

  
88

  
89
    /* (non-Javadoc)
90
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean)
91
     */
92
    @Override
93
    public UpdateResult load(UpdateResult updateResult, boolean update) {
94
        return cdmTransientEntityCacher.load(updateResult, update);
95
    }
96

  
86 97
    @Override
87 98
    public <T extends CdmBase> void  update() {
88 99
        List<T> rootEntities = getRootEntities();
......
292 303

  
293 304

  
294 305

  
306

  
307

  
295 308
}
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java
20 20
import org.apache.log4j.Logger;
21 21
import org.springframework.stereotype.Component;
22 22

  
23
import eu.etaxonomy.cdm.api.service.UpdateResult;
23 24
import eu.etaxonomy.cdm.model.common.CdmBase;
24 25

  
25 26
/**
......
128 129
    }
129 130

  
130 131

  
132
    /* (non-Javadoc)
133
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean)
134
     */
135
    @Override
136
    public UpdateResult load(UpdateResult updateResult, boolean update) {
137
        if(activeSession == null) {
138
            return updateResult;
139
        }
140
        return activeSession.load(updateResult, update);
141
    }
142

  
131 143

  
132 144
    /* (non-Javadoc)
133 145
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
......
207 219
    }
208 220

  
209 221

  
222

  
210 223
}
211 224

  
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySession.java
6 6

  
7 7
import net.sf.ehcache.statistics.LiveCacheStatistics;
8 8
import eu.etaxonomy.cdm.api.service.IService;
9
import eu.etaxonomy.cdm.api.service.UpdateResult;
9 10
import eu.etaxonomy.cdm.model.common.CdmBase;
10 11
import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
11 12

  
......
19 20

  
20 21
	public  <T extends CdmBase> T load(T cdmBase, boolean update);
21 22

  
23
	public  UpdateResult load(UpdateResult updateResult, boolean update);
24

  
22 25
	public <T extends CdmBase> EntityCacherDebugResult debug(T cdmBase);
23 26

  
24 27
	public <T extends CdmBase> EntityCacherDebugResult debug(List<T> cdmBase);
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java
2 2

  
3 3
import java.util.Collection;
4 4

  
5
import eu.etaxonomy.cdm.api.service.UpdateResult;
5 6
import eu.etaxonomy.cdm.model.common.CdmBase;
6 7

  
7 8
public interface ICdmEntitySessionManager {
......
17 18
	public abstract <T extends CdmBase> T load(T cdmBase, boolean update);
18 19

  
19 20

  
21
	public abstract UpdateResult load(UpdateResult updateResult, boolean update);
22

  
23

  
20 24
	public abstract <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update);
21 25

  
22 26

  
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySession.java
15 15

  
16 16
import net.sf.ehcache.statistics.LiveCacheStatistics;
17 17
import eu.etaxonomy.cdm.api.service.IService;
18
import eu.etaxonomy.cdm.api.service.UpdateResult;
18 19
import eu.etaxonomy.cdm.model.common.CdmBase;
19 20
import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
20 21
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
......
180 181

  
181 182
    }
182 183

  
184
    /* (non-Javadoc)
185
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean)
186
     */
187
    @Override
188
    public UpdateResult load(UpdateResult updateResult, boolean update) {
189
        return updateResult;
190
    }
191

  
183 192

  
184 193
}
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java
2 2

  
3 3
import java.util.Collection;
4 4

  
5
import eu.etaxonomy.cdm.api.service.UpdateResult;
5 6
import eu.etaxonomy.cdm.model.common.CdmBase;
6 7
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
7 8
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
......
101 102

  
102 103
    }
103 104

  
105
    /* (non-Javadoc)
106
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean)
107
     */
108
    @Override
109
    public UpdateResult load(UpdateResult updateResult, boolean update) {
110
        return updateResult;
111
    }
112

  
104 113

  
105 114
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/RemotingCdmUpdateOperation.java
30 30
public abstract class RemotingCdmUpdateOperation extends RemotingCdmOperation {
31 31

  
32 32
    private UpdateResult updateResult;
33
    public static boolean throwExceptions = false;
33 34

  
34 35
    /**
35 36
     * @param label
......
46 47
        try {
47 48
            updateResult = doUpdateExecute(monitor, info);
48 49
        } catch (Exception e) {
49
            UpdateResult exceptionResult = new UpdateResult();
50
            exceptionResult.addException(e);
51
            exceptionResult.setError();
52
            updateResult = exceptionResult;
50
            if(throwExceptions) {
51
                throw new RuntimeException(e);
52
            } else {
53
                UpdateResult exceptionResult = new UpdateResult();
54
                exceptionResult.addException(e);
55
                exceptionResult.setError();
56
                updateResult = exceptionResult;
57
            }
53 58
        }
54 59
        return updateResult.isOk();
55 60
    }
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operations/BaseOperationTest.java
15 15
import org.eclipse.core.runtime.IAdaptable;
16 16
import org.eclipse.core.runtime.IProgressMonitor;
17 17
import org.eclipse.core.runtime.NullProgressMonitor;
18
import org.junit.Before;
18 19

  
19 20
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
20 21
import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest;
21 22
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
23
import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation;
22 24
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
23 25
import eu.etaxonomy.taxeditor.test.MockConversationEnabled;
24 26

  
......
39 41

  
40 42
	protected static AbstractOperation operation;
41 43

  
42

  
44
	@Before
45
	public void initializeOperations() {
46
	    RemotingCdmUpdateOperation.throwExceptions = true;
47
	}
43 48

  
44 49
}

Also available in: Unified diff