diff options
author | Ryan D. Brooks | 2020-06-27 03:46:35 +0000 |
---|---|---|
committer | Ryan D. Brooks | 2020-07-02 02:19:30 +0000 |
commit | 86ce20e66cd7264756647a511b7993d22b93dc7a (patch) | |
tree | 7357f63cefe4739a977cc247eb71961f268bf11e | |
parent | 828d11b91cd5fe1a49f13dd4310b4450f5b040c3 (diff) | |
download | org.eclipse.osee-86ce20e66cd7264756647a511b7993d22b93dc7a.tar.gz org.eclipse.osee-86ce20e66cd7264756647a511b7993d22b93dc7a.tar.xz org.eclipse.osee-86ce20e66cd7264756647a511b7993d22b93dc7a.zip |
feature[TW17487]: Add TupleQuery.getTuple2UniqueE1()
Change-Id: I10b03e72c65abd4f3d37566e7f1fc71680ff711f
5 files changed, 53 insertions, 30 deletions
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/data/AtsRelationTypes.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/data/AtsRelationTypes.java index a52dbcf2c41..6dbdcdabe6f 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/data/AtsRelationTypes.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/data/AtsRelationTypes.java @@ -45,11 +45,7 @@ import static org.eclipse.osee.framework.core.enums.RelationTypeMultiplicity.ONE import static org.eclipse.osee.framework.core.enums.RelationTypeMultiplicity.ONE_TO_ONE; import org.eclipse.osee.framework.core.data.RelationTypeSide; import org.eclipse.osee.framework.core.data.RelationTypeToken; -import org.eclipse.osee.framework.core.data.Tuple2Type; -import org.eclipse.osee.framework.core.data.TupleFamilyId; -import org.eclipse.osee.framework.core.data.TupleTypeId; import org.eclipse.osee.framework.core.enums.CoreRelationTypes; -import org.eclipse.osee.framework.core.enums.CoreTupleFamilyTypes; /** * @author Donald G. Dunne @@ -58,9 +54,6 @@ public interface AtsRelationTypes { //@formatter:off - // tuple relations - Tuple2Type<TupleFamilyId, TupleTypeId> WorkItem_To_WorkDefinition = Tuple2Type.valueOf(CoreTupleFamilyTypes.AttribueFamily, 1457L); - // relation links RelationTypeToken ActionToWorkflow = ats.add(2305843009213694317L, "ActionToWorkflow", ONE_TO_MANY, UNORDERED, Action, "Action", TeamWorkflow, "Team Workflow"); RelationTypeSide ActionToWorkflow_Action = RelationTypeSide.create(ActionToWorkflow, SIDE_A); diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/Tuple2Type.java b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/Tuple2Type.java index 3d2ccca4b95..ee2fecf2ea0 100644 --- a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/Tuple2Type.java +++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/Tuple2Type.java @@ -13,21 +13,36 @@ package org.eclipse.osee.framework.core.data; -import static org.eclipse.osee.framework.core.enums.CoreTupleFamilyTypes.DefaultFamily; +import java.util.function.Function; /** * @author Ryan D. Brooks */ public interface Tuple2Type<E1, E2> extends TupleTypeId { - public static <E1, E2> Tuple2Type<E1, E2> valueOf(TupleFamilyId family, Long tupleTypeId) { + Function<Long, E1> getValueOfE1(); + + Function<Long, E2> getValueOfE2(); + + public static <E1, E2> Tuple2Type<E1, E2> valueOf(TupleFamilyId family, Long tupleTypeId, Function<Long, E1> valueOfE1, Function<Long, E2> valueOfE2) { final class Tuple2TypeImpl extends TupleTypeImpl implements Tuple2Type<E1, E2> { - public Tuple2TypeImpl(TupleFamilyId family, Long tupleTypeId) { + private final Function<Long, E1> valueOfE1; + private final Function<Long, E2> valueOfE2; + + public Tuple2TypeImpl(TupleFamilyId family, Long tupleTypeId, Function<Long, E1> valueOfE1, Function<Long, E2> valueOfE2) { super(family, tupleTypeId); + this.valueOfE1 = valueOfE1; + this.valueOfE2 = valueOfE2; } - public Tuple2TypeImpl(Long tupleTypeId) { - super(tupleTypeId); + @Override + public Function<Long, E1> getValueOfE1() { + return valueOfE1; + } + + @Override + public Function<Long, E2> getValueOfE2() { + return valueOfE2; } @Override @@ -35,14 +50,6 @@ public interface Tuple2Type<E1, E2> extends TupleTypeId { return tupleTypeId; } } - return new Tuple2TypeImpl(family, tupleTypeId); - } - - public static <E1, E2> Tuple2Type<E1, E2> valueOf(Long tupleType) { - return valueOf(DefaultFamily, tupleType); - } - - public static <E1, E2> Tuple2Type<E1, E2> valueOf(String tupleType) { - return valueOf(DefaultFamily, Long.parseLong(tupleType)); + return new Tuple2TypeImpl(family, tupleTypeId, valueOfE1, valueOfE2); } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreTupleTypes.java b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreTupleTypes.java index 2415ee887c2..1e1ee73d902 100644 --- a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreTupleTypes.java +++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreTupleTypes.java @@ -31,13 +31,18 @@ import org.eclipse.osee.framework.core.data.TupleTypeImpl; */ public final class CoreTupleTypes { - public static final Tuple2Type<TupleFamilyId, TupleTypeId> TupleMetaType = Tuple2Type.valueOf(DefaultFamily, 1L); - public static final Tuple2Type<ArtifactId, String> ViewApplicability = Tuple2Type.valueOf(ProductLineFamily, 2L); - public static final Tuple2Type<Long, AttributeId> OseeTypeDef = Tuple2Type.valueOf(DefaultFamily, 4L); + public static final Tuple2Type<TupleFamilyId, TupleTypeId> TupleMetaType = + Tuple2Type.valueOf(DefaultFamily, 1L, TupleFamilyId::valueOf, TupleTypeId::valueOf); + public static final Tuple2Type<ArtifactId, String> ViewApplicability = + Tuple2Type.valueOf(ProductLineFamily, 2L, ArtifactId::valueOf, TupleTypeImpl.KeyedString); + public static final Tuple2Type<Long, AttributeId> OseeTypeDef = + Tuple2Type.valueOf(DefaultFamily, 4L, Function.identity(), AttributeId::valueOf); public static final Tuple2Type<ArtifactId, ApplicabilityId> ArtifactReferenceApplicabilityType = - Tuple2Type.valueOf(CoreTupleFamilyTypes.ProductLineFamily, 13L); - public static final Tuple2Type<BranchId, ArtifactId> BranchView = Tuple2Type.valueOf(ProductLineFamily, 11L); - public static final Tuple2Type<ArtifactId, ArtifactId> VersionConfig = Tuple2Type.valueOf(ProductLineFamily, 12L); + Tuple2Type.valueOf(CoreTupleFamilyTypes.ProductLineFamily, 13L, ArtifactId::valueOf, ApplicabilityId::valueOf); + public static final Tuple2Type<BranchId, ArtifactId> BranchView = + Tuple2Type.valueOf(ProductLineFamily, 11L, BranchId::valueOf, ArtifactId::valueOf); + public static final Tuple2Type<ArtifactId, ArtifactId> VersionConfig = + Tuple2Type.valueOf(ProductLineFamily, 12L, ArtifactId::valueOf, ArtifactId::valueOf); // Data Maintenance public static final Tuple3Type<String, Long, Long> FixedMaintenanceData = diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/engines/TupleQueryImpl.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/engines/TupleQueryImpl.java index ecf21ad958a..54eae773a70 100644 --- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/engines/TupleQueryImpl.java +++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/engines/TupleQueryImpl.java @@ -45,6 +45,9 @@ public class TupleQueryImpl implements TupleQuery { private static final String SELECT_E1_FROM_E2 = "select e1 from osee_txs txs, osee_tuple2 tp2 where tuple_type = ? and tp2.gamma_id = txs.gamma_id and branch_id = ? and tx_current = 1 and e2 = ?"; + private static final String SELECT_E1_UNIQUE = + "SELECT DISTINCT e1 FROM osee_tuple2 tp2, osee_txs txs where tuple_type = ? and tp2.gamma_id = txs.gamma_id and branch_id = ? and tx_current = 1"; + private static final String SELECT_E2_BY_TUPLE_TYPE = "select distinct e2, value from osee_txs txs, osee_tuple2 tp2, osee_key_value where tuple_type = ? and tp2.gamma_id = txs.gamma_id and branch_id = ? and tx_current = 1 and e2 = key"; @@ -110,6 +113,11 @@ public class TupleQueryImpl implements TupleQuery { } @Override + public <E1, E2> void getTuple2UniqueE1(Tuple2Type<E1, E2> tupleType, BranchId branchId, Consumer<E1> consumer) { + jdbcClient.runQuery(stmt -> consumer.accept(e1FromLong(tupleType, stmt)), SELECT_E1_UNIQUE, tupleType, branchId); + } + + @Override public <E1, E2> Iterable<Long> getTuple2E1ListRaw(Tuple2Type<E1, E2> tupleType, BranchId branchId, Long e2Raw) { List<Long> consumer = new ArrayList<>(); runQuery("e1", consumer, SELECT_E1_FROM_E2, tupleType, branchId, e2Raw); @@ -218,15 +226,23 @@ public class TupleQueryImpl implements TupleQuery { SELECT_TUPLE4_E2_E3_E4_FROM_E1, tupleType, toLong(e1), branchId); } - private <E> E fromLong(Function<Long, E> valueOfE1, JdbcStatement stmt, String column) { + private <E> E fromLong(Function<Long, E> valueOfElement, JdbcStatement stmt, String column) { Long rawValue = stmt.getLong(column); - if (valueOfE1 == TupleTypeImpl.KeyedString) { + if (valueOfElement == TupleTypeImpl.KeyedString) { return (E) keyValue.getByKey(rawValue); } else { - return valueOfE1.apply(rawValue); + return valueOfElement.apply(rawValue); } } + private <E1, E2> E1 e1FromLong(Tuple2Type<E1, E2> tupleType, JdbcStatement stmt) { + return fromLong(tupleType.getValueOfE1(), stmt, "e1"); + } + + private <E1, E2> E2 e2FromLong(Tuple2Type<E1, E2> tupleType, JdbcStatement stmt) { + return fromLong(tupleType.getValueOfE2(), stmt, "e2"); + } + private <E1, E2, E3> E1 e1FromLong(Tuple3Type<E1, E2, E3> tupleType, JdbcStatement stmt) { return fromLong(tupleType.getValueOfE1(), stmt, "e1"); } diff --git a/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/TupleQuery.java b/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/TupleQuery.java index e83fa30a498..c1b6ad917de 100644 --- a/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/TupleQuery.java +++ b/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/TupleQuery.java @@ -29,6 +29,8 @@ public interface TupleQuery { <E1, E2> Iterable<E2> getTuple2(Tuple2Type<E1, E2> tupleType, BranchId branchId, E1 e1); + <E1, E2> void getTuple2UniqueE1(Tuple2Type<E1, E2> tupleType, BranchId branchId, Consumer<E1> consumer); + <E1, E2> Iterable<Long> getTuple2Raw(Tuple2Type<E1, E2> tupleType, BranchId branchId, E1 e1); /** |