]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/modelBrowser2/contributions/SetSubscriptionEnabledContribution.java
Remove usage of deprecated SimanticsUI-methods
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / modelBrowser2 / contributions / SetSubscriptionEnabledContribution.java
1 package org.simantics.modeling.ui.modelBrowser2.contributions;
2
3 import java.util.Arrays;
4 import java.util.Collection;
5 import java.util.HashSet;
6 import java.util.Map;
7 import java.util.Set;
8
9 import org.eclipse.core.runtime.CoreException;
10 import org.eclipse.core.runtime.IConfigurationElement;
11 import org.eclipse.core.runtime.IExecutableExtension;
12 import org.eclipse.jface.action.Action;
13 import org.eclipse.jface.action.ActionContributionItem;
14 import org.eclipse.jface.action.IContributionItem;
15 import org.eclipse.jface.resource.ImageDescriptor;
16 import org.simantics.Simantics;
17 import org.simantics.db.ReadGraph;
18 import org.simantics.db.Resource;
19 import org.simantics.db.Session;
20 import org.simantics.db.WriteGraph;
21 import org.simantics.db.common.request.WriteRequest;
22 import org.simantics.db.exception.DatabaseException;
23 import org.simantics.modeling.ModelingResources;
24 import org.simantics.modeling.requests.SetSubscriptionEnabled;
25 import org.simantics.modeling.ui.Activator;
26 import org.simantics.ui.SimanticsUI;
27 import org.simantics.ui.contribution.DynamicMenuContribution;
28 import org.simantics.ui.utils.ResourceAdaptionUtils;
29
30 /**
31  * @author Tuukka Lehtonen
32  */
33 public class SetSubscriptionEnabledContribution extends DynamicMenuContribution implements IExecutableExtension {
34
35     String          name    = "";
36     ImageDescriptor image   = null;
37     boolean         include = true;
38
39     @Override
40     public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
41     throws CoreException {
42         if (data instanceof Map<?,?>) {
43             @SuppressWarnings("unchecked")
44             Map<String, String> args = (Map<String, String>) data;
45             name = args.get("name");
46             String imageId = args.get("image");
47             image = Activator.getDefault().getImageRegistry().getDescriptor(imageId);
48             include = Boolean.parseBoolean(args.get("include"));
49         }
50     }
51
52     private Collection<Resource> toSubscriptions(ReadGraph graph, Collection<Resource> resources) throws DatabaseException {
53         ModelingResources mod = ModelingResources.getInstance(graph);
54
55         Set<Resource> result = new HashSet<Resource>(resources.size());
56         for (Resource o : resources) {
57             if (graph.isInstanceOf(o, mod.Subscription))
58                 result.add(o);
59         }
60
61         return result;
62     }
63
64     @Override
65     protected Object[] getSelectedObjects() {
66         return ResourceAdaptionUtils.toResources(getSelection());
67     }
68
69     @Override
70     protected IContributionItem[] getContributionItems(ReadGraph graph, Object[] elements) throws DatabaseException {
71         final Resource[] resources = (Resource[]) elements;
72         if (resources.length == 0)
73             return new IContributionItem[0];
74
75         // Are there any components in the selection whose inclusion state
76         // is different from the argument 'included'?
77         final Collection<Resource> subscriptions = toSubscriptions(graph, Arrays.asList(resources));
78         if (subscriptions.isEmpty())
79             return new IContributionItem[0];
80
81         ModelingResources mod = ModelingResources.getInstance(graph);
82
83         boolean foundNonMatchingEnableStates = false;
84         for (Resource subscription : subscriptions) {
85             Boolean isIncluded = graph.getPossibleRelatedValue(subscription, mod.Subscription_Enabled);
86             if (isIncluded == null)
87                 isIncluded = Boolean.TRUE;
88             if (isIncluded != include)
89                 foundNonMatchingEnableStates = true;
90         }
91         if (!foundNonMatchingEnableStates)
92             return new IContributionItem[0];
93
94         return new IContributionItem[] {
95                 new ActionContributionItem(new Action(name, image) {
96                     @Override
97                     public void run() {
98                         Session session = Simantics.peekSession();
99                         if (session == null)
100                             return;
101
102                         Simantics.getSession().asyncRequest(new WriteRequest() {
103                             @Override
104                             public void perform(WriteGraph graph) throws DatabaseException {
105                                 new SetSubscriptionEnabled(subscriptions, include).perform(graph);
106                             }
107                         });
108                     }
109                 })
110         };
111     }
112
113 }