-/*******************************************************************************\r
- * Copyright (c) 2007, 2011 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.event.view.contribution;\r
-\r
-import gnu.trove.map.hash.TObjectDoubleHashMap;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.Collections;\r
-import java.util.Comparator;\r
-import java.util.List;\r
-\r
-import org.simantics.browsing.ui.model.children.ChildRule;\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.request.ObjectsWithType;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.service.QueryControl;\r
-import org.simantics.event.ontology.EventResource;\r
-import org.simantics.event.view.Constants;\r
-import org.simantics.event.view.preference.EventPrefs;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.operation.Layer0X;\r
-import org.simantics.simulation.ontology.SimulationResource;\r
-\r
-/**\r
- * A child rule that looks for all event logs within the active models of a\r
- * project. The rule takes into account the preference setting for showing hidden\r
- * event logs.\r
- * \r
- * @author Tuukka Lehtonen\r
- */\r
-public enum ProjectEventsRule implements ChildRule {\r
-\r
- INSTANCE;\r
-\r
- public static ProjectEventsRule get() {\r
- return INSTANCE;\r
- }\r
-\r
- private static class Prefs {\r
- public final boolean hideInfoEvents;\r
- public final boolean hideWarningEvents;\r
- public final boolean hideReturnEvents;\r
- public final boolean showHiddenEvents;\r
- public final boolean showOnlyMilestones;\r
- public final boolean showOnlyActiveEvents;\r
- public Prefs(\r
- boolean hideInfoEvents,\r
- boolean hideWarningEvents,\r
- boolean hideReturnEvents,\r
- boolean showHiddenEvents,\r
- boolean showOnlyMilestones,\r
- boolean showOnlyActiveEvents) {\r
- this.hideInfoEvents = hideInfoEvents;\r
- this.hideWarningEvents = hideWarningEvents;\r
- this.hideReturnEvents = hideReturnEvents;\r
- this.showHiddenEvents = showHiddenEvents;\r
- this.showOnlyMilestones = showOnlyMilestones;\r
- this.showOnlyActiveEvents = showOnlyActiveEvents;\r
- }\r
-\r
- public static Prefs read(ReadGraph graph, Resource project) throws DatabaseException {\r
- return new Prefs(\r
- EventPrefs.hideInfoEvents(graph, project),\r
- EventPrefs.hideWarningEvents(graph, project),\r
- EventPrefs.hideReturnEvents(graph, project),\r
- EventPrefs.showHiddenEvents(graph, project),\r
- EventPrefs.showOnlyMilestones(graph, project),\r
- EventPrefs.showOnlyActiveEvents(graph, project));\r
- }\r
- }\r
-\r
- public Collection<?> getChildrenImpl(ReadGraph graph, Resource project, Prefs prefs, List<Resource> eventLogs) throws DatabaseException {\r
-\r
- Layer0 L0 = Layer0.getInstance(graph);\r
-\r
- EventResource EVENT = EventResource.getInstance(graph);\r
-\r
- final boolean hideInfoEvents = prefs.hideInfoEvents;\r
- final boolean hideWarningEvents = prefs.hideWarningEvents;\r
- final boolean hideReturnEvents = prefs.hideReturnEvents;\r
- final boolean showHiddenEvents = prefs.showHiddenEvents;\r
- final boolean showOnlyMilestones = prefs.showOnlyMilestones;\r
- final boolean showOnlyActiveEvents= prefs.showOnlyActiveEvents;\r
-\r
- ArrayList<Resource> allEvents = new ArrayList<Resource>();\r
- for (Resource log : eventLogs) {\r
- for (Resource slice : graph.getObjects(log, L0.ConsistsOf)) {\r
- Collection<Resource> events = graph.getObjects(slice, L0.ConsistsOf);\r
- allEvents.addAll(events);\r
- }\r
- }\r
-\r
- List<Object> result = new ArrayList<Object>();\r
- final TObjectDoubleHashMap<Object> times = new TObjectDoubleHashMap<Object>();\r
- final Double defaultTime = 0.0;\r
-\r
- for (Resource event : allEvents) {\r
- if (showOnlyMilestones) {\r
- boolean isMilestone = graph.hasStatement(event, EVENT.Milestone);\r
- if (!isMilestone)\r
- continue;\r
- }\r
-\r
- if (!showHiddenEvents && graph.hasStatement(event, EVENT.Hidden))\r
- continue;\r
-\r
- if (showOnlyActiveEvents\r
- && (graph.hasStatement(event, EVENT.Returns)\r
- || graph.hasStatement(event, EVENT.ReturnedBy)\r
- || graph.hasStatement(event, EVENT.NoReturn)))\r
- {\r
- continue;\r
- }\r
-\r
- // Skip return events if thus preferred.\r
- if (hideReturnEvents && graph.hasStatement(event, EVENT.ReturnEvent)) {\r
- if (graph.getPossibleObject(event, EVENT.Returns) != null)\r
- continue;\r
- }\r
-\r
- // Filter by event type severity\r
- Resource eventType = graph.getPossibleObject(event, EVENT.Event_type);\r
- if (eventType != null) {\r
- Integer severity = graph.getPossibleRelatedValue(eventType, EVENT.EventType_severity);\r
- if (severity != null) {\r
- if (hideInfoEvents && severity >= Constants.EVENT_SEVERITY_INFO\r
- && severity < (Constants.EVENT_SEVERITY_INFO + Constants.EVENT_SEVERITY_STEP))\r
- continue;\r
- if (hideWarningEvents && severity >= Constants.EVENT_SEVERITY_WARNING\r
- && severity < (Constants.EVENT_SEVERITY_WARNING + Constants.EVENT_SEVERITY_STEP))\r
- continue;\r
- }\r
- }\r
-\r
- double timeNumeric = EventLabelRule.getTimestamp(graph, event, defaultTime);\r
- times.put(event, timeNumeric);\r
- result.add(event);\r
- }\r
-\r
- Collections.sort(result, new Comparator<Object>() {\r
- @Override\r
- public int compare(Object o1, Object o2) {\r
- double t1 = times.get(o1);\r
- double t2 = times.get(o2);\r
- return Double.compare(t1, t2);\r
- }\r
- });\r
-\r
- return result;\r
-\r
- }\r
- \r
- @Override\r
- public Collection<?> getChildren(ReadGraph graph, Object parent) throws DatabaseException {\r
-\r
- Layer0X L0X = Layer0X.getInstance(graph);\r
- SimulationResource SIMU = SimulationResource.getInstance(graph);\r
- EventResource EVENT = EventResource.getInstance(graph);\r
-\r
- Resource project = (Resource) parent;\r
-\r
- List<Resource> eventLogs = new ArrayList<Resource>();\r
- for (Resource activeModel : graph.syncRequest(new ObjectsWithType(project, L0X.Activates, SIMU.Model))) {\r
- for (Resource eventLog : graph.syncRequest(new ObjectsWithType(activeModel, EVENT.HasEventLog, EVENT.EventLog))) {\r
- if (!graph.hasStatement(eventLog, EVENT.Hidden)) {\r
- eventLogs.add(eventLog);\r
- graph.getRelatedValue(eventLog, EVENT.HasModificationCounter, Bindings.INTEGER);\r
- }\r
- }\r
- }\r
-\r
- QueryControl qc = graph.getService(QueryControl.class);\r
-\r
- return getChildrenImpl(qc.getIndependentGraph(graph), project, Prefs.read(graph, project), eventLogs);\r
-\r
- }\r
-\r
- @Override\r
- public Collection<?> getParents(ReadGraph graph, Object child) throws DatabaseException {\r
- if (!(child instanceof Resource))\r
- return Collections.emptyList();\r
- Layer0 L0 = Layer0.getInstance(graph);\r
- return graph.getObjects((Resource) child, L0.PartOf);\r
- }\r
-\r
- @Override\r
- public boolean isCompatible(Class<?> contentType) {\r
- return contentType.equals(Resource.class);\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 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.event.view.contribution;
+
+import gnu.trove.map.hash.TObjectDoubleHashMap;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.simantics.browsing.ui.model.children.ChildRule;
+import org.simantics.databoard.Bindings;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.request.ObjectsWithType;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.service.QueryControl;
+import org.simantics.event.ontology.EventResource;
+import org.simantics.event.view.Constants;
+import org.simantics.event.view.preference.EventPrefs;
+import org.simantics.layer0.Layer0;
+import org.simantics.operation.Layer0X;
+import org.simantics.simulation.ontology.SimulationResource;
+
+/**
+ * A child rule that looks for all event logs within the active models of a
+ * project. The rule takes into account the preference setting for showing hidden
+ * event logs.
+ *
+ * @author Tuukka Lehtonen
+ */
+public enum ProjectEventsRule implements ChildRule {
+
+ INSTANCE;
+
+ public static ProjectEventsRule get() {
+ return INSTANCE;
+ }
+
+ private static class Prefs {
+ public final boolean hideInfoEvents;
+ public final boolean hideWarningEvents;
+ public final boolean hideReturnEvents;
+ public final boolean showHiddenEvents;
+ public final boolean showOnlyMilestones;
+ public final boolean showOnlyActiveEvents;
+ public Prefs(
+ boolean hideInfoEvents,
+ boolean hideWarningEvents,
+ boolean hideReturnEvents,
+ boolean showHiddenEvents,
+ boolean showOnlyMilestones,
+ boolean showOnlyActiveEvents) {
+ this.hideInfoEvents = hideInfoEvents;
+ this.hideWarningEvents = hideWarningEvents;
+ this.hideReturnEvents = hideReturnEvents;
+ this.showHiddenEvents = showHiddenEvents;
+ this.showOnlyMilestones = showOnlyMilestones;
+ this.showOnlyActiveEvents = showOnlyActiveEvents;
+ }
+
+ public static Prefs read(ReadGraph graph, Resource project) throws DatabaseException {
+ return new Prefs(
+ EventPrefs.hideInfoEvents(graph, project),
+ EventPrefs.hideWarningEvents(graph, project),
+ EventPrefs.hideReturnEvents(graph, project),
+ EventPrefs.showHiddenEvents(graph, project),
+ EventPrefs.showOnlyMilestones(graph, project),
+ EventPrefs.showOnlyActiveEvents(graph, project));
+ }
+ }
+
+ public Collection<?> getChildrenImpl(ReadGraph graph, Resource project, Prefs prefs, List<Resource> eventLogs) throws DatabaseException {
+
+ Layer0 L0 = Layer0.getInstance(graph);
+
+ EventResource EVENT = EventResource.getInstance(graph);
+
+ final boolean hideInfoEvents = prefs.hideInfoEvents;
+ final boolean hideWarningEvents = prefs.hideWarningEvents;
+ final boolean hideReturnEvents = prefs.hideReturnEvents;
+ final boolean showHiddenEvents = prefs.showHiddenEvents;
+ final boolean showOnlyMilestones = prefs.showOnlyMilestones;
+ final boolean showOnlyActiveEvents= prefs.showOnlyActiveEvents;
+
+ ArrayList<Resource> allEvents = new ArrayList<Resource>();
+ for (Resource log : eventLogs) {
+ for (Resource slice : graph.getObjects(log, L0.ConsistsOf)) {
+ Collection<Resource> events = graph.getObjects(slice, L0.ConsistsOf);
+ allEvents.addAll(events);
+ }
+ }
+
+ List<Object> result = new ArrayList<Object>();
+ final TObjectDoubleHashMap<Object> times = new TObjectDoubleHashMap<Object>();
+ final Double defaultTime = 0.0;
+
+ for (Resource event : allEvents) {
+ if (showOnlyMilestones) {
+ boolean isMilestone = graph.hasStatement(event, EVENT.Milestone);
+ if (!isMilestone)
+ continue;
+ }
+
+ if (!showHiddenEvents && graph.hasStatement(event, EVENT.Hidden))
+ continue;
+
+ boolean isReturnEvent = hideReturnEvents || showOnlyActiveEvents
+ ? graph.hasStatement(event, EVENT.ReturnEvent) : false;
+
+ // Skip all return events if thus preferred.
+ if (hideReturnEvents && isReturnEvent) {
+ continue;
+ }
+
+ // Skip all return events and starting events that have been returned,
+ // if thus preferred. Also skip events that are defined non-returnable.
+ if (showOnlyActiveEvents
+ && (isReturnEvent
+ || graph.hasStatement(event, EVENT.Returns)
+ || graph.hasStatement(event, EVENT.ReturnedBy)
+ || graph.hasStatement(event, EVENT.NoReturn)))
+ {
+ continue;
+ }
+
+ // Filter by event type severity
+ Resource eventType = graph.getPossibleObject(event, EVENT.Event_type);
+ if (eventType != null) {
+ Integer severity = graph.getPossibleRelatedValue(eventType, EVENT.EventType_severity);
+ if (severity != null) {
+ if (hideInfoEvents && severity >= Constants.EVENT_SEVERITY_INFO
+ && severity < (Constants.EVENT_SEVERITY_INFO + Constants.EVENT_SEVERITY_STEP))
+ continue;
+ if (hideWarningEvents && severity >= Constants.EVENT_SEVERITY_WARNING
+ && severity < (Constants.EVENT_SEVERITY_WARNING + Constants.EVENT_SEVERITY_STEP))
+ continue;
+ }
+ }
+
+ double timeNumeric = EventLabelRule.getTimestamp(graph, event, defaultTime);
+ times.put(event, timeNumeric);
+ result.add(event);
+ }
+
+ Collections.sort(result, new Comparator<Object>() {
+ @Override
+ public int compare(Object o1, Object o2) {
+ double t1 = times.get(o1);
+ double t2 = times.get(o2);
+ return Double.compare(t1, t2);
+ }
+ });
+
+ return result;
+
+ }
+
+ @Override
+ public Collection<?> getChildren(ReadGraph graph, Object parent) throws DatabaseException {
+
+ Layer0X L0X = Layer0X.getInstance(graph);
+ SimulationResource SIMU = SimulationResource.getInstance(graph);
+ EventResource EVENT = EventResource.getInstance(graph);
+
+ Resource project = (Resource) parent;
+
+ List<Resource> eventLogs = new ArrayList<Resource>();
+ for (Resource activeModel : graph.syncRequest(new ObjectsWithType(project, L0X.Activates, SIMU.Model))) {
+ for (Resource eventLog : graph.syncRequest(new ObjectsWithType(activeModel, EVENT.HasEventLog, EVENT.EventLog))) {
+ if (!graph.hasStatement(eventLog, EVENT.Hidden)) {
+ eventLogs.add(eventLog);
+ graph.getRelatedValue(eventLog, EVENT.HasModificationCounter, Bindings.INTEGER);
+ }
+ }
+ }
+
+ QueryControl qc = graph.getService(QueryControl.class);
+
+ return getChildrenImpl(qc.getIndependentGraph(graph), project, Prefs.read(graph, project), eventLogs);
+
+ }
+
+ @Override
+ public Collection<?> getParents(ReadGraph graph, Object child) throws DatabaseException {
+ if (!(child instanceof Resource))
+ return Collections.emptyList();
+ Layer0 L0 = Layer0.getInstance(graph);
+ return graph.getObjects((Resource) child, L0.PartOf);
+ }
+
+ @Override
+ public boolean isCompatible(Class<?> contentType) {
+ return contentType.equals(Resource.class);
+ }
+
+}