X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.db.procore%2Fsrc%2Ffi%2Fvtt%2Fsimantics%2Fprocore%2Finternal%2FResourceImpl.java;h=d4e7c648a1ac874ab210a758645b27315d6a8813;hp=03cde32605175c7a353e9c1d3f06a5e843acbe0c;hb=51f45bdf95551409666a04f92355638f83c018da;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ResourceImpl.java b/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ResourceImpl.java index 03cde3260..d4e7c648a 100644 --- a/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ResourceImpl.java +++ b/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ResourceImpl.java @@ -1,436 +1,436 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package fi.vtt.simantics.procore.internal; - - - -//public abstract class ResourceImpl implements Resource { -// public final static ResourceImpl[] NONE = new ResourceImpl[0]; -//} - -//class ResourceProxy { -// private final int offset; -// private final int size; -// private WeakReference weakResource = null; -// private ResourceImplModified modifiedResourceImpl = null; -// private Value_ value; -// ResourceProxy(int offset, int size) { -// this.offset = offset; -// this.size = size; -// } -// boolean isNew() { -// return 0 == size; -// } -// private ResourceImpl getResourceImplModified(Cluster cluster, long subject) { -// ResourceImpl r; -// if (null == weakResource || null == (r = weakResource.get())) { -// if (null == modifiedResourceImpl) -// modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value); -// r = new ResourceImpl(subject, modifiedResourceImpl); -// weakResource = new WeakReference(r); -// } else if (!r.isModified()) { -// if (null == modifiedResourceImpl) -// modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value); -// r.setImpl(modifiedResourceImpl); -// } -// return r; -// } -// void setValue(Value_ value) { -// this.value = value; -// } -// ResourceImpl addRelation(Cluster cluster, long subject, long predicate, long predicateCluster, long object, long objectCluster) { -// ResourceImpl r = getResourceImplModified(cluster, subject); -// return r.addRelation(predicate, predicateCluster, object, objectCluster); -// } -// void removeRelation(Cluster cluster, long subject, long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException { -// ResourceImpl r = getResourceImplModified(cluster, subject); -// r.removeRelation(predicate, predicateCluster, object, objectCluster); -// } -// ResourceImpl getResource(Cluster cluster, long id) { -// ResourceImpl r; -// if (null != weakResource) { -// r = weakResource.get(); -// if (null != r) -// return r; -// } -// if (isNew()) { -// if (null == modifiedResourceImpl) -// modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value); -// r = new ResourceImpl(id, modifiedResourceImpl); -// } else -// r = new ResourceImpl(id, new ResourceImplFixed(cluster, offset, size, value)); -// weakResource = new WeakReference(r); -// return r; -// } -// ResourceImpl getResourceImpl(long id, ResourceImplModified impl) { -// ResourceImpl r; -// assert(null == modifiedResourceImpl); -// assert(null == weakResource); -// modifiedResourceImpl = impl; -// r = new ResourceImpl(id, impl); -// weakResource = new WeakReference(r); -// return r; -// } -// void release() { -// if (null == weakResource) -// return; -// weakResource = null; -// modifiedResourceImpl = null; -// } -//} -// -//abstract class ResourceImplAbstract { -// abstract void init(ResourceImpl self); -// abstract void dispose(); -// abstract Value_ getValue(ResourceImpl self); -// abstract long getClusterId(); -// abstract boolean isModified(); -// abstract int getNumberOfRelations(ResourceImpl self); -// abstract StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException; -// abstract void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster); -// abstract void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException; -// abstract void addValue(ResourceImpl self, Value_ value); // TODO: Remove return value, inefficient. -//} -// -//abstract class ResourceImplCluster extends ResourceImplAbstract { -// private Cluster cluster; -// protected Value_ value; -// protected Value_ valueOld = null; -// protected Cluster getCluster() { -// return cluster; -// } -// ResourceImplCluster(Cluster cluster) { -// this.cluster = cluster; -// cluster.incReferenceCount(); -// } -// void setCluster(Cluster c) { -// this.cluster = c; -// } -// @Override -// void init(ResourceImpl self) { -// } -// @Override -// void dispose() { -// cluster.decReferenceCount(); -// } -// @Override -// long getClusterId() { -// return cluster.getId(); -// } -// @Override -// Value_ getValue(ResourceImpl self) { -// return value; -// } -// protected void setValue(Value_ value) { -// this.value = this.valueOld = value; -// } -// void moveValue() { -// valueOld = value; -// } -// void removeValue() { -// value = valueOld; -// } -// void addValue(ResourceImpl self, Value_ value) { // TODO: Remove return value, inefficient. -// this.value = value; -// } -//} -// -//class ResourceImplFixed extends ResourceImplCluster { -// final int fixedOffset; -// final int fixedSize; -// public ResourceImplFixed(Cluster cluster, int offset, int size, Value_ value) { -// super(cluster); -// this.fixedOffset = offset; -// this.fixedSize = size; -// setValue(value); -// } -// @Override -// int getNumberOfRelations(ResourceImpl self) { -// return fixedSize; -// } -// @Override -// StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException { -// StatementImpl[] stms = new StatementImpl[fixedSize]; -// GraphSession gs = this.getCluster().client; -// int end = fixedOffset + fixedSize; -// for (int i=fixedOffset, j=0; i>32)^predicate^(predicate>>>32)); -// } -// @Override -// public boolean equals(Object obj) { -// if (this == obj) -// return true; -// else if (obj == null) -// return false; -// else if (ResourceImplModifiedStatement.class != obj.getClass()) -// return false; -// ResourceImplModifiedStatement d = (ResourceImplModifiedStatement)obj; -// return (d.object == object) && (d.predicate == predicate); -// } -//} -// -//class ResourceImplModified extends ResourceImplCluster { -// static ResourceImplModifiedStatement findStatement = new ResourceImplModifiedStatement(0, 0, 0, 0); -// THashSet statements = new THashSet(); -// THashSet reclusteringStatements = new THashSet(); -// public ResourceImplModified(Cluster cluster, int offset, int size, Value_ value) { -// super(cluster); -// setValue(value); -// statements.ensureCapacity(size); -// for (int i=0,j=offset; i oldResourceIdToNewClusterIdMap) { -// for (ResourceImplModifiedStatement s : reclusteringStatements) { -// statements.remove(s); -// if (Constants.ReservedClusterId == s.predicateCluster) -// s.predicateCluster = oldResourceIdToNewClusterIdMap.get(s.predicate); -// if (Constants.ReservedClusterId == s.objectCluster) -// s.objectCluster = oldResourceIdToNewClusterIdMap.get(s.object); -// statements.add(s); -// } -// reclusteringStatements.clear(); -// } -// -// void removeStatements() { -// for (ResourceImplModifiedStatement s : reclusteringStatements) { -// statements.remove(s); -// } -// reclusteringStatements.clear(); -// } -// -// @Override -// int getNumberOfRelations(ResourceImpl self) { -// return statements.size(); -// } -// @Override -// boolean isModified() { -// return true; // HACK: This is not necessarily true. In creation no modifications given and modifications can cancel each other out. -// } -// @Override -// StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException { -// int size = statements.size(); -// StatementImpl[] stms = new StatementImpl[size]; -// GraphSession gs = getCluster().client; -// int i = -1; -// for (ResourceImplModifiedStatement s : statements) { -// ResourceImpl p; -// if (Constants.ReservedClusterId == s.predicateCluster) -// p = this.getCluster().getResourceReservedOrThrow(Constants.ReservedClusterId, s.predicate); -// else -// p = gs.getResourceOrThrow(s.predicate, s.predicateCluster); -// if (Constants.ReservedClusterId == s.objectCluster) { -// ResourceImpl o = this.getCluster().getResourceReservedOrThrow(Constants.ReservedClusterId, s.object); -// stms[++i] = new StatementImplOld(self, p, o); -// } else -// stms[++i] = new StatementImplNew(self, p, s.object, s.objectCluster, gs); -// } -// return stms; -// } -// private boolean find(long predicate, long predicateCluster, long object, long objectCluster) { -// findStatement.predicate = predicate; -// findStatement.predicateCluster = predicateCluster; -// findStatement.object = object; -// findStatement.objectCluster = objectCluster; -// return statements.contains(findStatement); -// } -// @Override -// void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) { -// if (find(predicate, predicateCluster, object, objectCluster)) -// return; -// //System.out.println(self + "." + getNumberOfRelations(self) + ": " + predicate + "." + predicateCluster + " " + object + "." + objectCluster); -// ResourceImplModifiedStatement s = new ResourceImplModifiedStatement(predicate, predicateCluster, object, objectCluster); -// statements.add(s); -// if (Constants.ReservedClusterId == predicateCluster || -// Constants.ReservedClusterId == objectCluster) { -// reclusteringStatements.add(s); -// getCluster().addModifiedResource(self); -// } -// } -// @Override -// void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException { -// findStatement.predicate = predicate; -// findStatement.predicateCluster = predicateCluster; -// findStatement.object = object; -// findStatement.objectCluster = objectCluster; -// if (!statements.remove(findStatement)) -// throw new StatementNotFoundException(); -// reclusteringStatements.remove(findStatement); -// } -//} -// -//class ResourceImplChangeSet extends ResourceImplAbstract { -// private SessionImplHistorical session; -// private long cluster; -// private ResourceImpl original; -// public ResourceImplChangeSet(SessionImplHistorical session, long cluster) { -// this.session = session; -// this.cluster = cluster; -// } -// @Override -// void init(ResourceImpl self) { -// Cluster c = session.getCluster(cluster); -// if (null != c) -// this.original = c.getResource(self.id); -// } -// @Override -// void dispose() { -// } -// @Override -// long getClusterId() { -// return cluster; -// } -// @Override -// Value_ getValue(ResourceImpl self) { -// Value_ value = null; -// if (null != original) -// value = original.getValue(); -// return session.getValue(self.id, value); -// } -// @Override -// int getNumberOfRelations(ResourceImpl self) { -// int n = 0; -// if (null != original) -// n = original.getNumberOfRelations(); -// n += session.getNumberOfAddedRelations(self.id); -// n -= session.getNumberOfRemovedRelations(self.id); -// return n; -// } -// @Override -// StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException { -// StatementImpl[] stms = StatementImpl.NONE; -// if (null != original) -// stms = original.getStatements(); -// return session.getStatements(self.id, stms); -// } -// @Override -// boolean isModified() { -// return false; -// } -// @Override -// void addValue(ResourceImpl self, Value_ value) { -// throw new Error("Not allowed"); -// } -// @Override -// void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) { -// throw new Error("Not allowed"); -// } -// @Override -// void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) { -// throw new Error("Not allowed"); -// } -//} -// -//class ResourceImplClusterNew extends ResourceImplAbstract { -// //private Cluster clusterOld; -// private final long id; -// private org.simantics.db.procore.cluster.Cluster cluster; -// protected Cluster getCluster() { -// throw new Error("No can do."); -// } -// ResourceImplClusterNew(long id, org.simantics.db.procore.cluster.Cluster cluster) { -// this.id = id; -// this.cluster = cluster; -// } -// final org.simantics.db.procore.cluster.Cluster getClusterNew() { -// return cluster; -// } -// void setCluster(Cluster c) { -// throw new Error("No can do."); -// } -// @Override -// void init(ResourceImpl self) { -// } -// @Override -// void dispose() { -// } -// @Override -// long getClusterId() { -// return cluster.getId(); -// } -// @Override -// Value_ getValue(ResourceImpl self) { -// byte[] value = cluster.getValue(id); -// return new Zany(value); -// } -// protected void setValue(Value_ value) { -// throw new Error("No can do."); -// } -// void moveValue() { -// throw new Error("No can do."); -// } -// void removeValue() { -// throw new Error("No can do."); -// } -// void addValue(ResourceImpl self, Value_ value) { // TODO: Remove return value, inefficient. -// throw new Error("No can do."); -// } -// @Override -// void addRelation(ResourceImpl self, long predicate, long predicateCluster, -// long object, long objectCluster) { -// throw new Error("No can do."); -// } -// @Override -// int getNumberOfRelations(ResourceImpl self) { -// throw new Error("No can do."); -// } -// @Override -// StatementImpl[] getStatements(ResourceImpl self) { -// throw new Error("No can do."); -// } -// @Override -// boolean isModified() { -// throw new Error("No can do."); -// } -// @Override -// void removeRelation(long predicate, long predicateCluster, long object, -// long objectCluster) throws StatementNotFoundException { -// throw new Error("No can do."); -// } -//} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package fi.vtt.simantics.procore.internal; + + + +//public abstract class ResourceImpl implements Resource { +// public final static ResourceImpl[] NONE = new ResourceImpl[0]; +//} + +//class ResourceProxy { +// private final int offset; +// private final int size; +// private WeakReference weakResource = null; +// private ResourceImplModified modifiedResourceImpl = null; +// private Value_ value; +// ResourceProxy(int offset, int size) { +// this.offset = offset; +// this.size = size; +// } +// boolean isNew() { +// return 0 == size; +// } +// private ResourceImpl getResourceImplModified(Cluster cluster, long subject) { +// ResourceImpl r; +// if (null == weakResource || null == (r = weakResource.get())) { +// if (null == modifiedResourceImpl) +// modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value); +// r = new ResourceImpl(subject, modifiedResourceImpl); +// weakResource = new WeakReference(r); +// } else if (!r.isModified()) { +// if (null == modifiedResourceImpl) +// modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value); +// r.setImpl(modifiedResourceImpl); +// } +// return r; +// } +// void setValue(Value_ value) { +// this.value = value; +// } +// ResourceImpl addRelation(Cluster cluster, long subject, long predicate, long predicateCluster, long object, long objectCluster) { +// ResourceImpl r = getResourceImplModified(cluster, subject); +// return r.addRelation(predicate, predicateCluster, object, objectCluster); +// } +// void removeRelation(Cluster cluster, long subject, long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException { +// ResourceImpl r = getResourceImplModified(cluster, subject); +// r.removeRelation(predicate, predicateCluster, object, objectCluster); +// } +// ResourceImpl getResource(Cluster cluster, long id) { +// ResourceImpl r; +// if (null != weakResource) { +// r = weakResource.get(); +// if (null != r) +// return r; +// } +// if (isNew()) { +// if (null == modifiedResourceImpl) +// modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value); +// r = new ResourceImpl(id, modifiedResourceImpl); +// } else +// r = new ResourceImpl(id, new ResourceImplFixed(cluster, offset, size, value)); +// weakResource = new WeakReference(r); +// return r; +// } +// ResourceImpl getResourceImpl(long id, ResourceImplModified impl) { +// ResourceImpl r; +// assert(null == modifiedResourceImpl); +// assert(null == weakResource); +// modifiedResourceImpl = impl; +// r = new ResourceImpl(id, impl); +// weakResource = new WeakReference(r); +// return r; +// } +// void release() { +// if (null == weakResource) +// return; +// weakResource = null; +// modifiedResourceImpl = null; +// } +//} +// +//abstract class ResourceImplAbstract { +// abstract void init(ResourceImpl self); +// abstract void dispose(); +// abstract Value_ getValue(ResourceImpl self); +// abstract long getClusterId(); +// abstract boolean isModified(); +// abstract int getNumberOfRelations(ResourceImpl self); +// abstract StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException; +// abstract void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster); +// abstract void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException; +// abstract void addValue(ResourceImpl self, Value_ value); // TODO: Remove return value, inefficient. +//} +// +//abstract class ResourceImplCluster extends ResourceImplAbstract { +// private Cluster cluster; +// protected Value_ value; +// protected Value_ valueOld = null; +// protected Cluster getCluster() { +// return cluster; +// } +// ResourceImplCluster(Cluster cluster) { +// this.cluster = cluster; +// cluster.incReferenceCount(); +// } +// void setCluster(Cluster c) { +// this.cluster = c; +// } +// @Override +// void init(ResourceImpl self) { +// } +// @Override +// void dispose() { +// cluster.decReferenceCount(); +// } +// @Override +// long getClusterId() { +// return cluster.getId(); +// } +// @Override +// Value_ getValue(ResourceImpl self) { +// return value; +// } +// protected void setValue(Value_ value) { +// this.value = this.valueOld = value; +// } +// void moveValue() { +// valueOld = value; +// } +// void removeValue() { +// value = valueOld; +// } +// void addValue(ResourceImpl self, Value_ value) { // TODO: Remove return value, inefficient. +// this.value = value; +// } +//} +// +//class ResourceImplFixed extends ResourceImplCluster { +// final int fixedOffset; +// final int fixedSize; +// public ResourceImplFixed(Cluster cluster, int offset, int size, Value_ value) { +// super(cluster); +// this.fixedOffset = offset; +// this.fixedSize = size; +// setValue(value); +// } +// @Override +// int getNumberOfRelations(ResourceImpl self) { +// return fixedSize; +// } +// @Override +// StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException { +// StatementImpl[] stms = new StatementImpl[fixedSize]; +// GraphSession gs = this.getCluster().client; +// int end = fixedOffset + fixedSize; +// for (int i=fixedOffset, j=0; i>32)^predicate^(predicate>>>32)); +// } +// @Override +// public boolean equals(Object obj) { +// if (this == obj) +// return true; +// else if (obj == null) +// return false; +// else if (ResourceImplModifiedStatement.class != obj.getClass()) +// return false; +// ResourceImplModifiedStatement d = (ResourceImplModifiedStatement)obj; +// return (d.object == object) && (d.predicate == predicate); +// } +//} +// +//class ResourceImplModified extends ResourceImplCluster { +// static ResourceImplModifiedStatement findStatement = new ResourceImplModifiedStatement(0, 0, 0, 0); +// THashSet statements = new THashSet(); +// THashSet reclusteringStatements = new THashSet(); +// public ResourceImplModified(Cluster cluster, int offset, int size, Value_ value) { +// super(cluster); +// setValue(value); +// statements.ensureCapacity(size); +// for (int i=0,j=offset; i oldResourceIdToNewClusterIdMap) { +// for (ResourceImplModifiedStatement s : reclusteringStatements) { +// statements.remove(s); +// if (Constants.ReservedClusterId == s.predicateCluster) +// s.predicateCluster = oldResourceIdToNewClusterIdMap.get(s.predicate); +// if (Constants.ReservedClusterId == s.objectCluster) +// s.objectCluster = oldResourceIdToNewClusterIdMap.get(s.object); +// statements.add(s); +// } +// reclusteringStatements.clear(); +// } +// +// void removeStatements() { +// for (ResourceImplModifiedStatement s : reclusteringStatements) { +// statements.remove(s); +// } +// reclusteringStatements.clear(); +// } +// +// @Override +// int getNumberOfRelations(ResourceImpl self) { +// return statements.size(); +// } +// @Override +// boolean isModified() { +// return true; // HACK: This is not necessarily true. In creation no modifications given and modifications can cancel each other out. +// } +// @Override +// StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException { +// int size = statements.size(); +// StatementImpl[] stms = new StatementImpl[size]; +// GraphSession gs = getCluster().client; +// int i = -1; +// for (ResourceImplModifiedStatement s : statements) { +// ResourceImpl p; +// if (Constants.ReservedClusterId == s.predicateCluster) +// p = this.getCluster().getResourceReservedOrThrow(Constants.ReservedClusterId, s.predicate); +// else +// p = gs.getResourceOrThrow(s.predicate, s.predicateCluster); +// if (Constants.ReservedClusterId == s.objectCluster) { +// ResourceImpl o = this.getCluster().getResourceReservedOrThrow(Constants.ReservedClusterId, s.object); +// stms[++i] = new StatementImplOld(self, p, o); +// } else +// stms[++i] = new StatementImplNew(self, p, s.object, s.objectCluster, gs); +// } +// return stms; +// } +// private boolean find(long predicate, long predicateCluster, long object, long objectCluster) { +// findStatement.predicate = predicate; +// findStatement.predicateCluster = predicateCluster; +// findStatement.object = object; +// findStatement.objectCluster = objectCluster; +// return statements.contains(findStatement); +// } +// @Override +// void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) { +// if (find(predicate, predicateCluster, object, objectCluster)) +// return; +// //System.out.println(self + "." + getNumberOfRelations(self) + ": " + predicate + "." + predicateCluster + " " + object + "." + objectCluster); +// ResourceImplModifiedStatement s = new ResourceImplModifiedStatement(predicate, predicateCluster, object, objectCluster); +// statements.add(s); +// if (Constants.ReservedClusterId == predicateCluster || +// Constants.ReservedClusterId == objectCluster) { +// reclusteringStatements.add(s); +// getCluster().addModifiedResource(self); +// } +// } +// @Override +// void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException { +// findStatement.predicate = predicate; +// findStatement.predicateCluster = predicateCluster; +// findStatement.object = object; +// findStatement.objectCluster = objectCluster; +// if (!statements.remove(findStatement)) +// throw new StatementNotFoundException(); +// reclusteringStatements.remove(findStatement); +// } +//} +// +//class ResourceImplChangeSet extends ResourceImplAbstract { +// private SessionImplHistorical session; +// private long cluster; +// private ResourceImpl original; +// public ResourceImplChangeSet(SessionImplHistorical session, long cluster) { +// this.session = session; +// this.cluster = cluster; +// } +// @Override +// void init(ResourceImpl self) { +// Cluster c = session.getCluster(cluster); +// if (null != c) +// this.original = c.getResource(self.id); +// } +// @Override +// void dispose() { +// } +// @Override +// long getClusterId() { +// return cluster; +// } +// @Override +// Value_ getValue(ResourceImpl self) { +// Value_ value = null; +// if (null != original) +// value = original.getValue(); +// return session.getValue(self.id, value); +// } +// @Override +// int getNumberOfRelations(ResourceImpl self) { +// int n = 0; +// if (null != original) +// n = original.getNumberOfRelations(); +// n += session.getNumberOfAddedRelations(self.id); +// n -= session.getNumberOfRemovedRelations(self.id); +// return n; +// } +// @Override +// StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException { +// StatementImpl[] stms = StatementImpl.NONE; +// if (null != original) +// stms = original.getStatements(); +// return session.getStatements(self.id, stms); +// } +// @Override +// boolean isModified() { +// return false; +// } +// @Override +// void addValue(ResourceImpl self, Value_ value) { +// throw new Error("Not allowed"); +// } +// @Override +// void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) { +// throw new Error("Not allowed"); +// } +// @Override +// void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) { +// throw new Error("Not allowed"); +// } +//} +// +//class ResourceImplClusterNew extends ResourceImplAbstract { +// //private Cluster clusterOld; +// private final long id; +// private org.simantics.db.procore.cluster.Cluster cluster; +// protected Cluster getCluster() { +// throw new Error("No can do."); +// } +// ResourceImplClusterNew(long id, org.simantics.db.procore.cluster.Cluster cluster) { +// this.id = id; +// this.cluster = cluster; +// } +// final org.simantics.db.procore.cluster.Cluster getClusterNew() { +// return cluster; +// } +// void setCluster(Cluster c) { +// throw new Error("No can do."); +// } +// @Override +// void init(ResourceImpl self) { +// } +// @Override +// void dispose() { +// } +// @Override +// long getClusterId() { +// return cluster.getId(); +// } +// @Override +// Value_ getValue(ResourceImpl self) { +// byte[] value = cluster.getValue(id); +// return new Zany(value); +// } +// protected void setValue(Value_ value) { +// throw new Error("No can do."); +// } +// void moveValue() { +// throw new Error("No can do."); +// } +// void removeValue() { +// throw new Error("No can do."); +// } +// void addValue(ResourceImpl self, Value_ value) { // TODO: Remove return value, inefficient. +// throw new Error("No can do."); +// } +// @Override +// void addRelation(ResourceImpl self, long predicate, long predicateCluster, +// long object, long objectCluster) { +// throw new Error("No can do."); +// } +// @Override +// int getNumberOfRelations(ResourceImpl self) { +// throw new Error("No can do."); +// } +// @Override +// StatementImpl[] getStatements(ResourceImpl self) { +// throw new Error("No can do."); +// } +// @Override +// boolean isModified() { +// throw new Error("No can do."); +// } +// @Override +// void removeRelation(long predicate, long predicateCluster, long object, +// long objectCluster) throws StatementNotFoundException { +// throw new Error("No can do."); +// } +//}