-// $Id$
/**
* Copyright (C) 2016 EDIT
* European Distributed Institute of Taxonomy
*/
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.common.Representation;
-import eu.etaxonomy.cdm.model.common.TermBase;
-import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.cdm.model.term.Representation;
+import eu.etaxonomy.cdm.model.term.TermBase;
+import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;
import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
+import eu.etaxonomy.taxeditor.model.ImageResources;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
+import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
-public class RepresentationElement extends AbstractCdmFormElement implements
-SelectionListener{
+
+public class RepresentationElement extends AbstractCdmFormElement implements IEnableableFormElement{
protected TermComboElement<Language> combo_language;
protected TextWithLabelElement element_Label;
protected TextWithLabelElement element_abbrevLabel;
+ protected TextWithLabelElement element_plural;
protected TextWithLabelElement element_text;
protected Button button;
protected Representation selectedRepresentation;
protected TermBase term;
+ protected AbstractTermDto termDto;
- // protected final boolean isTranslationWizard;
+ private Button removeRepresentation;
+ boolean isEnabled = true;
- /**
- * <p>
- * Constructor for MultilanguageTextElement.
- * </p>
- *
- * @param formFactory
- * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
- * object.
- * @param formElement
- * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
- * object.
- *
- * @param term
- * a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
- * @param textHeight
- * a {@link java.lang.Integer} object.
- * @param style
- * a int.
- */
public RepresentationElement(CdmFormFactory formFactory,
ICdmFormElement formElement, TermBase term,
Integer textHeight, int style, boolean fill) {
+ this(formFactory, formElement, null, term, textHeight, style, fill);
+ }
+
+ public RepresentationElement(CdmFormFactory formFactory,
+ ICdmFormElement formElement, Representation representation, TermBase term,
+ Integer textHeight, int style, boolean fill) {
super(formFactory, formElement);
formFactory.addPropertyChangeListener(this);
-
+ setSelectedRepresentation(representation);
element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
- element_abbrevLabel = this.formFactory
- .createTextWithLabelElement(formElement, "abbrev. Label",
- null, style);
+ element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
+ element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
createRepresentationEditingElements(formElement, style);
}
setTerm(term, fill);
+ //if(representation!=null){
+
+ //}
}
- /**
- * <p>
- * Constructor for MultilanguageTextElement.
- * </p>
- *
- * @param formFactory
- * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
- * object.
- * @param formElement
- * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
- * object.
- * @param representation
- * a {@link eu.etaxonomy.cdm.model.common.Representation} object.
- * @param term
- * a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
- * @param textHeight
- * a {@link java.lang.Integer} object.
- * @param style
- * a int.
- */
public RepresentationElement(CdmFormFactory formFactory,
- ICdmFormElement formElement, Representation representation, TermBase term,
+ ICdmFormElement formElement, Representation representation, AbstractTermDto term,
Integer textHeight, int style, boolean fill) {
super(formFactory, formElement);
formFactory.addPropertyChangeListener(this);
-
+ if(representation!=null){
+ setSelectedRepresentation(representation);
+ }
element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
- element_abbrevLabel = this.formFactory
- .createTextWithLabelElement(formElement, "abbrev. Label",
- null, style);
+ element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
+ element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
createRepresentationEditingElements(formElement, style);
+
}
- setTerm(term, fill);
- setSelectedRepresentation(representation);
-
+ setTermDto(term, fill);
+ if(representation!=null){
+ setSelectedRepresentation(representation);
+ }
+
}
protected void createRepresentationEditingElements(
ICdmFormElement formElement, int style) {
-
+ removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
+ SWT.PUSH);
+ removeRepresentation.setImage(ImageResources
+ .getImage(ImageResources.TRASH_ICON));
+ removeRepresentation.setToolTipText("Remove representation");
+ removeRepresentation.addSelectionListener(new DeleteListener(this));
+ addControl(removeRepresentation);
+ boolean addNullValue = false;
+ if (this.selectedRepresentation == null) {
+ addNullValue = true;
+ }
combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
- "", null, true, style);
-
- combo_language.addSelectionListener(this);
+ "", null, addNullValue, style);
- addControl(formFactory.createLabel(getLayoutComposite(), ""));
-
-
- }
+ }
public List<Language> getLanguages() {
ArrayList<Language> languageList = new ArrayList<Language>();
- for (Representation rep: term.getRepresentations()){
+ Set<Representation> reps = null;
+ if (term != null){
+ reps = term.getRepresentations();
+ }else{
+ reps = termDto.getRepresentations();
+ }
+
+ for (Representation rep: reps){
languageList.add(rep.getLanguage());
}
return languageList;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
- * .events.SelectionEvent)
- */
- /** {@inheritDoc} */
- @Override
- public void widgetSelected(SelectionEvent e) {
- Language selectedLanguage = combo_language.getSelection();
- if (selectedLanguage != null) {
- selectedRepresentation = getTerm().getRepresentation(
- selectedLanguage);
- if (selectedRepresentation == null){
- selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
- }
- element_Label.setText(selectedRepresentation.getLabel());
- element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
- element_text.setText(selectedRepresentation.getDescription());
-
+ public void setTerm(
+ TermBase term, boolean update) {
+ this.term = term;
+ if (term.getRepresentations().isEmpty()){
+ //if the term has no representation at all, create a default one.
+ Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
+ term.addRepresentation(rep);
}
+// if (selectedRepresentation != null) {
+// combo_language.setTerms(getLanguages());
+//
+// } else{
+// setEnabledControls(false);
+// if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
+// removeRepresentation.setEnabled(false);
+// }
+// }
+ if (update){
+ updateControls();
+ }
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
- * .swt.events.SelectionEvent)
- */
- /** {@inheritDoc} */
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- }
-
- /**
- * <p>
- * Setter for the field <code>multilanguageText</code>.
- * </p>
- *
- * @param multilanguageText
- * the multilanguageText to set
- */
- public void setTerm(
- TermBase term, boolean update) {
- this.term = term;
+ public void setTermDto(
+ AbstractTermDto term, boolean update) {
+ this.termDto = term;
+ if (term.getRepresentations().isEmpty()){
+ //if the term has no representation at all, create a default one.
+ Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
+ term.addRepresentation(rep);
+ }
- if (selectedRepresentation != null) {
+ if (selectedRepresentation != null && combo_language != null) {
combo_language.setTerms(getLanguages());
- }
+
+ }
+// else if (!term.getRepresentations().isEmpty()){
+// setEnabledControls(false);
+// if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
+// removeRepresentation.setEnabled(false);
+// }
+// }
if (update){
- updateControls();
+ updateControls();
}
}
- /**
- *
- */
+ private void setEnabledControls(boolean enabled){
+ element_Label.setEnabled(enabled);
+ element_abbrevLabel.setEnabled(enabled);
+ element_plural.setEnabled(enabled);
+ element_text.setEnabled(enabled);
+ }
+
+ @Override
+ public void setEnabled(boolean isEnabled){
+ this.isEnabled = isEnabled;
+ setEnabledControls(isEnabled);
+
+ }
+
+ @Override
+ public boolean isEnabled(){
+ return isEnabled;
+ }
+
protected void updateControls() {
- Representation preferredRepresentation = term
+ Representation preferredRepresentation = null;
+ if (term != null){
+ preferredRepresentation = term
.getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
+ }else{
+ preferredRepresentation = termDto
+ .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
+ }
- element_Label.setText(preferredRepresentation.getLabel());
- element_abbrevLabel.setText(preferredRepresentation.getAbbreviatedLabel());
- element_text.setText(preferredRepresentation.getDescription());
+ element_Label.setText(preferredRepresentation != null? preferredRepresentation.getLabel(): null);
+ element_abbrevLabel.setText(preferredRepresentation != null? preferredRepresentation.getAbbreviatedLabel(): null);
+ element_plural.setText(preferredRepresentation != null? preferredRepresentation.getPlural(): null);
+ element_text.setText(preferredRepresentation != null? preferredRepresentation.getDescription(): null);
selectedRepresentation = preferredRepresentation;
if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
+ boolean removePossible = false;
+ if (term != null){
+ removePossible = term.getRepresentations().size() > 1 ;
+ }else{
+ removePossible = termDto.getRepresentations().size() > 1 ;
+ }
+ removeRepresentation.setEnabled(removePossible);
+
}
}
- /**
- * <p>
- * Getter for the field <code>multilanguageText</code>.
- * </p>
- *
- * @return the multilanguageText
- */
public TermBase getTerm() {
return term;
}
+ public AbstractTermDto getTermDto() {
+ return termDto;
+ }
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
- * .eclipse.jface.util.PropertyChangeEvent)
- */
- /** {@inheritDoc} */
@Override
public void propertyChange(PropertyChangeEvent event) {
if (event == null) {
.getText();
selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+ }
+ else if (eventSource == element_plural){
+ String plural = ((TextWithLabelElement) eventSource)
+ .getText();
+ selectedRepresentation.setPlural(plural);
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
} else if (eventSource == element_Label){
String label = ((TextWithLabelElement) eventSource)
.getText();
firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
} else if (eventSource == button){
firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+ } else if (eventSource == combo_language){
+ if (combo_language.getSelection() != null){
+ setEnabledControls(true);
+ boolean removePossible = false;
+ if (term != null){
+ removePossible = term.getRepresentations().size() > 1 ;
+ }else{
+ removePossible = termDto.getRepresentations().size() > 1 ;
+ }
+ removeRepresentation.setEnabled(removePossible);
+
+ Language selectedLanguage = combo_language.getSelection();
+ if (selectedLanguage != null) {
+ if (getTerm() != null){
+ selectedRepresentation = getTerm().getRepresentation(selectedLanguage);
+ }else{
+ selectedRepresentation = getTermDto().getRepresentation(selectedLanguage);
+ }
+ if (selectedRepresentation == null){
+ selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
+ }
+ element_Label.setText(selectedRepresentation.getLabel());
+ element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
+ element_plural.setText(selectedRepresentation.getPlural());
+ element_text.setText(selectedRepresentation.getDescription());
+
+ }else {
+ setEnabledControls(false);
+ }
+ } else{
+ setEnabledControls(false);
+ removeRepresentation.setEnabled(false);
+ }
+ //firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+ firePropertyChangeEvent(event);
}
}
- /**
- * @return the selectedRepresentation
- */
public Representation getSelectedRepresentation() {
return selectedRepresentation;
}
- /**
- * @param selectedRepresentation the selectedRepresentation to set
- */
public void setSelectedRepresentation(Representation selectedRepresentation) {
- if (selectedRepresentation == null){
- selectedRepresentation = Representation.NewInstance("", "", "", null);
- }
+// if (selectedRepresentation == null){
+// selectedRepresentation = Representation.NewInstance("", "", "", null);
+// }
this.selectedRepresentation = selectedRepresentation;
+
+ }
+
+ private class DeleteListener extends SelectionAdapter {
+
+ private final RepresentationElement element;
+
+ public DeleteListener(RepresentationElement element) {
+ this.element = element;
+ }
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (term != null){
+ term.removeRepresentation(selectedRepresentation);
+ }else {
+ termDto.getRepresentations().remove(selectedRepresentation);
+ }
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(
+ this, e));
+ updateControls();
+ }
+ }
+
+ /**
+ * @param isEnabled
+ */
+ public void setLanguageComboEnabled(boolean isEnabled) {
+ this.combo_language.setEnabled(isEnabled);
}
}