-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 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.ui.contribution;\r
-\r
-import java.lang.ref.WeakReference;\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.action.IAction;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.request.Read;\r
-import org.simantics.layer0.utils.collections.IContextualList;\r
-import org.simantics.layer0.utils.operations.IOperation;\r
-import org.simantics.project.IProject;\r
-import org.simantics.ui.SimanticsUI;\r
-import org.simantics.ui.icons.ImageUtil;\r
-import org.simantics.ui.utils.ResourceAdaptionUtils;\r
-import org.simantics.utils.datastructures.persistent.ContextMap;\r
-\r
-\r
-public abstract class OperationsMenuContribution extends DynamicMenuContribution {\r
-\r
- protected abstract Resource getListResource(ReadGraph g) throws Exception;\r
-\r
- protected void assignParameters(ContextMap parameters) {\r
- }\r
-\r
- @Override\r
- protected boolean preAcceptSelection(Object[] selection) {\r
- if(selection == null || selection.length != 1)\r
- return false;\r
- Resource r = ResourceAdaptionUtils.adaptToResource(selection[0]);\r
- return r != null;\r
- }\r
-\r
- @Override\r
- protected IAction[] getActions(ReadGraph g, Object[] selection) {\r
- if(selection.length == 1) {\r
- final Resource r = ResourceAdaptionUtils.adaptToResource(selection[0]);\r
- if(r == null)\r
- return NO_ACTIONS;\r
- try {\r
- return g.syncRequest(new Read<IAction[]>() {\r
-\r
- @Override\r
- public IAction[] perform(ReadGraph g) throws DatabaseException {\r
- IContextualList list;\r
- try {\r
- list = g.adapt(getListResource(g), IContextualList.class);\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- return null;\r
- }\r
- final ContextMap parameters = new ContextMap();\r
- parameters.put(IOperation.SUBJECT, r);\r
- IProject project = SimanticsUI.peekProject();\r
- if (project != null)\r
- parameters.put(IOperation.PROJECT, project.get());\r
- assignParameters(parameters);\r
- Collection<Resource> operations = new ArrayList<Resource>();\r
- list.fill(g, parameters, operations);\r
-\r
- if(!operations.isEmpty()) {\r
- IAction[] actions = new IAction[operations.size()];\r
- int i=0;\r
- for(Resource opRes : operations) {\r
- final IOperation op = g.adapt(opRes, IOperation.class);\r
- final ImageDescriptor imgDesc = ImageUtil.adaptImageDescriptor(g, opRes);\r
- final WeakReference<Session> sessionRef = new WeakReference<Session>(g.getSession());\r
- actions[i++] = new Action(op.getName(), imgDesc) {\r
-\r
- @Override\r
- public void run() {\r
- Session session = sessionRef.get();\r
- if (session != null)\r
- op.exec(session, parameters);\r
- }\r
-\r
- };\r
- }\r
- return actions;\r
- } else {\r
- return null;\r
- }\r
- }\r
-\r
- });\r
- } catch (DatabaseException e) {\r
- e.printStackTrace();\r
- }\r
-\r
- }\r
- return NO_ACTIONS;\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * 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.ui.contribution;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.Session;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.request.Read;
+import org.simantics.layer0.utils.collections.IContextualList;
+import org.simantics.layer0.utils.operations.IOperation;
+import org.simantics.project.IProject;
+import org.simantics.ui.SimanticsUI;
+import org.simantics.ui.icons.ImageUtil;
+import org.simantics.ui.utils.ResourceAdaptionUtils;
+import org.simantics.utils.datastructures.persistent.ContextMap;
+
+
+public abstract class OperationsMenuContribution extends DynamicMenuContribution {
+
+ protected abstract Resource getListResource(ReadGraph g) throws Exception;
+
+ protected void assignParameters(ContextMap parameters) {
+ }
+
+ @Override
+ protected boolean preAcceptSelection(Object[] selection) {
+ if(selection == null || selection.length != 1)
+ return false;
+ Resource r = ResourceAdaptionUtils.adaptToResource(selection[0]);
+ return r != null;
+ }
+
+ @Override
+ protected IAction[] getActions(ReadGraph g, Object[] selection) {
+ if(selection.length == 1) {
+ final Resource r = ResourceAdaptionUtils.adaptToResource(selection[0]);
+ if(r == null)
+ return NO_ACTIONS;
+ try {
+ return g.syncRequest(new Read<IAction[]>() {
+
+ @Override
+ public IAction[] perform(ReadGraph g) throws DatabaseException {
+ IContextualList list;
+ try {
+ list = g.adapt(getListResource(g), IContextualList.class);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ final ContextMap parameters = new ContextMap();
+ parameters.put(IOperation.SUBJECT, r);
+ IProject project = SimanticsUI.peekProject();
+ if (project != null)
+ parameters.put(IOperation.PROJECT, project.get());
+ assignParameters(parameters);
+ Collection<Resource> operations = new ArrayList<Resource>();
+ list.fill(g, parameters, operations);
+
+ if(!operations.isEmpty()) {
+ IAction[] actions = new IAction[operations.size()];
+ int i=0;
+ for(Resource opRes : operations) {
+ final IOperation op = g.adapt(opRes, IOperation.class);
+ final ImageDescriptor imgDesc = ImageUtil.adaptImageDescriptor(g, opRes);
+ final WeakReference<Session> sessionRef = new WeakReference<Session>(g.getSession());
+ actions[i++] = new Action(op.getName(), imgDesc) {
+
+ @Override
+ public void run() {
+ Session session = sessionRef.get();
+ if (session != null)
+ op.exec(session, parameters);
+ }
+
+ };
+ }
+ return actions;
+ } else {
+ return null;
+ }
+ }
+
+ });
+ } catch (DatabaseException e) {
+ e.printStackTrace();
+ }
+
+ }
+ return NO_ACTIONS;
+ }
+
+}