-package org.simantics.db.procore.cluster;\r
-\r
-import gnu.trove.set.hash.TIntHashSet;\r
-\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.impl.ClusterI;\r
-import org.simantics.db.impl.ClusterSupport;\r
-import org.simantics.db.impl.ClusterTraitsBase;\r
-import org.simantics.db.impl.Modifier;\r
-import org.simantics.db.impl.TableSizeListener;\r
-\r
-public class CompleteTableSmall extends CompleteTable {\r
- public CompleteTableSmall(TableSizeListener sizeListener, int[] header, int headerBase) {\r
- super(sizeListener, header, headerBase);\r
- }\r
- public CompleteTableSmall(TableSizeListener sizeListener, int[] header, int headerBase, int[] ints) {\r
- super(sizeListener, header, headerBase, ints);\r
- }\r
-\r
- @Override\r
- public <Context> boolean foreachPredicate(int setIndex,\r
- ClusterI.PredicateProcedure<Context> procedure,\r
- Context context, ClusterSupport support, Modifier modifier)\r
- throws DatabaseException {\r
- ForeachPredicate<Context> t = new ForeachPredicate<Context>(procedure, support, modifier);\r
- return foreachComplete(setIndex, t, context, null, null);\r
- }\r
-\r
- @Override\r
- public <Context> boolean foreachObject(int setIndex,\r
- ClusterI.ObjectProcedure<Context> procedure,\r
- Context context, ClusterSupport support, Modifier modifier,\r
- ClusterI.CompleteTypeEnum completeType)\r
- throws DatabaseException {\r
- ForeachObject<Context> t = new ForeachObject<Context>\r
- (procedure, support, modifier, completeType);\r
- return foreachComplete(setIndex, t, context, null, null);\r
- }\r
- \r
- private static final class ForeachPredicate<Context>\r
- implements ClusterI.ObjectProcedure<Context> {\r
- private TIntHashSet completeTypes = new TIntHashSet();\r
- private ClusterI.PredicateProcedure<Context> procedure; \r
- public ForeachPredicate(ClusterI.PredicateProcedure<Context>\r
- procedure, ClusterSupport support, Modifier modifier) {\r
- this.procedure = procedure;\r
- }\r
- @Override\r
- public boolean execute(Context context, int completeRef) {\r
- ClusterI.CompleteTypeEnum completeType = ClusterTraitsSmall.completeRefAndTypeGetType(completeRef);\r
- if (!completeTypes.contains(completeType.getValue())) {\r
- completeTypes.add(completeType.getValue());\r
- try {\r
- int pKey = ClusterTraitsBase.getCompleteTypeResourceKeyFromEnum(completeType);\r
- if (procedure.execute(context, pKey, 0))\r
- return true; // loop broken by procedure\r
- } catch (DatabaseException e) {\r
- e.printStackTrace();\r
- return false;\r
- }\r
- }\r
- return false; // Continue looping.\r
- }\r
- \r
- }\r
- private static class ForeachObject<Context>\r
- implements ClusterI.ObjectProcedure<Context> {\r
- private ClusterI.ObjectProcedure<Context> procedure; \r
- private Modifier modifier;\r
- private ClusterI.CompleteTypeEnum completeType;\r
- public ForeachObject(ClusterI.ObjectProcedure<Context>\r
- procedure, ClusterSupport support, Modifier modifier, ClusterI.CompleteTypeEnum completeType) {\r
- this.procedure = procedure;\r
- this.modifier = modifier;\r
- this.completeType = completeType;\r
- }\r
- @Override\r
- public boolean execute(Context context, int completeRef) throws DatabaseException {\r
- ClusterI.CompleteTypeEnum completeType2 = ClusterTraitsSmall.completeRefAndTypeGetType(completeRef);\r
- if (completeType == completeType2) { // same predicate\r
- int objectRef = ClusterTraitsSmall.completeRefAndTypeGetRef(completeRef);\r
- int externalRef;\r
- if (null == modifier)\r
- externalRef = objectRef;\r
- else\r
- externalRef = modifier.execute(objectRef);\r
- return procedure.execute(context, externalRef);\r
- }\r
- return false; // Continue looping.\r
- }\r
- \r
- }\r
-}\r
+package org.simantics.db.procore.cluster;
+
+import gnu.trove.set.hash.TIntHashSet;
+
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.impl.ClusterI;
+import org.simantics.db.impl.ClusterSupport;
+import org.simantics.db.impl.ClusterTraitsBase;
+import org.simantics.db.impl.Modifier;
+import org.simantics.db.impl.TableSizeListener;
+
+public class CompleteTableSmall extends CompleteTable {
+ public CompleteTableSmall(TableSizeListener sizeListener, int[] header, int headerBase) {
+ super(sizeListener, header, headerBase);
+ }
+ public CompleteTableSmall(TableSizeListener sizeListener, int[] header, int headerBase, int[] ints) {
+ super(sizeListener, header, headerBase, ints);
+ }
+
+ @Override
+ public <Context> boolean foreachPredicate(int setIndex,
+ ClusterI.PredicateProcedure<Context> procedure,
+ Context context, ClusterSupport support, Modifier modifier)
+ throws DatabaseException {
+ ForeachPredicate<Context> t = new ForeachPredicate<Context>(procedure, support, modifier);
+ return foreachComplete(setIndex, t, context, null, null);
+ }
+
+ @Override
+ public <Context> boolean foreachObject(int setIndex,
+ ClusterI.ObjectProcedure<Context> procedure,
+ Context context, ClusterSupport support, Modifier modifier,
+ ClusterI.CompleteTypeEnum completeType)
+ throws DatabaseException {
+ ForeachObject<Context> t = new ForeachObject<Context>
+ (procedure, support, modifier, completeType);
+ return foreachComplete(setIndex, t, context, null, null);
+ }
+
+ private static final class ForeachPredicate<Context>
+ implements ClusterI.ObjectProcedure<Context> {
+ private TIntHashSet completeTypes = new TIntHashSet();
+ private ClusterI.PredicateProcedure<Context> procedure;
+ public ForeachPredicate(ClusterI.PredicateProcedure<Context>
+ procedure, ClusterSupport support, Modifier modifier) {
+ this.procedure = procedure;
+ }
+ @Override
+ public boolean execute(Context context, int completeRef) {
+ ClusterI.CompleteTypeEnum completeType = ClusterTraitsSmall.completeRefAndTypeGetType(completeRef);
+ if (!completeTypes.contains(completeType.getValue())) {
+ completeTypes.add(completeType.getValue());
+ try {
+ int pKey = ClusterTraitsBase.getCompleteTypeResourceKeyFromEnum(completeType);
+ if (procedure.execute(context, pKey, 0))
+ return true; // loop broken by procedure
+ } catch (DatabaseException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ return false; // Continue looping.
+ }
+
+ }
+ private static class ForeachObject<Context>
+ implements ClusterI.ObjectProcedure<Context> {
+ private ClusterI.ObjectProcedure<Context> procedure;
+ private Modifier modifier;
+ private ClusterI.CompleteTypeEnum completeType;
+ public ForeachObject(ClusterI.ObjectProcedure<Context>
+ procedure, ClusterSupport support, Modifier modifier, ClusterI.CompleteTypeEnum completeType) {
+ this.procedure = procedure;
+ this.modifier = modifier;
+ this.completeType = completeType;
+ }
+ @Override
+ public boolean execute(Context context, int completeRef) throws DatabaseException {
+ ClusterI.CompleteTypeEnum completeType2 = ClusterTraitsSmall.completeRefAndTypeGetType(completeRef);
+ if (completeType == completeType2) { // same predicate
+ int objectRef = ClusterTraitsSmall.completeRefAndTypeGetRef(completeRef);
+ int externalRef;
+ if (null == modifier)
+ externalRef = objectRef;
+ else
+ externalRef = modifier.execute(objectRef);
+ return procedure.execute(context, externalRef);
+ }
+ return false; // Continue looping.
+ }
+
+ }
+}