Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyan D. Brooks2020-06-27 03:46:35 +0000
committerRyan D. Brooks2020-07-02 02:19:30 +0000
commit86ce20e66cd7264756647a511b7993d22b93dc7a (patch)
tree7357f63cefe4739a977cc247eb71961f268bf11e
parent828d11b91cd5fe1a49f13dd4310b4450f5b040c3 (diff)
downloadorg.eclipse.osee-86ce20e66cd7264756647a511b7993d22b93dc7a.tar.gz
org.eclipse.osee-86ce20e66cd7264756647a511b7993d22b93dc7a.tar.xz
org.eclipse.osee-86ce20e66cd7264756647a511b7993d22b93dc7a.zip
feature[TW17487]: Add TupleQuery.getTuple2UniqueE1()
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/data/AtsRelationTypes.java7
-rw-r--r--plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/Tuple2Type.java35
-rw-r--r--plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreTupleTypes.java17
-rw-r--r--plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/engines/TupleQueryImpl.java22
-rw-r--r--plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/TupleQuery.java2
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);
/**

Back to the top