PropertiesTester fix: fixed inf. loop when creating a trace
Fix desc.: Now extracting the info about the current Office-view
contents from a SourceProvider and not from the Office view itself.
Change-Id: I547ec623bbb58d1a0aaf7177298032b55eceb88b
Signed-off-by: Dusan Kalanj <kalanj@chalmers.se>
diff --git a/org.eclipse.capra.ui.office/plugin.xml b/org.eclipse.capra.ui.office/plugin.xml
index ab76405..f88463a 100644
--- a/org.eclipse.capra.ui.office/plugin.xml
+++ b/org.eclipse.capra.ui.office/plugin.xml
@@ -65,16 +65,6 @@
</handler>
</extension>
<extension
- point="org.eclipse.core.expressions.propertyTesters">
- <propertyTester
- class="org.eclipse.capra.ui.office.utils.OfficePropertyTester"
- id="org.eclipse.capra.ui.office.utils.OfficePropertyTester"
- namespace="org.eclipse.capra.ui.office.utils"
- properties="isViewEmpty, isExcelObject"
- type="java.lang.Object">
- </propertyTester>
- </extension>
- <extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="menu:org.eclipse.capra.ui.views.OfficeView?after=additions">
@@ -90,11 +80,9 @@
style="push"
tooltip="Select which sheet in the Excel workbook to display">
<visibleWhen>
- <test
- forcePluginActivation="true"
- property="org.eclipse.capra.ui.office.utils.isExcelObject">
- </test>
- </visibleWhen>
+ <reference
+ definitionId="org.eclipse.capra.ui.office.utils.isExcelObjectExpression"/>
+ </visibleWhen>
</command>
<command
commandId="org.eclipse.capra.ui.office.clearselection"
@@ -102,11 +90,9 @@
style="push"
tooltip="Clears the current selection of elements">
<visibleWhen>
- <test
- forcePluginActivation="true"
- property="org.eclipse.capra.ui.office.utils.isViewEmpty">
- </test>
- </visibleWhen>
+ <reference
+ definitionId="org.eclipse.capra.ui.office.utils.isViewPopulatedExpression"/>
+ </visibleWhen>
</command>
</menuContribution>
<menuContribution
@@ -149,4 +135,50 @@
class="org.eclipse.capra.ui.office.preferences.PreferenceInitializer">
</initializer>
</extension>
+ <extension
+ point="org.eclipse.core.expressions.propertyTesters">
+ <propertyTester
+ class="org.eclipse.capra.ui.office.utils.OfficePropertyTester"
+ id="org.eclipse.capra.ui.office.utils.OfficePropertyTester"
+ namespace="org.eclipse.capra.ui.office.utils"
+ properties="isViewPopulated, isExcelObject"
+ type="org.eclipse.capra.ui.office.objects.CapraOfficeObject">
+ </propertyTester>
+ </extension>
+ <extension
+ point="org.eclipse.ui.services">
+ <sourceProvider
+ provider="org.eclipse.capra.ui.office.utils.OfficeSourceProvider">
+ <variable
+ name="org.eclipse.capra.ui.office.utils.capraOfficeObject"
+ priorityLevel="workbench">
+ </variable>
+ </sourceProvider>
+ </extension>
+ <extension
+ point="org.eclipse.core.expressions.definitions">
+ <definition
+ id="org.eclipse.capra.ui.office.utils.isViewPopulatedExpression">
+ <with
+ variable="org.eclipse.capra.ui.office.utils.capraOfficeObject">
+ <test
+ forcePluginActivation="true"
+ property="org.eclipse.capra.ui.office.utils.isViewPopulated">
+ </test>
+ </with>
+ </definition>
+ </extension>
+ <extension
+ point="org.eclipse.core.expressions.definitions">
+ <definition
+ id="org.eclipse.capra.ui.office.utils.isExcelObjectExpression">
+ <with
+ variable="org.eclipse.capra.ui.office.utils.capraOfficeObject">
+ <test
+ forcePluginActivation="true"
+ property="org.eclipse.capra.ui.office.utils.isExcelObject">
+ </test>
+ </with>
+ </definition>
+ </extension>
</plugin>
diff --git a/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficePropertyTester.java b/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficePropertyTester.java
index 6846ee2..9b471fc 100644
--- a/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficePropertyTester.java
+++ b/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficePropertyTester.java
@@ -12,7 +12,6 @@
package org.eclipse.capra.ui.office.utils;
import org.eclipse.capra.ui.office.objects.CapraExcelRow;
-import org.eclipse.capra.ui.office.views.OfficeView;
import org.eclipse.core.expressions.PropertyTester;
/**
@@ -25,28 +24,17 @@
*/
public class OfficePropertyTester extends PropertyTester {
- private static final String IS_VIEW_EMPTY = "isViewEmpty";
+ private static final String IS_VIEW_POPULATED = "isViewPopulated";
private static final String IS_EXCEL_OBJECT = "isExcelObject";
@Override
public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue) {
- // Triggers when a test is called to check whether the Office view is
- // empty or not.
- if (property.equals(IS_VIEW_EMPTY))
- if (OfficeView.getOpenedView().getSelection().isEmpty())
- return false;
- else
- return true;
+ if (property.equals(IS_VIEW_POPULATED))
+ return receiver != null;
- // Triggers when a test is called to check if the objects in the Office
- // view represent Excel rows.
if (property.equals(IS_EXCEL_OBJECT))
- if (!OfficeView.getOpenedView().getSelection().isEmpty()
- && OfficeView.getOpenedView().getSelection().get(0) instanceof CapraExcelRow)
- return true;
- else
- return false;
+ return receiver instanceof CapraExcelRow;
return false;
}
diff --git a/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeSourceProvider.java b/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeSourceProvider.java
new file mode 100644
index 0000000..05911dc
--- /dev/null
+++ b/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeSourceProvider.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Chalmers | University of Gothenburg, rt-labs and others.
+ * 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:
+ * Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+package org.eclipse.capra.ui.office.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.capra.ui.office.objects.CapraOfficeObject;
+import org.eclipse.ui.AbstractSourceProvider;
+import org.eclipse.ui.ISources;
+
+/**
+ * This class provides the plugin with information about the contents of the
+ * Office view. It does that by providing a sample object from the view, from
+ * which the following useful information can be deducted: if view is populated
+ * (object is null if it is empty); the type of the objects in the view; the
+ * file-path of the file that was used to extract the objects.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class OfficeSourceProvider extends AbstractSourceProvider {
+
+ /**
+ * The ID of the variable that corresponds to the one in the plugin.xml and
+ * is used to identify the resource that is being held by the class.
+ */
+ public static final String CAPRA_OFFICE_OBJECT = "org.eclipse.capra.ui.office.utils.capraOfficeObject";
+
+ private CapraOfficeObject capraOfficeObject = null;
+
+ @Override
+ public void dispose() {
+ }
+
+ /**
+ * Sets the resource (an instance of CapraOfficeObject).
+ *
+ * @param capraOfficeObject
+ */
+ public void setResource(CapraOfficeObject capraOfficeObject) {
+ this.capraOfficeObject = capraOfficeObject;
+ fireSourceChanged(ISources.WORKBENCH, CAPRA_OFFICE_OBJECT, this.capraOfficeObject);
+ }
+
+ @Override
+ public Map<String, CapraOfficeObject> getCurrentState() {
+ HashMap<String, CapraOfficeObject> map = new HashMap<String, CapraOfficeObject>();
+ map.put(CAPRA_OFFICE_OBJECT, capraOfficeObject);
+ return map;
+ }
+
+ @Override
+ public String[] getProvidedSourceNames() {
+ return new String[] { CAPRA_OFFICE_OBJECT };
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/OfficeView.java b/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/OfficeView.java
index 217aa07..69421ae 100644
--- a/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/OfficeView.java
+++ b/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/OfficeView.java
@@ -27,6 +27,7 @@
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.xmlbeans.SchemaTypeLoaderException;
import org.eclipse.capra.ui.office.Activator;
+import org.eclipse.capra.ui.office.utils.OfficeSourceProvider;
import org.eclipse.capra.ui.office.exceptions.CapraOfficeFileNotSupportedException;
import org.eclipse.capra.ui.office.exceptions.CapraOfficeObjectNotFound;
import org.eclipse.capra.ui.office.objects.CapraExcelRow;
@@ -66,6 +67,7 @@
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.services.ISourceProviderService;
import com.google.common.io.Files;
@@ -114,6 +116,12 @@
private List<CapraOfficeObject> selection = new ArrayList<CapraOfficeObject>();
/**
+ * Instance of OfficeSourceProvider (used for hiding context menu options)
+ */
+ private OfficeSourceProvider provider = (OfficeSourceProvider) ((ISourceProviderService) PlatformUI.getWorkbench()
+ .getService(ISourceProviderService.class)).getSourceProvider(OfficeSourceProvider.CAPRA_OFFICE_OBJECT);
+
+ /**
* The content provider class used by the view.
*/
class ViewContentProvider implements IStructuredContentProvider {
@@ -364,6 +372,9 @@
selection.add(cRow);
}
}
+
+ if (!selection.isEmpty())
+ provider.setResource(selection.get(0));
}
/**
@@ -399,6 +410,9 @@
selection.add(cRequirement);
}
}
+
+ if (!selection.isEmpty())
+ provider.setResource(selection.get(0));
}
/**
@@ -447,6 +461,7 @@
public void clearSelection() {
selection.clear();
viewer.refresh();
+ provider.setResource(null);
}
/**