package org.simantics.diagram.profile.view; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.simantics.browsing.ui.swt.widgets.impl.ReadFactoryImpl; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.adapter.Instances; import org.simantics.diagram.stubs.DiagramResource; import org.simantics.layer0.Layer0; import org.simantics.utils.datastructures.Pair; public class AvailableProfiles extends ReadFactoryImpl>> { @Override public List> perform(ReadGraph graph, Resource runtimeDiagram) throws DatabaseException { Layer0 L0 = Layer0.getInstance(graph); DiagramResource DIA = DiagramResource.getInstance(graph); String modelURI = graph.getPossibleRelatedValue(runtimeDiagram, DIA.RuntimeDiagram_HasModelURI); if (modelURI == null) return Collections.emptyList(); Resource model = graph.getPossibleResource(modelURI); if (model == null) return Collections.emptyList(); Instances query = graph.adapt(DIA.Profile, Instances.class); ArrayList> result = new ArrayList>(); for(Resource profile : query.find(graph, model)) { if(!graph.hasStatement(profile, L0.Abstract)) { String name = graph.getRelatedValue(profile, L0.HasName, Bindings.STRING); result.add(new Pair(name, profile)); } } return result; } }