]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ResourceImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / ResourceImpl.java
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
new file mode 100644 (file)
index 0000000..03cde32
--- /dev/null
@@ -0,0 +1,436 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package fi.vtt.simantics.procore.internal;\r
+\r
+\r
+\r
+//public abstract class ResourceImpl implements Resource {\r
+//    public final static ResourceImpl[] NONE = new ResourceImpl[0];\r
+//}\r
+\r
+//class ResourceProxy {\r
+//    private final int offset;\r
+//    private final int size;\r
+//    private WeakReference<ResourceImpl> weakResource = null; \r
+//    private ResourceImplModified modifiedResourceImpl = null;\r
+//    private Value_ value;\r
+//    ResourceProxy(int offset, int size) {\r
+//        this.offset = offset;\r
+//        this.size = size;\r
+//    }\r
+//    boolean isNew() {\r
+//        return 0 == size;\r
+//    }\r
+//    private ResourceImpl getResourceImplModified(Cluster cluster, long subject) {\r
+//        ResourceImpl r;\r
+//        if (null == weakResource || null == (r = weakResource.get())) {\r
+//            if (null == modifiedResourceImpl)\r
+//                modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value);\r
+//            r = new ResourceImpl(subject, modifiedResourceImpl);\r
+//            weakResource = new WeakReference<ResourceImpl>(r); \r
+//        } else if (!r.isModified()) {\r
+//            if (null == modifiedResourceImpl)\r
+//                modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value);\r
+//            r.setImpl(modifiedResourceImpl);\r
+//        }\r
+//        return r;\r
+//    }\r
+//    void setValue(Value_ value) {\r
+//        this.value = value;\r
+//    }\r
+//    ResourceImpl addRelation(Cluster cluster, long subject, long predicate, long predicateCluster, long object, long objectCluster) {\r
+//        ResourceImpl r = getResourceImplModified(cluster, subject);\r
+//        return r.addRelation(predicate, predicateCluster, object, objectCluster);\r
+//    }\r
+//    void removeRelation(Cluster cluster, long subject, long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException {\r
+//        ResourceImpl r = getResourceImplModified(cluster, subject);\r
+//        r.removeRelation(predicate, predicateCluster, object, objectCluster);\r
+//    }\r
+//    ResourceImpl getResource(Cluster cluster, long id) {\r
+//        ResourceImpl r;\r
+//        if (null != weakResource) {\r
+//            r = weakResource.get();\r
+//            if (null != r)\r
+//                return r;\r
+//        }\r
+//        if (isNew()) {\r
+//            if (null == modifiedResourceImpl)\r
+//                modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value);\r
+//            r = new ResourceImpl(id, modifiedResourceImpl);\r
+//        } else\r
+//            r = new ResourceImpl(id, new ResourceImplFixed(cluster, offset, size, value));\r
+//        weakResource = new WeakReference<ResourceImpl>(r); \r
+//        return r;\r
+//    }\r
+//    ResourceImpl getResourceImpl(long id, ResourceImplModified impl) {\r
+//        ResourceImpl r;\r
+//        assert(null == modifiedResourceImpl);\r
+//        assert(null == weakResource);\r
+//        modifiedResourceImpl = impl;\r
+//        r = new ResourceImpl(id, impl);\r
+//        weakResource = new WeakReference<ResourceImpl>(r); \r
+//        return r;\r
+//    }\r
+//    void release() {\r
+//        if (null == weakResource)\r
+//            return;\r
+//        weakResource = null;\r
+//        modifiedResourceImpl = null;\r
+//    }\r
+//}\r
+//\r
+//abstract class ResourceImplAbstract {\r
+//    abstract void init(ResourceImpl self);\r
+//    abstract void dispose();\r
+//    abstract Value_ getValue(ResourceImpl self);\r
+//    abstract long getClusterId();\r
+//    abstract boolean isModified();\r
+//    abstract int getNumberOfRelations(ResourceImpl self);\r
+//    abstract StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException;\r
+//    abstract void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster);\r
+//    abstract void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException;\r
+//    abstract void addValue(ResourceImpl self, Value_ value); // TODO: Remove return value, inefficient.\r
+//}\r
+//\r
+//abstract class ResourceImplCluster extends ResourceImplAbstract {\r
+//    private Cluster cluster;\r
+//    protected Value_ value;\r
+//    protected Value_ valueOld = null;\r
+//    protected Cluster getCluster() {\r
+//        return cluster;\r
+//    }\r
+//    ResourceImplCluster(Cluster cluster) {\r
+//        this.cluster = cluster;\r
+//        cluster.incReferenceCount();\r
+//    }\r
+//    void setCluster(Cluster c) {\r
+//        this.cluster = c;\r
+//    }\r
+//    @Override\r
+//    void init(ResourceImpl self) {\r
+//    }\r
+//    @Override\r
+//    void dispose() {\r
+//        cluster.decReferenceCount();\r
+//    }\r
+//    @Override\r
+//    long getClusterId() {\r
+//        return cluster.getId();\r
+//    }\r
+//    @Override\r
+//    Value_ getValue(ResourceImpl self) {\r
+//        return value;\r
+//    }\r
+//    protected void setValue(Value_ value) {\r
+//        this.value = this.valueOld = value;\r
+//    }\r
+//    void moveValue() {\r
+//        valueOld = value;\r
+//    }\r
+//    void removeValue() {\r
+//        value = valueOld;\r
+//    }\r
+//    void addValue(ResourceImpl self, Value_ value) { // TODO: Remove return value, inefficient.\r
+//        this.value = value;\r
+//    }\r
+//}\r
+//\r
+//class ResourceImplFixed extends ResourceImplCluster {\r
+//    final int fixedOffset;\r
+//    final int fixedSize;\r
+//    public ResourceImplFixed(Cluster cluster, int offset, int size, Value_ value) {\r
+//        super(cluster);\r
+//        this.fixedOffset = offset;\r
+//        this.fixedSize = size;\r
+//        setValue(value);\r
+//    }\r
+//    @Override\r
+//    int getNumberOfRelations(ResourceImpl self) {\r
+//        return fixedSize;\r
+//    }\r
+//    @Override\r
+//    StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException {\r
+//        StatementImpl[] stms = new StatementImpl[fixedSize];\r
+//        GraphSession gs = this.getCluster().client;\r
+//        int end = fixedOffset + fixedSize;\r
+//        for (int i=fixedOffset, j=0; i<end; ++i, ++j) {\r
+//            ResourceImpl p = gs.getResourceOrThrow(getCluster().raw.predicates[i], getCluster().raw.predicateClusters[i]);\r
+//            stms[j] = new StatementImplNew(self, p, getCluster().raw.objects[i], getCluster().raw.objectClusters[i], gs);\r
+////            ResourceImpl o = gs.getResourceOrThrow(getCluster().raw.objects[i], getCluster().raw.objectClusters[i]);\r
+////            stms[j] = new StatementImplOld(self, p, o);\r
+//        }\r
+//        return stms;\r
+//    }\r
+//    @Override\r
+//    boolean isModified() {\r
+//        return false;\r
+//    }\r
+//    @Override\r
+//    void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) {\r
+//        throw new Error("Not allowed");\r
+//    }\r
+//    @Override\r
+//    void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) {\r
+//        throw new Error("Not allowed");\r
+//    }\r
+//}\r
+//\r
+//class ResourceImplModifiedStatement {\r
+//    long predicate;\r
+//    long predicateCluster;\r
+//    long object;\r
+//    long objectCluster;\r
+//    ResourceImplModifiedStatement(long predicate, long predicateCluster, long object, long objectCluster) {\r
+//        this.predicate = predicate;\r
+//        this.predicateCluster = predicateCluster;\r
+//        this.object = object;\r
+//        this.objectCluster = objectCluster;\r
+//    }\r
+//    @Override\r
+//    public int hashCode() {\r
+//        return (int)(object^(object>>32)^predicate^(predicate>>>32));\r
+//    }\r
+//    @Override\r
+//    public boolean equals(Object obj) {\r
+//        if (this == obj)\r
+//            return true;\r
+//        else if (obj == null)\r
+//            return false;\r
+//        else if (ResourceImplModifiedStatement.class != obj.getClass())\r
+//            return false;\r
+//        ResourceImplModifiedStatement d = (ResourceImplModifiedStatement)obj;\r
+//        return (d.object == object) && (d.predicate == predicate);\r
+//    }\r
+//}\r
+//\r
+//class ResourceImplModified extends ResourceImplCluster {\r
+//    static ResourceImplModifiedStatement findStatement = new ResourceImplModifiedStatement(0, 0, 0, 0);\r
+//    THashSet<ResourceImplModifiedStatement> statements = new THashSet<ResourceImplModifiedStatement>();\r
+//    THashSet<ResourceImplModifiedStatement> reclusteringStatements = new THashSet<ResourceImplModifiedStatement>();\r
+//    public ResourceImplModified(Cluster cluster, int offset, int size, Value_ value) {\r
+//        super(cluster);\r
+//        setValue(value);\r
+//        statements.ensureCapacity(size);\r
+//        for (int i=0,j=offset; i<size; ++i,++j) {\r
+//            assert(Constants.ReservedClusterId != cluster.raw.predicateClusters[j]);\r
+//            assert(Constants.ReservedClusterId != cluster.raw.objectClusters[j]);\r
+//            statements.add(new ResourceImplModifiedStatement(cluster.raw.predicates[j], cluster.raw.predicateClusters[j], cluster.raw.objects[j], cluster.raw.objectClusters[j]));\r
+//        }\r
+//    }\r
+//    void moveStatements(HashMap<Long, Long> oldResourceIdToNewClusterIdMap) {\r
+//        for (ResourceImplModifiedStatement s : reclusteringStatements) {\r
+//            statements.remove(s);\r
+//            if (Constants.ReservedClusterId == s.predicateCluster)\r
+//                s.predicateCluster = oldResourceIdToNewClusterIdMap.get(s.predicate);\r
+//            if (Constants.ReservedClusterId == s.objectCluster)\r
+//                s.objectCluster = oldResourceIdToNewClusterIdMap.get(s.object);\r
+//            statements.add(s);\r
+//        }\r
+//        reclusteringStatements.clear();\r
+//    }\r
+//\r
+//    void removeStatements() {\r
+//        for (ResourceImplModifiedStatement s : reclusteringStatements) {\r
+//            statements.remove(s);\r
+//        }\r
+//        reclusteringStatements.clear();\r
+//    }\r
+//\r
+//    @Override\r
+//    int getNumberOfRelations(ResourceImpl self) {\r
+//        return statements.size();\r
+//    }\r
+//    @Override\r
+//    boolean isModified() {\r
+//        return true; // HACK: This is not necessarily true. In creation no modifications given and modifications can cancel each other out.\r
+//    }\r
+//    @Override\r
+//    StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException {\r
+//        int size = statements.size();\r
+//        StatementImpl[] stms = new StatementImpl[size];\r
+//        GraphSession gs = getCluster().client;\r
+//        int i = -1;\r
+//        for (ResourceImplModifiedStatement s : statements) {\r
+//            ResourceImpl p;\r
+//            if (Constants.ReservedClusterId == s.predicateCluster)\r
+//                p = this.getCluster().getResourceReservedOrThrow(Constants.ReservedClusterId, s.predicate);\r
+//            else\r
+//                p = gs.getResourceOrThrow(s.predicate, s.predicateCluster);\r
+//            if (Constants.ReservedClusterId == s.objectCluster) {\r
+//                ResourceImpl o = this.getCluster().getResourceReservedOrThrow(Constants.ReservedClusterId, s.object);\r
+//                stms[++i] = new StatementImplOld(self, p, o);\r
+//            } else\r
+//                stms[++i] = new StatementImplNew(self, p, s.object, s.objectCluster, gs);\r
+//        }\r
+//        return stms;\r
+//    }\r
+//    private boolean find(long predicate, long predicateCluster, long object, long objectCluster) {\r
+//        findStatement.predicate = predicate;\r
+//        findStatement.predicateCluster = predicateCluster;\r
+//        findStatement.object = object;\r
+//        findStatement.objectCluster = objectCluster;\r
+//        return statements.contains(findStatement);\r
+//    }\r
+//    @Override\r
+//    void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) {\r
+//        if (find(predicate, predicateCluster, object, objectCluster))\r
+//            return;\r
+//        //System.out.println(self + "." + getNumberOfRelations(self) + ": " + predicate + "." + predicateCluster + " " + object + "." + objectCluster);\r
+//        ResourceImplModifiedStatement s = new ResourceImplModifiedStatement(predicate, predicateCluster, object, objectCluster);\r
+//        statements.add(s);\r
+//        if (Constants.ReservedClusterId == predicateCluster ||\r
+//                Constants.ReservedClusterId == objectCluster) {\r
+//            reclusteringStatements.add(s);\r
+//            getCluster().addModifiedResource(self);\r
+//        }\r
+//    }\r
+//    @Override\r
+//    void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException {\r
+//        findStatement.predicate = predicate;\r
+//        findStatement.predicateCluster = predicateCluster;\r
+//        findStatement.object = object;\r
+//        findStatement.objectCluster = objectCluster;\r
+//        if (!statements.remove(findStatement))\r
+//            throw new StatementNotFoundException();\r
+//        reclusteringStatements.remove(findStatement);\r
+//    }\r
+//}\r
+//\r
+//class ResourceImplChangeSet extends ResourceImplAbstract {\r
+//    private SessionImplHistorical session;\r
+//    private long cluster;\r
+//    private ResourceImpl original;\r
+//    public ResourceImplChangeSet(SessionImplHistorical session, long cluster) {\r
+//        this.session = session;\r
+//        this.cluster = cluster;\r
+//    }\r
+//    @Override\r
+//    void init(ResourceImpl self) {\r
+//        Cluster c = session.getCluster(cluster);\r
+//        if (null != c)\r
+//            this.original = c.getResource(self.id);\r
+//    }\r
+//    @Override\r
+//    void dispose() {\r
+//    }\r
+//    @Override\r
+//    long getClusterId() {\r
+//        return cluster;\r
+//    }\r
+//    @Override\r
+//    Value_ getValue(ResourceImpl self) {\r
+//        Value_ value = null;\r
+//        if (null != original)\r
+//            value = original.getValue();\r
+//        return session.getValue(self.id, value);\r
+//    }\r
+//    @Override\r
+//    int getNumberOfRelations(ResourceImpl self) {\r
+//        int n = 0;\r
+//        if (null != original)\r
+//            n = original.getNumberOfRelations();\r
+//        n += session.getNumberOfAddedRelations(self.id);\r
+//        n -= session.getNumberOfRemovedRelations(self.id);\r
+//        return n;\r
+//    }\r
+//    @Override\r
+//    StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException {\r
+//        StatementImpl[] stms = StatementImpl.NONE;\r
+//        if (null != original)\r
+//            stms = original.getStatements();\r
+//        return session.getStatements(self.id, stms);\r
+//    }\r
+//    @Override\r
+//    boolean isModified() {\r
+//        return false;\r
+//    }\r
+//    @Override\r
+//    void addValue(ResourceImpl self, Value_ value) {\r
+//        throw new Error("Not allowed");\r
+//    }\r
+//    @Override\r
+//    void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) {\r
+//        throw new Error("Not allowed");\r
+//    }\r
+//    @Override\r
+//    void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) {\r
+//        throw new Error("Not allowed");\r
+//    }\r
+//}\r
+//\r
+//class ResourceImplClusterNew extends ResourceImplAbstract {\r
+//    //private Cluster clusterOld;\r
+//     private final long id;\r
+//    private org.simantics.db.procore.cluster.Cluster cluster;\r
+//    protected Cluster getCluster() {\r
+//        throw new Error("No can do.");\r
+//    }\r
+//    ResourceImplClusterNew(long id, org.simantics.db.procore.cluster.Cluster cluster) {\r
+//        this.id = id;\r
+//        this.cluster = cluster;\r
+//    }\r
+//    final org.simantics.db.procore.cluster.Cluster getClusterNew() {\r
+//     return cluster;\r
+//    }\r
+//    void setCluster(Cluster c) {\r
+//        throw new Error("No can do.");\r
+//    }\r
+//    @Override\r
+//    void init(ResourceImpl self) {\r
+//    }\r
+//    @Override\r
+//    void dispose() {\r
+//    }\r
+//    @Override\r
+//    long getClusterId() {\r
+//        return cluster.getId();\r
+//    }\r
+//    @Override\r
+//    Value_ getValue(ResourceImpl self) {\r
+//     byte[] value = cluster.getValue(id);\r
+//     return new Zany(value);\r
+//    }\r
+//    protected void setValue(Value_ value) {\r
+//     throw new Error("No can do.");\r
+//    }\r
+//    void moveValue() {\r
+//     throw new Error("No can do.");\r
+//    }\r
+//    void removeValue() {\r
+//     throw new Error("No can do.");\r
+//    }\r
+//    void addValue(ResourceImpl self, Value_ value) { // TODO: Remove return value, inefficient.\r
+//     throw new Error("No can do.");\r
+//    }\r
+//     @Override\r
+//     void addRelation(ResourceImpl self, long predicate, long predicateCluster,\r
+//                     long object, long objectCluster) {\r
+//             throw new Error("No can do.");\r
+//     }\r
+//     @Override\r
+//     int getNumberOfRelations(ResourceImpl self) {\r
+//             throw new Error("No can do.");\r
+//     }\r
+//     @Override\r
+//     StatementImpl[] getStatements(ResourceImpl self) {\r
+//             throw new Error("No can do.");\r
+//     }\r
+//     @Override\r
+//     boolean isModified() {\r
+//             throw new Error("No can do.");\r
+//     }\r
+//     @Override\r
+//     void removeRelation(long predicate, long predicateCluster, long object,\r
+//                     long objectCluster) throws StatementNotFoundException {\r
+//             throw new Error("No can do.");\r
+//     }\r
+//}\r