X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.mapping%2Fsrc%2Forg%2Fsimantics%2Fmapping%2Fconstraint%2Finstructions%2FTypedBracketInstruction.java;h=8669e530c82b88a63239402b37eaa9725bfb0c62;hp=b56284e57d089e3a6bc56afcf280b9217dccede3;hb=refs%2Fchanges%2F38%2F238%2F2;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.mapping/src/org/simantics/mapping/constraint/instructions/TypedBracketInstruction.java b/bundles/org.simantics.mapping/src/org/simantics/mapping/constraint/instructions/TypedBracketInstruction.java index b56284e57..8669e530c 100644 --- a/bundles/org.simantics.mapping/src/org/simantics/mapping/constraint/instructions/TypedBracketInstruction.java +++ b/bundles/org.simantics.mapping/src/org/simantics/mapping/constraint/instructions/TypedBracketInstruction.java @@ -1,152 +1,152 @@ -/******************************************************************************* - * 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 org.simantics.mapping.constraint.instructions; - -import gnu.trove.map.hash.TIntIntHashMap; -import gnu.trove.set.hash.TIntHashSet; - -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.WriteGraph; -import org.simantics.db.common.utils.NameUtils; -import org.simantics.db.exception.DatabaseException; -import org.simantics.mapping.IContextualModification; - -public class TypedBracketInstruction implements IInstruction { - - public static abstract class CreationInstruction { - protected int variableId; - - public CreationInstruction(int variableId) { - this.variableId = variableId; - } - - public abstract Resource create(WriteGraph g, Object[] bindings) throws DatabaseException; - - public void mapVariables(TIntIntHashMap map) { - variableId = map.get(variableId); - } - - public void collectVariables(TIntHashSet reads, TIntHashSet writes) { - } - } - - IInstruction instruction; - CreationInstruction[] variables; - - public TypedBracketInstruction(IInstruction instruction, CreationInstruction ... variables) { - this.instruction = instruction; - this.variables = variables; - } - - @Override - public void collectVariables(TIntHashSet reads, TIntHashSet writes) { - instruction.collectVariables(reads, writes); - for(CreationInstruction var : variables) - var.collectVariables(reads, writes); - } - - class Claim implements IContextualModification { - - public Claim() { - } - - @Override - public void perform(WriteGraph g, Object[] bindings) throws DatabaseException { - for(CreationInstruction var : variables) { - bindings[var.variableId] = var.create(g, bindings); - if(DEBUG) - System.out.println("@ newResource " + NameUtils.getSafeName(g, (Resource)bindings[var.variableId])); - } - instruction.doClaim(g, bindings); - } - } - - @Override - public IContextualModification claim(ReadGraph g, Object[] bindings) throws DatabaseException { - if(instruction.query(g, bindings)==IInstruction.FAILURE) - return new Claim(); - return null; - } - - class Deny implements IContextualModification { - Object continuation; - - public Deny(Object continuation) { - this.continuation = continuation; - } - - @Override - public void perform(WriteGraph g, Object[] bindings) throws DatabaseException { - do { - for(CreationInstruction var : variables) - g.deny((Resource)bindings[var.variableId]); - continuation = instruction.next(g, bindings, continuation); - } while(continuation != null && continuation != IInstruction.FAILURE); - } - } - - @Override - public IContextualModification deny(ReadGraph g, Object[] bindings) throws DatabaseException { - Object continuation = instruction.query(g, bindings); - if(continuation != IInstruction.FAILURE) - return new Deny(continuation); - return null; - } - - @Override - public void doClaim(WriteGraph g, Object[] bindings) throws DatabaseException { - if(instruction.query(g, bindings)==IInstruction.FAILURE) { - for(CreationInstruction var : variables) { - bindings[var.variableId] = var.create(g, bindings); - if(DEBUG) - System.out.println("@ newResource " + NameUtils.getSafeName(g, (Resource)bindings[var.variableId])); - } - instruction.doClaim(g, bindings); - } - } - - @Override - public void doDeny(WriteGraph g, Object[] bindings) throws DatabaseException { - Object continuation = instruction.query(g, bindings); - if(continuation != IInstruction.FAILURE) - do { - for(CreationInstruction var : variables) - g.deny((Resource)bindings[var.variableId]); - continuation = instruction.next(g, bindings, continuation); - } while(continuation != null && continuation != IInstruction.FAILURE); - } - - @Override - public void mapVariables(TIntIntHashMap map) { - instruction.mapVariables(map); - for(int i=0;i