ref #7887 Remove grayed value preferences from distributon wizards
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / wizard / AvailableDistributionPage.java
index c4d0513e9da27f00618c0995edc1d96c0e1a6582..c3126f8c3e0a16f9b8ba845ef9236b2c0a221a9f 100755 (executable)
@@ -8,28 +8,27 @@
  */
 package eu.etaxonomy.taxeditor.preference.wizard;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
 
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.apache.commons.lang.StringUtils;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.ITreeViewerListener;
-import org.eclipse.jface.viewers.StyledString.Styler;
-import org.eclipse.jface.viewers.TreeExpansionEvent;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.TextStyle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
 
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
+import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
@@ -51,96 +50,26 @@ public class AvailableDistributionPage extends AbstractTermSelectionWizardPage i
 
     }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see
-     * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
-     * .Composite)
-     */
     /** {@inheritDoc} */
     @Override
     public void createControl(Composite parent) {
-        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
-
-        String checkedValues = preferenceStore.getString(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS);
-        String grayedValues = preferenceStore.getString(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS_GRAYED);
-        setTitle("Select areas for Distribution Editor");
-        setDescription("In order to be able to modify and see the distribution status of taxa,\n"
-                + "you have to select the areas which you like to see.");
-        Composite composite = new Composite(parent, SWT.NULL);
-        composite.setLayout(new GridLayout());
-        setViewer(new CheckboxTreeViewer(composite, SWT.NULL));
-        ((CheckboxTreeViewer)getViewer()).getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-        getViewer().setContentProvider(new DistributionContentProvider());
-        Styler styler = new Styler() {
-            @Override
-            public void applyStyles(TextStyle textStyle) {
-                textStyle.foreground = Display.getCurrent().getSystemColor(SWT.COLOR_BLACK);
-            }
-        };
-        getViewer().setLabelProvider(new AreaLabelProvider(styler));
-        getViewer().setComparator(new AreaViewerComparator());
-        ((CheckboxTreeViewer)getViewer()).addCheckStateListener(new ICheckStateListener() {
-
-            private boolean ignoreCheckEvent = false;
-
-            @Override
-            public void checkStateChanged(CheckStateChangedEvent event) {
-                if (ignoreCheckEvent ) {
-                    return;
-                }
-                ignoreCheckEvent = true;
-                try {
-                    checkChildren(event.getElement(), event.getChecked());
-                    grayParents(event.getElement(), event.getChecked());
-                   // ((CheckboxTreeViewer)getViewer()).refresh();
-                }
-                finally {
-                    ignoreCheckEvent = false;
-                }
-                checkNoneChecked();
-            }
-        });
-        ((CheckboxTreeViewer)getViewer()).addTreeListener(new ITreeViewerListener() {
-            @Override
-            public void treeCollapsed(TreeExpansionEvent event) {
-            }
-
-            @Override
-            public void treeExpanded(TreeExpansionEvent event) {
-                final Object element = event.getElement();
-                final Object[] children = ((DistributionContentProvider)getViewer().getContentProvider()).getChildren(element);
-                for (Object child : children) {
-                    if (child instanceof NamedAreaWrapper){
-                        if (getListCheckedTerms().contains(((NamedAreaWrapper) child).getNamedArea()) ){
-                            ((CheckboxTreeViewer)getViewer()).setChecked(child, true);
-                        }
-                        if (getListGrayedTerms().contains(((NamedAreaWrapper) child).getNamedArea())&& !((NamedAreaWrapper) child).isBaseElement){
-                            ((CheckboxTreeViewer)getViewer()).setGrayChecked(child, true);
-                        }
-                    }
-
-                }
-            }
-        });
+        //IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
 
-        // TODO: write listener or toggle button to select all named areas
+        setTitle(Messages.AvailableDistributionPage_PAGE_TITLE);
+        setDescription(Messages.AvailableDistributionPage_PAGE_DESCRIPTION);
 
-        rememberCheckedValues(checkedValues, grayedValues);
-       // ((CheckboxTreeViewer)getViewer()).expandToLevel(2);
-        setControl(composite);
+        super.createControl(parent);
     }
 
-
-
-
-
+    @Override
+    protected String getCheckedValuesFromPreferences() {
+        return PreferencesUtil.getStringValue(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS);
+    }
 
     private boolean checkNoneChecked() {
 
-        if (((CheckboxTreeViewer)getViewer()).getCheckedElements().length == 0) {
-            setMessage("Please check at least one item", WARNING);
+        if (getViewer().getCheckedElements().length == 0) {
+            setMessage(Messages.AvailableDistributionPage_CHECK_MESSAGE, WARNING);
             return true;
         } else {
             setMessage(null);
@@ -159,13 +88,13 @@ public class AvailableDistributionPage extends AbstractTermSelectionWizardPage i
            return;
        }
 
-       if (((CheckboxTreeViewer)getViewer()).isExpandable(element)){
-           ((CheckboxTreeViewer)getViewer()).expandToLevel(element, CheckboxTreeViewer.ALL_LEVELS);
-           ((CheckboxTreeViewer)getViewer()).setSubtreeChecked(element, checked);
+       if (getViewer().isExpandable(element)){
+           getViewer().expandToLevel(element, CheckboxTreeViewer.ALL_LEVELS);
+           getViewer().setSubtreeChecked(element, checked);
 
-           ((CheckboxTreeViewer)getViewer()).setChecked(element, checked);
-           if (((CheckboxTreeViewer)getViewer()).getGrayed(element)){
-               ((CheckboxTreeViewer)getViewer()).setGrayChecked(element, !checked);
+           getViewer().setChecked(element, checked);
+           if (getViewer().getGrayed(element)){
+               getViewer().setGrayChecked(element, !checked);
            }
 //           if (element instanceof NamedAreaWrapper){
 //               NamedAreaWrapper baseElement = new NamedAreaWrapper(((NamedAreaWrapper)element).getNamedArea(), true, ((NamedAreaWrapper)element).parent);
@@ -174,8 +103,8 @@ public class AvailableDistributionPage extends AbstractTermSelectionWizardPage i
 //           }
 
        }else{
-           ((CheckboxTreeViewer)getViewer()).setChecked(element, checked);
-           ((CheckboxTreeViewer)getViewer()).setGrayed(element, false);
+           getViewer().setChecked(element, checked);
+           getViewer().setGrayed(element, false);
        }
 
    }
@@ -204,24 +133,24 @@ public class AvailableDistributionPage extends AbstractTermSelectionWizardPage i
 //
 //          }else{
               for (final Object fieldElement : tcp.getChildren(parent)) {
-                  allChecked = allChecked && ((CheckboxTreeViewer)getViewer()).getChecked(fieldElement);
-                  allUnchecked = allUnchecked && !((CheckboxTreeViewer)getViewer()).getChecked(fieldElement);
-                  allUnchecked = allUnchecked && !((CheckboxTreeViewer)getViewer()).getGrayed(fieldElement);
+                  allChecked = allChecked && getViewer().getChecked(fieldElement);
+                  allUnchecked = allUnchecked && !getViewer().getChecked(fieldElement);
+                  allUnchecked = allUnchecked && !getViewer().getGrayed(fieldElement);
               }
               if (allUnchecked) {
 //                  if (!((CheckboxTreeViewer)getViewer()).getChecked(parent)){
-                      ((CheckboxTreeViewer)getViewer()).setChecked(parent, false);
-                      ((CheckboxTreeViewer)getViewer()).setGrayed(parent, false);
+                      getViewer().setChecked(parent, false);
+                      getViewer().setGrayed(parent, false);
 //                  }else{
 //                      checked = true;
 //                  }
               } else if (allChecked){
-                  ((CheckboxTreeViewer)getViewer()).setChecked(parent, true);
-                  ((CheckboxTreeViewer)getViewer()).setGrayed(parent, false);
+                  getViewer().setChecked(parent, true);
+                  getViewer().setGrayed(parent, false);
               }else {
 //                if (!((CheckboxTreeViewer)getViewer()).getChecked(parent)){
-                    ((CheckboxTreeViewer)getViewer()).setGrayChecked(parent, true);
-                    ((CheckboxTreeViewer)getViewer()).setChecked(parent, true);
+                    getViewer().setGrayChecked(parent, true);
+                    getViewer().setChecked(parent, true);
 //                }
                 checked = true;
 
@@ -259,13 +188,38 @@ public class AvailableDistributionPage extends AbstractTermSelectionWizardPage i
     public Map<Object, List<String>> getPropertyPathsMap() {
         Map<Object, List<String>> propertyPathsMap = new HashMap<Object, List<String>>();
         List<String> termsPropertyPaths = Arrays.asList(new String[] {
-                "includes"
+                "includes" //$NON-NLS-1$
         });
-        propertyPathsMap.put("includes", termsPropertyPaths);
-        propertyPathsMap.put("terms", termsPropertyPaths);
+        propertyPathsMap.put("includes", termsPropertyPaths); //$NON-NLS-1$
+        propertyPathsMap.put("terms", termsPropertyPaths); //$NON-NLS-1$
         return propertyPathsMap;
     }
 
+    @Override
+    protected  List<TermVocabularyDto> getVocabulariesFromPreference(){
+        List<TermVocabularyDto> vocs = new ArrayList<>();
+
+        if (PreferencesUtil.getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies) == null && PreferencesUtil.getStringValue(PreferencesUtil.DISTRIBUTION_VOCABULARIES) == null){
+            vocs = CdmStore.getService(IVocabularyService.class).findVocabularyDtoByTermType(type);
+        }else{
+            String vocString = PreferencesUtil.getStringValue(PreferencesUtil.DISTRIBUTION_VOCABULARIES);
+
+            String[] arrayVocs = vocString.split(";"); //$NON-NLS-1$
+
+            Set<UUID> uuidVocs = new HashSet();
+            for (String voc: arrayVocs){
+                if (!StringUtils.isBlank(voc)){
+                    uuidVocs.add(UUID.fromString(voc));
+                }
+            }
+            List<TermVocabulary> tempVocs = CdmStore.getService(IVocabularyService.class).find(uuidVocs);
+            for (TermVocabulary voc: tempVocs){
+                vocs.add(new TermVocabularyDto(voc.getUuid(), voc.getRepresentations()));
+            }
+
+        }
+        return vocs;
+    }