X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fgenericrelation%2Fcombinators%2FIntersection.java;h=f9218764bc8e316db281cf601b6d9a0d14c3f5ba;hb=bb019453a50630910de8e5f0b2992b1234dbd415;hp=24e085dceeb15780269775ee0dcbc3e26b59cab3;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/combinators/Intersection.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/combinators/Intersection.java index 24e085dce..f9218764b 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/combinators/Intersection.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/combinators/Intersection.java @@ -1,96 +1,96 @@ -/******************************************************************************* - * 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.db.layer0.genericrelation.combinators; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.simantics.db.ReadGraph; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.adapter.GenericRelation; -import org.simantics.db.layer0.genericrelation.AbstractRelation; -import org.simantics.utils.datastructures.Pair; - -/** - * Takes the intersection of multiple relations. - */ -public class Intersection extends AbstractRelation { - - GenericRelation realizable = null; - Collection constraints; - - public Intersection(Collection relations) { - for(GenericRelation relation : relations) - if(realizable == null && relation.isRealizable()) { - realizable = relation; - } - else - constraints.add(relation); - } - - public Intersection(GenericRelation realizable, Collection constraints) { - assert(realizable.isRealizable()); - this.realizable = realizable; - this.constraints = constraints; - } - - @Override - public boolean contains(ReadGraph g, Object[] tuple) throws DatabaseException { - if(!realizable.contains(g, tuple)) - return false; - for(GenericRelation relation : constraints) - if(!relation.contains(g, tuple)) - return false; - return true; - } - - @Override - public boolean isRealizable() { - return realizable != null; - } - - @Override - public List realize(ReadGraph g) throws DatabaseException { - ArrayList result = new ArrayList(); - loop: - for(Object[] tuple : realizable.realize(g)) { - for(GenericRelation constraint : constraints) - if(!constraint.contains(g, tuple)) - continue loop; - result.add(tuple); - } - return result; - } - - // TODO optimize select - - @Override - public GenericRelation selectByRelation(String bindingPattern, - GenericRelation constraint) { - if(realizable != null) - return new Intersection(realizable.selectByRelation(bindingPattern, constraint), - constraints); - else - return super.selectByRelation(bindingPattern, constraint); - } - - @Override - public Pair[] getFields() { - if(realizable != null) - return realizable.getFields(); - for(GenericRelation relation : constraints) - return relation.getFields(); - return null; - } - -} +/******************************************************************************* + * 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.db.layer0.genericrelation.combinators; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.GenericRelation; +import org.simantics.db.layer0.genericrelation.AbstractRelation; +import org.simantics.utils.datastructures.Pair; + +/** + * Takes the intersection of multiple relations. + */ +public class Intersection extends AbstractRelation { + + GenericRelation realizable = null; + Collection constraints; + + public Intersection(Collection relations) { + for(GenericRelation relation : relations) + if(realizable == null && relation.isRealizable()) { + realizable = relation; + } + else + constraints.add(relation); + } + + public Intersection(GenericRelation realizable, Collection constraints) { + assert(realizable.isRealizable()); + this.realizable = realizable; + this.constraints = constraints; + } + + @Override + public boolean contains(ReadGraph g, Object[] tuple) throws DatabaseException { + if(!realizable.contains(g, tuple)) + return false; + for(GenericRelation relation : constraints) + if(!relation.contains(g, tuple)) + return false; + return true; + } + + @Override + public boolean isRealizable() { + return realizable != null; + } + + @Override + public List realize(ReadGraph g) throws DatabaseException { + ArrayList result = new ArrayList(); + loop: + for(Object[] tuple : realizable.realize(g)) { + for(GenericRelation constraint : constraints) + if(!constraint.contains(g, tuple)) + continue loop; + result.add(tuple); + } + return result; + } + + // TODO optimize select + + @Override + public GenericRelation selectByRelation(String bindingPattern, + GenericRelation constraint) { + if(realizable != null) + return new Intersection(realizable.selectByRelation(bindingPattern, constraint), + constraints); + else + return super.selectByRelation(bindingPattern, constraint); + } + + @Override + public Pair[] getFields() { + if(realizable != null) + return realizable.getFields(); + for(GenericRelation relation : constraints) + return relation.getFields(); + return null; + } + +}