-// $Id$
/**
* Copyright (C) 2014 EDIT
* European Distributed Institute of Taxonomy
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.apache.commons.lang.StringUtils;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.StyledString.Styler;
-import org.eclipse.jface.viewers.TreePath;
-import org.eclipse.jface.wizard.WizardPage;
+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.widgets.Composite;
import org.eclipse.swt.widgets.Display;
-import eu.etaxonomy.cdm.api.service.ITermService;
import eu.etaxonomy.cdm.api.service.IVocabularyService;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
import eu.etaxonomy.cdm.model.common.TermType;
import eu.etaxonomy.cdm.model.common.TermVocabulary;
-import eu.etaxonomy.taxeditor.editor.definedterm.TermContentProvider;
-import eu.etaxonomy.taxeditor.editor.definedterm.TermLabelProvider;
+import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
* @date 21.07.2014
*
*/
-public class AvailableDistributionPage extends WizardPage implements ICdmEntitySessionEnabled {
-
- private CheckboxTreeViewer viewer;
-
- private Set<TermVocabulary<DefinedTermBase>> vocabularies;
+public class AvailableDistributionPage extends AbstractTermSelectionWizardPage implements ICdmEntitySessionEnabled {
/**
* @param pageName
*/
protected AvailableDistributionPage(String pageName) {
- super(pageName);
- // TODO check if configuration exists
- CdmStore.getCurrentSessionManager().bindNullSession(this);
+ super(pageName, TermType.NamedArea);
+ this.localPref = true;
+
}
- /*
- * (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 ChecklistEditor");
- 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.");
+ setTitle("Select areas for Distribution Editor");
+ setDescription("In order to see and modify distribution status of taxa\n"
+ + "you have to select the areas which you like to see/modify.");
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout());
- viewer = new CheckboxTreeViewer(composite, SWT.NULL);
- viewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- viewer.setContentProvider(new TermContentProvider());
+ 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);
}
};
- viewer.setLabelProvider(new TermLabelProvider(styler));
- viewer.addCheckStateListener(new ICheckStateListener() {
+ 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 {
- TreePath path = ((ITreeSelection) viewer.getSelection()).getPaths()[0];
- checkChildren(path, event.getChecked());
- checkParents(path.getParentPath());
+ 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);
+ }
+ }
+
+ }
+ }
+ });
+
// TODO: write listener or toggle button to select all named areas
rememberCheckedValues(checkedValues, grayedValues);
+ // ((CheckboxTreeViewer)getViewer()).expandToLevel(2);
setControl(composite);
}
- protected List<TermVocabulary<DefinedTermBase>> initialiseVocabularies() {
- if (vocabularies != null) {
- vocabularies.clear();
- }
- List<TermVocabulary<DefinedTermBase>> vocs = CdmStore.getService(IVocabularyService.class).findByTermType(
- TermType.NamedArea);
- return vocs;
- }
- private void rememberCheckedValues(String checkedValues, String grayedValues) {
- viewer.setInput(initialiseVocabularies());
- if (grayedValues != null && grayedValues != "") {
- String[] listGrayed = grayedValues.split(",");
- ArrayList listGrayedTerms = new ArrayList();
- getTermsFromStringValues(listGrayed, listGrayedTerms);
- for(Object element : listGrayedTerms){
- if(element != null){
- viewer.setGrayChecked(element, true);
- }
- }
- }
- if (checkedValues != null && checkedValues != "") {
- String[] listChecked = checkedValues.split(",");
- ArrayList<DefinedTermBase<?>> listCheckedTerms = new ArrayList<DefinedTermBase<?>>();
- getTermsFromStringValues(listChecked, listCheckedTerms);
- for(Object element : listCheckedTerms){
- if(element != null){
- viewer.setChecked(element, true);
- }
- }
- }
- }
- /**
- * @param split
- * @param termlist
- */
- private void getTermsFromStringValues(String[] split, ArrayList termlist) {
- List<String> listValue = Arrays.asList(split);
- for (String s : listValue) {
- UUID uuid = UUID.fromString(s);
- ITermService termService = CdmStore.getService(ITermService.class);
- DefinedTermBase definedTermBase = termService.load(uuid);
- if(definedTermBase != null){
- termlist.add(definedTermBase);
- }else{
- IVocabularyService vocabularyService = CdmStore.getService(IVocabularyService.class);
- TermVocabulary termVocabulary = vocabularyService.load(uuid);
- termlist.add(termVocabulary);
- }
- }
- }
private boolean checkNoneChecked() {
- if (viewer.getCheckedElements().length == 0) {
+ if (((CheckboxTreeViewer)getViewer()).getCheckedElements().length == 0) {
setMessage("Please check at least one item", WARNING);
return true;
} else {
}
}
- /**
- * @return the viewer
- */
- public CheckboxTreeViewer getViewer() {
- return viewer;
- }
/**
- *
- * @param path
- */
- private void checkParents(final TreePath path) {
- if (path == null) {
- return;
- }
- TermContentProvider tcp = new TermContentProvider();
- Object treeElement = path.getLastSegment();
-
- if (treeElement != null) {
- boolean allChecked = true;
- boolean allUnchecked = true;
- for (final Object fieldElement : tcp.getChildren(treeElement)) {
- allChecked = allChecked && this.viewer.getChecked(fieldElement);
- allUnchecked = allUnchecked && !this.viewer.getChecked(fieldElement);
- }
- if (allUnchecked) {
- this.viewer.setChecked(treeElement, false);
- this.viewer.setGrayed(treeElement, false);
- } else if (allChecked) {
- this.viewer.setChecked(treeElement, true);
- this.viewer.setGrayed(treeElement, false);
- } else if (!allUnchecked && !allChecked) {
- this.viewer.setChecked(treeElement, true);
- this.viewer.setGrayed(treeElement, true);
- }
- }
- checkParents(path.getParentPath());
- }
+ *
+ * @param path
+ * @param checked
+ */
+ private void checkChildren(final Object element, final boolean checked) {
+ if (element == null) {
+ return;
+ }
- /**
- *
- * @param path
- * @param checked
- */
- private void checkChildren(final TreePath path, final boolean checked) {
- TermContentProvider tcp = new TermContentProvider();
+ if (((CheckboxTreeViewer)getViewer()).isExpandable(element)){
+ ((CheckboxTreeViewer)getViewer()).expandToLevel(element, CheckboxTreeViewer.ALL_LEVELS);
+ ((CheckboxTreeViewer)getViewer()).setSubtreeChecked(element, checked);
- if (path == null) {
- return;
- }
- final Object element = path.getLastSegment();
- if (element != null) {
- this.viewer.setChecked(element, checked);
- this.viewer.setGrayed(element, false);
- int length = tcp.getChildren(element).length;
- if(length>1){
- this.viewer.setSubtreeChecked(element, checked);
- }
- }
- }
+ ((CheckboxTreeViewer)getViewer()).setChecked(element, checked);
+ if (((CheckboxTreeViewer)getViewer()).getGrayed(element)){
+ ((CheckboxTreeViewer)getViewer()).setGrayChecked(element, !checked);
+ }
+// if (element instanceof NamedAreaWrapper){
+// NamedAreaWrapper baseElement = new NamedAreaWrapper(((NamedAreaWrapper)element).getNamedArea(), true, ((NamedAreaWrapper)element).parent);
+// ((CheckboxTreeViewer)getViewer()).setChecked(baseElement, !checked);
+// ((CheckboxTreeViewer)getViewer()).setGrayed(element, checked);
+// }
+
+ }else{
+ ((CheckboxTreeViewer)getViewer()).setChecked(element, checked);
+ ((CheckboxTreeViewer)getViewer()).setGrayed(element, false);
+ }
+
+ }
+ /**
+ *
+ * @param path
+ * @param checked
+ */
+ private void grayParents(final Object element, boolean checked) {
+ DistributionContentProvider tcp = new DistributionContentProvider();
+
+ if (element == null) {
+ return;
+ }
+ // final Object element = path.getLastSegment();
+ Object parent = tcp.getParent(element);
+ if (parent != null) {
+
+ boolean allUnchecked = true;
+ boolean allChecked = true;
+ //if element is checked then the parent should be grayed if it is unchecked it have to be computed whether the parent should be checked
+// if (checked){
+// if (!((CheckboxTreeViewer)getViewer()).getChecked(parent)){
+// ((CheckboxTreeViewer)getViewer()).setGrayChecked(parent, true);
+// }
+//
+// }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);
+ }
+ if (allUnchecked) {
+// if (!((CheckboxTreeViewer)getViewer()).getChecked(parent)){
+ ((CheckboxTreeViewer)getViewer()).setChecked(parent, false);
+ ((CheckboxTreeViewer)getViewer()).setGrayed(parent, false);
+// }else{
+// checked = true;
+// }
+ } else if (allChecked){
+ ((CheckboxTreeViewer)getViewer()).setChecked(parent, true);
+ ((CheckboxTreeViewer)getViewer()).setGrayed(parent, false);
+ }else {
+// if (!((CheckboxTreeViewer)getViewer()).getChecked(parent)){
+ ((CheckboxTreeViewer)getViewer()).setGrayChecked(parent, true);
+ ((CheckboxTreeViewer)getViewer()).setChecked(parent, true);
+// }
+ checked = true;
+
+ }
+// }
+ grayParents(parent, checked);
+ }
+ }
@Override
public void dispose() {
return propertyPathsMap;
}
+ @Override
+ protected List<TermVocabulary<DefinedTermBase>> getVocabulariesFromPreference(){
+ List<TermVocabulary<DefinedTermBase>> vocs = new ArrayList();
+
+ if (PreferencesUtil.getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies) == null && PreferencesUtil.getPreferenceStore().getString(PreferencesUtil.DISTRIBUTION_VOCABULARIES) == null){
+ vocs = CdmStore.getService(IVocabularyService.class).findByTermType(
+ type, null);
+ }else{
+ String vocString = PreferencesUtil.getPreferenceStore().getString(PreferencesUtil.DISTRIBUTION_VOCABULARIES);
+
+ String[] arrayVocs = vocString.split(";");
+
+ 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(voc);
+ }
+
+ }
+ return vocs;
+ }
+
+
+
}