Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / menu / AbstractMenuPreferences.java
index f78483bd64ade4007c5559700ee8bb91f2b0d4d3..c83cc5e939a6aff0a2864ab523b96c76f132930b 100644 (file)
@@ -1,9 +1,8 @@
-// $Id$
 /**
  * Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy 
+ * European Distributed Institute of Taxonomy
  * http://www.e-taxonomy.eu
- * 
+ *
  * The contents of this file are subject to the Mozilla Public License Version 1.1
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
@@ -12,7 +11,6 @@ package eu.etaxonomy.taxeditor.preference.menu;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.commands.Command;
@@ -20,13 +18,9 @@ import org.eclipse.core.commands.IParameter;
 import org.eclipse.core.commands.Parameterization;
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.core.commands.common.NotDefinedException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -39,43 +33,39 @@ import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.commands.ICommandService;
 import org.eclipse.ui.handlers.IHandlerService;
-import org.eclipse.ui.internal.commands.Parameter;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
-import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.TermType;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.preference.wizard.VocabularyTermWizard;
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
- * <p>Abstract AbstractMenuPreferences class.</p>
- *
  * @author n.hoffmann
  * @created 12.06.2009
  * @version 1.0
  */
-public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends PreferencePage implements
+public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends CdmPreferencePage implements
                IWorkbenchPreferencePage, IConversationEnabled{
 
        private Button toggleButton;
        protected HashMap<DefinedTermBase<T>, Button> menuButtons;
-       
-       protected Button newButton;
+
        protected Button editButton;
        protected Button removeButton;
-               
+
        protected CheckboxTableViewer tableViewer;
-       
+
        private boolean state = true;
-       private boolean vocabularyIsEditable;
+       private final boolean vocabularyIsEditable;
        private ConversationHolder conversation;
-       
+
        /**
         * Constructs a new menu preference page.
         *
@@ -95,9 +85,12 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
                vocabularyIsEditable = editable;
                setDescription(description);
        }
-       
+
        protected List<T> getTerms(){
-               return TermStore.getTerms(getTermClass());
+           if(CdmStore.isActive() && getTermType()!=null){
+               return TermStore.getTerms(getTermType(), null);
+           }
+           return new ArrayList<T>();
        }
 
        /**
@@ -107,44 +100,43 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
         */
        @Override
        public Control createContents(Composite parent) {
-               
+
                Composite container = new Composite(parent, SWT.NULL);
                final GridLayout gridLayout = new GridLayout();
                gridLayout.numColumns = 2;
                container.setLayout(gridLayout);
-       
+
                tableViewer = CheckboxTableViewer.newCheckList(container, SWT.NULL);
                GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, false);
                tableLayoutData.heightHint = 300;
                tableViewer.getTable().setLayoutData(tableLayoutData);
-               
+
                tableViewer.setContentProvider(new DefinedTermBaseContentProvider());
                tableViewer.setLabelProvider(new DefinedTermBaseLabelProvider());
 
                refresh(getTerms());
-               
+
                tableViewer.addCheckStateListener(new ICheckStateListener() {
-                       
+
                        @Override
                        public void checkStateChanged(CheckStateChangedEvent arg0) {
                                checkNoneChecked();
                        }
                });
-               
+
                Composite buttonContainer = new Composite(container, SWT.NULL);
                GridData buttonContainerLayoutData = new GridData();
                buttonContainerLayoutData.verticalAlignment = SWT.TOP;
                buttonContainer.setLayoutData(buttonContainerLayoutData);
                buttonContainer.setLayout(new GridLayout());
-               
-               if(vocabularyIsEditable) createEditButtons(buttonContainer);
-               
+
+               if(vocabularyIsEditable) {
+            createEditButtons(buttonContainer);
+        }
+
                toggleButton = new Button(buttonContainer, SWT.PUSH);
                toggleButton.setText("Toggle");
                toggleButton.addSelectionListener(new SelectionAdapter(){
-                       /* (non-Javadoc)
-                        * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-                        */
                        @Override
                        public void widgetSelected(SelectionEvent e) {
                                state = state ? false : true;
@@ -152,18 +144,12 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
                                checkNoneChecked();
                        }
                });
-               
+
                createAdditionalContent(container);
-               
+
                return container;
        }
 
-
-       /**
-        * <p>refresh</p>
-        *
-        * @param definedTerms a {@link java.util.List} object.
-        */
        protected void refresh(List<T> definedTerms) {
                tableViewer.setInput(definedTerms);
 
@@ -171,23 +157,10 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
                tableViewer.setCheckedElements(preferedTerms.toArray());
        }
 
-       /**
-        * <p>createAdditionalContent</p>
-        *
-        * @param container a {@link org.eclipse.swt.widgets.Composite} object.
-        */
        protected void createAdditionalContent(Composite container) {
-               // implement where needed               
+               // implement where needed
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.preference.AbstractMenuPreferences#createButtons(org.eclipse.swt.widgets.Composite)
-        */
-       /**
-        * <p>createEditButtons</p>
-        *
-        * @param buttonContainer a {@link org.eclipse.swt.widgets.Composite} object.
-        */
        protected void createEditButtons(Composite buttonContainer) {
 
                editButton = new Button(buttonContainer, SWT.PUSH);
@@ -197,132 +170,108 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
                addEditButtonListeners();
        }
 
-       /**
-        * Implement this method in MenuPreference Pages where the vocabulary should be editable, editable flag
-        * is set.
-        */
-       protected void addNewButtonListeners() {
-               newButton.addSelectionListener(new SelectionAdapter(){
-                       /* (non-Javadoc)
-                        * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-                        */
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-                               VocabularyTermWizard<T> wizard = new VocabularyTermWizard<T>(getTermClass(), getConversationHolder()); 
-                               
-                               WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
-                           if(dialog.open() == IStatus.OK){
-                               tableViewer.setInput(getTerms());
-                           }
-                       }
-
-                       
-               });
-       }
-       
        /**
         * Implement this method in MenuPreference Pages where the vocabulary should be editable, editable flag
         * is set.
         */
        protected void addEditButtonListeners() {
                editButton.addSelectionListener(new SelectionAdapter(){
-                       /* (non-Javadoc)
-                        * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-                        */
                        @Override
                        public void widgetSelected(SelectionEvent event) {
-                               
-                               ICommandService commandService = (ICommandService)  StoreUtil.getService(ICommandService.class);
+
+                               ICommandService commandService = (ICommandService)  AbstractUtility.getService(ICommandService.class);
 
                                Command command = commandService.getCommand(DefinedTermEditor.OPEN_COMMAND_ID);
-                               
+
                                IParameter parameter;
                                try {
-                                       parameter = command.getParameter("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.parameter");
-                               
+                                       parameter = command.getParameter("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid");
+
                                        Parameterization[] parameterizations = new Parameterization[]{
-                                                       new Parameterization(parameter, getTermClass().getName())
+                                                       new Parameterization(parameter, getTermType().getUuid().toString())
                                        };
-                                       
+
                                        ParameterizedCommand pCommand = new ParameterizedCommand(command, parameterizations);
-                                       
+
                                        if (command.isEnabled()) {
-                                               IHandlerService handlerService = (IHandlerService) StoreUtil.getService(IHandlerService.class);
+                                               IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
                                                try {
                                                        handlerService.executeCommand(pCommand, null);
                                                } catch (NotDefinedException e) {
                                                        throw new RuntimeException("Could not find open command: "
                                                                        + DefinedTermEditor.OPEN_COMMAND_ID);
                                                } catch (Exception e) {
-                                                       StoreUtil
+                                                       MessagingUtils
                                                                        .error(getClass(),
                                                                                        "An exception occured while trying to open a selection",
                                                                                        e);
                                                }
                                        }
                                } catch (NotDefinedException e) {
-                                       StoreUtil
+                                       MessagingUtils
                                        .error(getClass(),
                                                        "An exception occured while trying to open the Term Editor",
                                                        e);
                                }
-                               
+
                        }
                });
        }
 
        /** {@inheritDoc} */
-       public void init(IWorkbench workbench) {
-               setPreferenceStore(PreferencesUtil.getPreferenceStore());
-               getConversationHolder().bind();
+       @Override
+    public void init(IWorkbench workbench) {
+           setPreferenceStore(PreferencesUtil.getPreferenceStore());
+           if(!CdmStore.isActive()) {
+               MessagingUtils.noDataSourceWarningDialog(null);
+
+           } else {
+               getConversationHolder().bind();
+           }
        }
 
-       /*
-        * (non-Javadoc)
-        * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
-        */
        /**
         * <p>performDefaults</p>
         */
-       protected void performDefaults() {
+       @Override
+    protected void performDefaults() {
                tableViewer.setAllChecked(true);
        }
 
-       /**
-        * <p>Getter for the field <code>tableViewer</code>.</p>
-        *
-        * @return the tableViewer
-        */
        public CheckboxTableViewer getTableViewer() {
                return tableViewer;
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.jface.preference.PreferencePage#performOk()
-        */
        /** {@inheritDoc} */
        @Override
        public boolean performOk() {
+           if(!CdmStore.isActive()) {
+               return true;
+           }
+
                if(checkNoneChecked()){
                        return false;
                }
-               
+
                getConversationHolder().commit(true);
-               
+
                List<T> preferredTerms = new ArrayList<T>();
                for (Object element : getTableViewer().getCheckedElements()){
                        preferredTerms.add((T) element);
                }
-               
+
                CdmStore.getTermManager().setPreferredTerms(preferredTerms, getTerms());
-               
+
+               refresh(getTerms());
+
                PreferencesUtil.firePreferencesChanged(this.getClass());
-               
-               return true;
+
+
+               return super.performOk();
        }
-       
+
        private boolean checkNoneChecked(){
-               
+
                if(tableViewer.getCheckedElements().length == 0){
                        setMessage("Please check at least one item", WARNING);
                        return true;
@@ -331,17 +280,9 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
                        return false;
                }
        }
-       
-       /**
-        * <p>getTermClass</p>
-        *
-        * @return a {@link java.lang.Class} object.
-        */
-       protected abstract Class<T> getTermClass();
-       
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
-        */
+
+       protected abstract TermType getTermType();
+
        @Override
        public ConversationHolder getConversationHolder() {
                if(conversation == null){
@@ -349,10 +290,7 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
                }
                return conversation;
        }
-       
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
-        */
+
        @Override
        public void update(CdmDataChangeMap changeEvents) {
                // implement where needed