import java.util.ArrayList;
import java.util.Collection;
+import org.simantics.browsing.ui.model.tests.Test;
import org.simantics.databoard.Bindings;
import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
Collection<Resource> result = new ArrayList<Resource>();
for(Resource contribution : query.find(graph, parameter)) {
Resource type = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasType);
- if(type == null) continue;
- if(graph.isInstanceOf(parameter2, type)) {
- Resource context = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasActionBrowseContext);
- if(context == null) continue;
- String[] allowedContexts = graph.getPossibleRelatedValue(contribution, VP.ActionBrowseContextContribution_allowedUIContexts, Bindings.STRING_ARRAY);
- if(allowedContexts != null)
- if(!Arrays.contains(allowedContexts, parameter3))
- continue;
- result.add(context);
+ if(type != null) {
+ if(!graph.isInstanceOf(parameter2, type)) continue;
}
+ Resource testResource = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasTest);
+ if(testResource != null) {
+ Test test = graph.getPossibleAdapter(testResource, Test.class);
+ if(test != null) {
+ if(!test.test(graph, parameter2)) continue;
+ }
+ }
+
+ Resource context = graph.getPossibleObject(contribution, VP.ActionBrowseContextContribution_HasActionBrowseContext);
+ if(context == null) continue;
+ String[] allowedContexts = graph.getPossibleRelatedValue(contribution, VP.ActionBrowseContextContribution_allowedUIContexts, Bindings.STRING_ARRAY);
+ if(allowedContexts != null)
+ if(!Arrays.contains(allowedContexts, parameter3))
+ continue;
+ result.add(context);
+
}
return result;
*******************************************************************************/
package org.simantics.db.common.request;
-import org.simantics.db.AsyncRequestProcessor;
-import org.simantics.db.RequestProcessor;
-import org.simantics.db.exception.DatabaseException;
-import org.simantics.db.procedure.AsyncListener;
-import org.simantics.db.procedure.AsyncProcedure;
-import org.simantics.db.procedure.Listener;
-import org.simantics.db.procedure.Procedure;
-import org.simantics.db.procedure.SyncListener;
-import org.simantics.db.procedure.SyncProcedure;
-import org.simantics.db.request.Read;
-import org.simantics.db.request.ReadInterface;
-
-public abstract class GenericReadBase<P, R> implements Read<R>, ReadInterface<R> {
-
- @Override
- public void request(AsyncRequestProcessor processor, AsyncProcedure<R> procedure) {
- processor.asyncRequest(this, procedure);
- }
-
- @Override
- public void request(AsyncRequestProcessor processor, Procedure<R> procedure) {
- processor.asyncRequest(this, procedure);
- }
-
- @Override
- public void request(AsyncRequestProcessor processor, SyncProcedure<R> procedure) {
- processor.asyncRequest(this, procedure);
- }
-
- @Override
- public void request(AsyncRequestProcessor processor, AsyncListener<R> procedure) {
- processor.asyncRequest(this, procedure);
- }
-
- @Override
- public void request(AsyncRequestProcessor processor, Listener<R> procedure) {
- processor.asyncRequest(this, procedure);
- }
-
- @Override
- public void request(AsyncRequestProcessor processor, SyncListener<R> procedure) {
- processor.asyncRequest(this, procedure);
- }
-
- @Override
- public R request(RequestProcessor processor) throws DatabaseException {
- return processor.syncRequest(this);
- }
+public abstract class GenericReadBase<P, R> extends GenericReadBase2<R> {
}
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.db.common.request;
+
+import org.simantics.db.AsyncRequestProcessor;
+import org.simantics.db.RequestProcessor;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.procedure.AsyncListener;
+import org.simantics.db.procedure.AsyncProcedure;
+import org.simantics.db.procedure.Listener;
+import org.simantics.db.procedure.Procedure;
+import org.simantics.db.procedure.SyncListener;
+import org.simantics.db.procedure.SyncProcedure;
+import org.simantics.db.request.Read;
+import org.simantics.db.request.ReadInterface;
+
+public abstract class GenericReadBase2<R> implements Read<R>, ReadInterface<R> {
+
+ @Override
+ public void request(AsyncRequestProcessor processor, AsyncProcedure<R> procedure) {
+ processor.asyncRequest(this, procedure);
+ }
+
+ @Override
+ public void request(AsyncRequestProcessor processor, Procedure<R> procedure) {
+ processor.asyncRequest(this, procedure);
+ }
+
+ @Override
+ public void request(AsyncRequestProcessor processor, SyncProcedure<R> procedure) {
+ processor.asyncRequest(this, procedure);
+ }
+
+ @Override
+ public void request(AsyncRequestProcessor processor, AsyncListener<R> procedure) {
+ processor.asyncRequest(this, procedure);
+ }
+
+ @Override
+ public void request(AsyncRequestProcessor processor, Listener<R> procedure) {
+ processor.asyncRequest(this, procedure);
+ }
+
+ @Override
+ public void request(AsyncRequestProcessor processor, SyncListener<R> procedure) {
+ processor.asyncRequest(this, procedure);
+ }
+
+ @Override
+ public R request(RequestProcessor processor) throws DatabaseException {
+ return processor.syncRequest(this);
+ }
+
+}
--- /dev/null
+package org.simantics.db.common.request;
+
+public abstract class SingletonRead<R> extends GenericReadBase2<R> {
+
+ @Override
+ public boolean equals(Object arg0) {
+ if(arg0 == this) return true;
+ return getClass().equals(arg0.getClass());
+ }
+
+ @Override
+ public int hashCode() {
+ return getClass().hashCode();
+ }
+
+}
--- /dev/null
+package org.simantics.db.layer0.request;
+
+import java.util.Collection;
+
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.request.SingletonRead;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.util.Layer0Utils;
+
+/**
+ * Returns a set of index roots.
+ *
+ * @author Antti Villberg
+ */
+public class ListIndexRoots extends SingletonRead<Collection<Resource>> {
+
+ public ListIndexRoots() {
+ }
+
+ @Override
+ public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {
+ return Layer0Utils.listIndexRoots(graph);
+ }
+
+}
}
super.removedFromContext(ctx);
}
-
- @HintListener(Class = Selection.class, Field = "SELECTION0")
- public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {
- Iterable<?> selection = (Iterable<?>) newValue;
+
+ public void fireSelection(Iterable<?> selection) {
final ISelection s = constructAdaptableSelection(selection);
swt.asyncExec(new Runnable() {
@Override
});
}
+ @HintListener(Class = Selection.class, Field = "SELECTION0")
+ public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {
+ Iterable<?> selection = (Iterable<?>) newValue;
+ fireSelection(selection);
+ }
+
@HintListener(Class = Selection.class, Field = "SELECTION0")
public void hintRemoved(IHintObservable sender, Key key, Object oldValue) {
//System.out.println("selection removed: " + oldValue);
- final ISelection s = constructAdaptableSelection(Collections.emptyList());
- swt.asyncExec(new Runnable() {
- @Override
- public void run() {
- currentSelection = s;
- fireSelectionChanged(s);
- schedulePostSelectionChanged(s);
- }
- });
+ fireSelection(Collections.emptyList());
}
// Post selection changed scheduling helper.
MOD.SCLDropAction <T ACT.Action
--> MOD.SCLDropAction.action ==> "Resource -> Dynamic -> Integer -> <Proc> ()" <R L0.HasProperty : L0.FunctionalRelation
-MOD.SCLTest <T ACT.Action
+MOD.SCLTest <T VP.Test
--> MOD.SCLTest.test ==> "Resource -> <ReadGraph> Boolean" <R L0.HasProperty : L0.FunctionalRelation
// Legacy ModelingBrowseContext
ACTIONS.InstantiateUnder
@MOD.sclAction "instantiateUnderAction self"
+MOD.InstanceOfTest <T MOD.SCLTest
+ >-- MOD.InstanceOfTest.HasType --> L0.Type <R L0.IsRelatedTo : L0.TotalFunction
+ @MOD.sclAssertion MOD.SCLTest.test "instanceOfTest self" "Resource -> <Proc> Boolean"
+
+MOD.instanceOfTest : L0.Template
+ @template %test %type
+ %test : MOD.InstanceOfTest
+ MOD.InstanceOfTest.HasType %type
+
TESTS = MAC.Tests : L0.Library
TESTS.IsNotPublished
@MOD.sclTest "isNotPublished"
-import "Simantics/DB"
+import "Simantics/Variables"
import "Map" as Map
import "Simantics/Testing/BuiltinKeys"
importJava "org.simantics.browsing.ui.common.NodeContextBuilder" where
buildWithInput :: a -> <Proc> NodeContext
+instanceOfTest :: Variable -> <ReadGraph> (Resource -> <ReadGraph> Boolean)
+instanceOfTest self = do
+ typeResource = singleObject (represents $ parent self) MOD.InstanceOfTest.HasType
+ (\r -> isInstanceOf r typeResource)
*******************************************************************************/
package org.simantics.modeling.ui.diagramEditor;
+import java.util.Collections;
+
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
mon.worked(10);
END(task);
+ viewer.selectionProvider.fireSelection(Collections.emptyList());
+
// Zoom to fit if no previous view transform is available
task = BEGIN("DV.scheduleZoomToFit");
viewer.scheduleZoomToFit(diagram);
include "Simantics/UI"
include "Simantics/SelectionView"
include "Simantics/Formatting"
-include "Simantics/Action"
\ No newline at end of file
+include "Simantics/Action"
+include "Simantics/Testing/BrowseContext"
\ No newline at end of file
*******************************************************************************/
package org.simantics.modeling;
-import gnu.trove.set.hash.THashSet;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import org.simantics.db.Resource;
import org.simantics.db.WriteGraph;
import org.simantics.db.common.NamedResource;
-import org.simantics.db.common.request.ObjectsWithType;
import org.simantics.db.common.request.PossibleIndexRoot;
import org.simantics.db.common.utils.NameUtils;
import org.simantics.db.common.utils.VersionMap;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.layer0.adapter.Instances;
import org.simantics.db.layer0.request.ActiveModels;
+import org.simantics.db.layer0.request.ListIndexRoots;
import org.simantics.db.layer0.util.Layer0Utils;
import org.simantics.diagram.stubs.DiagramResource;
import org.simantics.layer0.Layer0;
import org.simantics.modeling.MigrateModel.MigrationOperation;
import org.simantics.modeling.migration.UserComponentPostMigrationAction;
-import org.simantics.simulation.ontology.SimulationResource;
import org.simantics.structural.stubs.StructuralResource2;
import org.simantics.utils.datastructures.MapList;
import org.simantics.utils.datastructures.Pair;
import org.simantics.utils.datastructures.Triple;
import org.simantics.utils.strings.AlphanumComparator;
+import gnu.trove.set.hash.THashSet;
+
/**
* @author Antti Villberg
* @author Tuukka Lehtonen
}
private static Collection<NamedResource> getLocations(ReadGraph graph, final Resource project) throws DatabaseException {
- Layer0 L0 = Layer0.getInstance(graph);
- SimulationResource SIMU = SimulationResource.getInstance(graph);
Collection<NamedResource> libraries = new ArrayList<>();
- for (Resource r : graph.syncRequest(new ObjectsWithType(project, L0.ConsistsOf, SIMU.Model))) {
- String name = Versions.getStandardNameString(graph, r);
- libraries.add(new NamedResource(name, r));
- }
- Collection<Resource> ontologies = Simantics.applySCL("Simantics/SharedOntologies", "traverseSharedOntologies", graph, graph.getRootLibrary());
- for (Resource r : ontologies) {
+ for (Resource r : graph.syncRequest(new ListIndexRoots())) {
String name = Versions.getStandardNameString(graph, r);
libraries.add(new NamedResource(name, r));
}
+// Collection<Resource> ontologies = Simantics.applySCL("Simantics/SharedOntologies", "traverseSharedOntologies", graph, graph.getRootLibrary());
+// for (Resource r : ontologies) {
+// String name = Versions.getStandardNameString(graph, r);
+// libraries.add(new NamedResource(name, r));
+// }
return libraries;
}
VP.ActionBrowseContextContribution <T L0.Entity
>-- VP.ActionBrowseContextContribution.HasType --> L0.Type <R L0.IsRelatedTo
+ >-- VP.ActionBrowseContextContribution.HasTest --> VP.Test <R L0.IsRelatedTo
>-- VP.ActionBrowseContextContribution.HasActionBrowseContext --> VP.BrowseContext <R L0.IsRelatedTo
>-- VP.ActionBrowseContextContribution.allowedUIContexts --> L0.StringArray <R L0.HasProperty : L0.FunctionalRelation