import org.simantics.acorn.ClusterManager;
import org.simantics.acorn.cluster.ClusterImpl;
-import org.simantics.acorn.internal.ClusterChange;
-import org.simantics.acorn.internal.ClusterChange2;
+import org.simantics.acorn.exception.AcornAccessVerificationException;
+import org.simantics.acorn.exception.IllegalAcornStateException;
import org.simantics.acorn.internal.ClusterUpdateProcessor;
-import org.simantics.acorn.internal.ClusterUpdateProcessor2;
import org.simantics.db.service.Bytes;
import org.simantics.db.service.ClusterUID;
public ClusterChangeSet ccs;
boolean finished = false;
- public ClusterUpdateOperation(ClusterManager manager, byte[] data) {
+ public ClusterUpdateOperation(ClusterManager manager, byte[] data) throws IllegalAcornStateException, AcornAccessVerificationException {
long cuid1 = Bytes.readLE8(data, 8);
long cuid2 = Bytes.readLE8(data, 16);
this.uid = ClusterUID.make(cuid1, cuid2);
this.data = data;
this.info = manager.clusterLRU.getOrCreate(uid, true);
-
}
public void finish() {
finished = true;
}
- public void scheduled(String ccsInfoId) {
+ public void scheduled(String ccsInfoId) throws AcornAccessVerificationException, IllegalAcornStateException {
ccs = new ClusterChangeSet(ccsInfoId, uid);
chunk = ccs.getChunk(manager);
manager.addIntoCurrentChangeSet(ccsInfoId);
}
- public void run() {
+ public void run() throws AcornAccessVerificationException, IllegalAcornStateException {
ClusterUpdateOperation op = null;
byte[] data = null;
chunk.acquireMutex();
chunk.makeResident();
op = chunk.operations.get(ccs.chunkOffset);
data = op.data;
- } catch (Throwable t) {
- throw new IllegalStateException(t);
} finally {
chunk.releaseMutex();
}
op.runWithData(data);
}
- public void runWithData(byte[] data) {
-
+ public void runWithData(byte[] data) throws IllegalAcornStateException, AcornAccessVerificationException {
try {
- int version = Bytes.readLE4(data, 4);
- if(version == ClusterChange.VERSION) {
- ClusterUpdateProcessor processor = new ClusterUpdateProcessor(manager, manager.support, data, this);
- ClusterImpl cluster = info.getForUpdate();
- cluster = processor.process(cluster);
- manager.update(uid, cluster);
- } else if (version == ClusterChange2.VERSION) {
- ClusterUpdateProcessor2 processor = new ClusterUpdateProcessor2(manager.support, data, this);
- ClusterImpl cluster = info.getForUpdate();
- processor.process(cluster);
- manager.update(uid, cluster);
- } else {
- throw new IllegalStateException();
- }
+ ClusterUpdateProcessor processor = new ClusterUpdateProcessor(manager, manager.support, data, this);
+ ClusterImpl cluster = info.getForUpdate();
+ cluster = processor.process(cluster);
+ manager.update(uid, cluster);
+ } catch (IllegalAcornStateException | AcornAccessVerificationException e) {
+ throw e;
} catch (Throwable t) {
- t.printStackTrace();
+ throw new IllegalAcornStateException(t);
}
-
}
@Override