X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Ftechtype%2Fvariable%2FFunctions.java;h=d23a9a00e82a44212688bf2612ca45064594b6dc;hb=708dfb62d934f425087f983fecfea0f00c59840d;hp=beb92684693ba96a00f683712a5741c235ad8b8d;hpb=96d2122ccc3a7d3503d0bf2ab121eb8fd2186323;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network/src/org/simantics/district/network/techtype/variable/Functions.java b/org.simantics.district.network/src/org/simantics/district/network/techtype/variable/Functions.java index beb92684..d23a9a00 100644 --- a/org.simantics.district.network/src/org/simantics/district/network/techtype/variable/Functions.java +++ b/org.simantics.district.network/src/org/simantics/district/network/techtype/variable/Functions.java @@ -1,14 +1,23 @@ package org.simantics.district.network.techtype.variable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Map; + import org.simantics.databoard.binding.Binding; import org.simantics.databoard.type.Datatype; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; +import org.simantics.db.common.procedure.adapter.TransientCacheListener; +import org.simantics.db.common.request.PossibleIndexRoot; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.AbstractChildVariable; import org.simantics.db.layer0.variable.ValueAccessor; import org.simantics.db.layer0.variable.Variable; import org.simantics.district.network.techtype.TechTypeUtils; +import org.simantics.district.network.techtype.requests.PossibleTechTypeTable; +import org.simantics.district.network.techtype.requests.TechTypeTableData; import org.simantics.scl.reflection.annotations.SCLValue; import org.simantics.structural.stubs.StructuralResource2; @@ -56,4 +65,32 @@ public class Functions { TechTypeUtils.updateComponent(graph, component.getRepresents(graph)); } + + @SCLValue(type = "ReadGraph -> Resource -> a -> b") + public static Object techTypeKeys(ReadGraph graph, Resource resource, Object context) throws DatabaseException { + if (!(context instanceof Variable)) + return Collections.emptyList(); + + Variable var = (Variable)context; + // Typically 'var' is ##HasDisplayValue#HasEnumerationValues + // We want the component part + while (!(var instanceof AbstractChildVariable)) + var = var.getParent(graph); + + Resource type = var.getType(graph, StructuralResource2.getInstance(graph).Component); + Resource model = var.getIndexRoot(graph); + if (model == null) + return Collections.emptyList(); + Resource table = graph.syncRequest(new PossibleTechTypeTable(model , type), TransientCacheListener.instance()); + if (table == null) + return Collections.emptyList(); + + Map> data = graph.syncRequest(new TechTypeTableData(table, true), TransientCacheListener.instance()); + ArrayList result = new ArrayList(data.keySet()); + + // Sort so that all numbers are in growing order + result.sort(TechTypeUtils::compareNatural); + + return result; + } }