implementing the CommandHandlerButton and using it as button to open the OpenFeatureT...
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 26 Feb 2014 11:02:33 +0000 (11:02 +0000)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 26 Feb 2014 11:02:33 +0000 (11:02 +0000)
.gitattributes
eu.etaxonomy.taxeditor.store/plugin.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/OpenFeatureTreeEditorWizardHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CommandHandlerButton.java [new file with mode: 0644]

index 4377492412a576d19489e80df3dc09deae3d63fb..e8fde97eb0a38732eae0c5108935710947eb014a 100644 (file)
@@ -1137,6 +1137,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/Fe
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/OpenFeatureTreeEditorWizardHandler.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizard.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowLoginWindowHandler.java -text
@@ -1317,6 +1318,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/Bro
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmPropertyChangeEvent.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CheckboxElement.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CommandHandlerButton.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/DateDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/GatheringEventUnitElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ICdmFormElement.java -text
index 109eeed07361fbf932d715b32b1856def90dd806..0d696cc577875dc395ee7e958cda58260c89e9f3 100644 (file)
             </with>
          </activeWhen>
       </handler>
+      <handler
+            class="eu.etaxonomy.taxeditor.featuretree.OpenFeatureTreeEditorWizardHandler"
+            commandId="eu.etaxonomy.taxeditor.store.open.FeatureTreeEditorWizard">
+         <activeWhen>
+            <reference
+                  definitionId="hasROLE_PROJECT_MANAGER">
+            </reference>
+         </activeWhen>
+      </handler>
    </extension>
    <extension
          name="Popup Menu Commands"
             id="eu.etaxonomy.taxeditor.editor.definedTerms.newTermVocabulary"
             name="New Term Vocabulary">
       </command>
+      <command
+         id="eu.etaxonomy.taxeditor.store.open.FeatureTreeEditorWizard"
+         name="Open Feature Tree Editor Wizard">
+         </command>
    </extension>
    <extension
          point="org.eclipse.ui.importWizards">
       </variable>
    </sourceProvider>
 </extension>
-       
 </plugin>
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/OpenFeatureTreeEditorWizardHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/OpenFeatureTreeEditorWizardHandler.java
new file mode 100644 (file)
index 0000000..eb981e6
--- /dev/null
@@ -0,0 +1,32 @@
+package eu.etaxonomy.taxeditor.featuretree;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.wizard.WizardDialog;
+
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * 
+ * @author a.kohlbecker
+ *
+ */
+public class OpenFeatureTreeEditorWizardHandler extends AbstractHandler {
+       
+       /**
+        * unused, only added as reference
+        */
+       String commandID = "eu.etaxonomy.taxeditor.store.open.FeatureTreeEditorWizard"; 
+
+       @Override
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               FeatureTreeEditorWizard featureTreeEditorDialog = new FeatureTreeEditorWizard();
+               WizardDialog dialog = new WizardDialog(StoreUtil.getShell(),
+                               featureTreeEditorDialog);
+
+               dialog.open();
+               return null;
+       }
+
+}
index df0300989a055463e4632d92d3a8cceed97cf901..e92229209a57f2221324e5d10dae12aecdf7198e 100644 (file)
@@ -24,6 +24,8 @@ import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeEditorWizard;
+import eu.etaxonomy.taxeditor.featuretree.OpenFeatureTreeEditorWizardHandler;
+import eu.etaxonomy.taxeditor.ui.element.CommandHandlerButton;
 
 /**
  * <p>
@@ -96,20 +98,9 @@ public class FeatureTreePreferences extends PreferencePage implements
                Composite composite = new Composite(parent, SWT.NULL);
                composite.setLayout(new GridLayout());
 
-               final Button button_openFeatureTree = new Button(composite, SWT.PUSH);
+               final CommandHandlerButton button_openFeatureTree = new CommandHandlerButton(composite, SWT.PUSH, "eu.etaxonomy.taxeditor.store.open.FeatureTreeEditorWizard");
                button_openFeatureTree.setText("Open FeatureTree Editor");
-
-               button_openFeatureTree.addSelectionListener(new SelectionAdapter() {
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-                               FeatureTreeEditorWizard featureTreeEditorDialog = new FeatureTreeEditorWizard();
-                               WizardDialog dialog = new WizardDialog(getShell(),
-                                               featureTreeEditorDialog);
-
-                               dialog.open();
-                       }
-               });
-
+               
                return composite;
        }
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CommandHandlerButton.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CommandHandlerButton.java
new file mode 100644 (file)
index 0000000..e938063
--- /dev/null
@@ -0,0 +1,111 @@
+package eu.etaxonomy.taxeditor.ui.element;
+
+import java.util.Observable;
+import java.util.Observer;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.NotEnabledException;
+import org.eclipse.core.commands.NotHandledException;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.LoginManager;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * A Button which executes a <code>IHandler</code> managed through a
+ * <code>org.eclipse.ui.handlers</code> extension point
+ * 
+ * see http://wiki.eclipse.org/Platform_Command_Framework#Commands
+ * 
+ * @author a.kohlbecker
+ * 
+ */
+public class CommandHandlerButton extends Composite implements Observer {
+       
+       String commandId;
+       Button button;
+
+       /**
+        * @param parent
+        * @param style
+        * @param commandId the id of the command handler as defined in a <code>org.eclipse.ui.handlers</code> extension point
+        */
+       public CommandHandlerButton(Composite parent, int style, String commandId)  {
+               super(parent, SWT.NONE);
+               this.commandId = commandId;
+               
+               setLayout(new GridLayout());
+               setLayoutData(new GridData());
+       
+               button = new Button(this, style);
+               button.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent se) {
+                               // you can execute a command directly ... but to get the proper environment it's better to execute it through the IHandlerService:
+                               IHandlerService handlerService =  (IHandlerService) StoreUtil.getActivePart().getSite().getService(IHandlerService.class);
+                               try {
+                                       handlerService.executeCommand(CommandHandlerButton.this.commandId, null);
+                               } catch (ExecutionException e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                               } catch (NotDefinedException e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                               } catch (NotEnabledException e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                               } catch (NotHandledException e) {
+                                       // TODO Auto-generated catch block
+                                       e.printStackTrace();
+                               }
+                       }
+                       
+               });
+               updateButtonEnabledState();
+               
+               CdmStore.getLoginManager().addObserver(this);
+        addDisposeListener(new DisposeListener() {
+                       @Override
+                       public void widgetDisposed(DisposeEvent e) {
+                               CdmStore.getLoginManager().deleteObserver(CommandHandlerButton.this);
+                       }
+        });
+       }
+
+
+       /* (non-Javadoc)
+        * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
+        */
+       @Override
+       public void update(Observable o, Object arg) {
+               if(o instanceof LoginManager){
+                       updateButtonEnabledState();
+               }
+               
+       }
+
+       private void updateButtonEnabledState() {
+               ICommandService commandService =  (ICommandService) StoreUtil.getActivePart().getSite().getService(ICommandService.class);
+               Command command = commandService.getCommand(commandId);
+               if(!button.isDisposed()){
+                       button.setEnabled(command != null && command.isEnabled());                      
+               }
+       }
+
+       public void setText(String string) {
+               button.setText(string);
+       }
+}