-// $Id$
/**
* Copyright (C) 2007 EDIT
* European Distributed Institute of Taxonomy
package eu.etaxonomy.taxeditor.ui.section.reference;
+
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.swt.SWT;
+import org.joda.time.DateTime;
import eu.etaxonomy.cdm.model.agent.AgentBase;
import eu.etaxonomy.cdm.model.agent.Institution;
import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
import eu.etaxonomy.cdm.model.reference.ReferenceType;
-import eu.etaxonomy.taxeditor.model.AuthorHelper;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
+import eu.etaxonomy.taxeditor.ui.element.DoiWithLabelElement;
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
import eu.etaxonomy.taxeditor.ui.element.IErrorIntolerableElement;
import eu.etaxonomy.taxeditor.ui.element.IExceptionHandler;
import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
-import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
+import eu.etaxonomy.taxeditor.ui.element.VerbatimTimePeriodElement;
+import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
import eu.etaxonomy.taxeditor.ui.section.AbstractIdentifiableEntityDetailElement;
import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
*
* @author n.hoffmann
* @created Mar 2, 2010
- * @version 1.0
*/
public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElement<Reference>
implements IErrorIntolerableElement, IExceptionHandler {
+
+
private ToggleableTextElement toggleableAbbrevCache;
private TextWithLabelElement text_edition;
private TextWithLabelElement text_publisher;
private TextWithLabelElement text_referenceAbstract;
private TextWithLabelElement text_series;
- private TextWithLabelElement text_seriesPart;
+// private TextWithLabelElement text_seriesPart;
private TextWithLabelElement text_volume;
private TextWithLabelElement text_abbrevTitle;
private TextWithLabelElement text_title;
+ private DoiWithLabelElement text_doi;
private UriWithLabelElement text_uri;
+ private DateElement text_accessed;
private EntitySelectionElement<AgentBase> selection_authorTeam;
- private TimePeriodElement element_timePeriod;
+ private VerbatimTimePeriodElement element_timePeriod;
private EntitySelectionElement<Reference> selection_inReference;
private EntitySelectionElement<Institution> selection_institution;
private EnumComboElement<ReferenceType> combo_referenceType;
private EntitySelectionElement<Reference> selection_inSeries;
+ private boolean isWizard;
/**
* <p>
* a int.
*/
public ReferenceDetailElement(CdmFormFactory cdmFormFactory,
- ICdmFormElement formElement, int style) {
+ ICdmFormElement formElement, int style, boolean isWizard) {
super(cdmFormFactory, formElement);
+ this.isWizard = isWizard;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.forms.section.cdmdetail.AbstractCdmDetailComposite
- * #createControl(org.eclipse.swt.widgets.Composite, int)
- */
+
/** {@inheritDoc} */
@Override
protected void createControls(ICdmFormElement formElement,
Reference entity, int style) {
+ setWarnForReferencingObjects(formElement);
toggleable_cache = formFactory.createToggleableTextField(formElement,
"Reference Cache", entity.getTitleCache(),
entity.isProtectedTitleCache(), style);
toggleableAbbrevCache = formFactory.createToggleableTextField(formElement,
- "Abbrev. Cache", entity.getAbbrevTitleCache(),
+ "Nomencl. Cache", entity.getAbbrevTitleCache(),
entity.isProtectedAbbrevTitleCache(), style);
combo_referenceType = formFactory.createEnumComboElement(ReferenceType.class,
"Title", entity.getTitle(), style);
// abbreviated title
text_abbrevTitle = formFactory.createTextWithLabelElement(formElement,
- "Abbrev. Title", entity.getAbbrevTitle(), style);
-
+ "Nomencl. Title", entity.getAbbrevTitle(), style);
+ ReferenceType referenceType = entity.getType();
// author team
- selection_authorTeam = formFactory
- .createSelectionElement(AgentBase.class,
- getConversationHolder(), formElement, "Author",
- AuthorHelper.getAuthor(entity.getAuthorship()),
- EntitySelectionElement.ALL, style);
+ if(referenceType != null && !referenceType.equals(ReferenceType.Journal) && !referenceType.equals(ReferenceType.PrintSeries) ) {
+ selection_authorTeam = formFactory
+ .createSelectionElement(AgentBase.class,//getConversationHolder(),
+ formElement, "Author",
+ entity.getAuthorship(),
+ EntitySelectionElement.ALL, style);
+ }
+
- ReferenceType referenceType = entity.getType();
if (referenceType != null) {
if (referenceType.equals(ReferenceType.Generic)) {
createGenericControls(this, entity, SWT.NULL);
createPublicationControls(this, referenceType, entity, SWT.NULL);
+
} else {
if (referenceType.isPrintedUnit()) {
createPrintedUnitControls(this, referenceType, entity,
SWT.NULL);
}
+// if (referenceType.equals(ReferenceType.Proceedings)) {
+// text_isbn = formFactory.createTextWithLabelElement(this, "ISBN",
+// entity.getIsbn(), style);
+// }
if (referenceType.isPublication()) {
createPublicationControls(this, referenceType, entity,
SWT.NULL);
if (referenceType.isSection()) {
createSectionControls(this, entity, SWT.NULL);
}
+
}
}
// date published
- element_timePeriod = formFactory.createTimePeriodElement(formElement,
- "Date Published", entity.getDatePublished(), style);
+ if(referenceType != null && !referenceType.equals(ReferenceType.Journal) && !referenceType.equals(ReferenceType.PrintSeries)){
+ element_timePeriod = formFactory.createVerbatimTimePeriodElement(formElement,
+ "Date Published", entity.getDatePublished(), style);
+ }
+
+ if(referenceType != null && (!referenceType.equals(ReferenceType.Journal) && !referenceType.equals(ReferenceType.PrintSeries) && !referenceType.equals(ReferenceType.PersonalCommunication))) {
+ text_doi = formFactory.createDoiWithLabelElement(formElement, "DOI", entity.getDoi(), style);
+ }
createUriAndAbstract(this, entity, SWT.NULL);
+
+ handleToggleableAbbrevTitleField();
+ handleToggleableCacheField();
+ }
+
+ private void createWebPageControls(ReferenceDetailElement referenceDetailElement, Reference reference, int style) {
+ DateTime accessed = reference.getAccessed();
+
+ text_accessed = formFactory.createDateElement(referenceDetailElement, "Accessed", accessed, style, false);
+
}
/*
// Object[]{text_cache}));
toggleable_cache.setEnabled(getEntity().isProtectedTitleCache());
toggleableAbbrevCache.setEnabled(getEntity().isProtectedAbbrevTitleCache());
- setIrrelevant(toggleable_cache.getState(), Arrays.asList(new Object[] { toggleable_cache }));
- setIrrelevant(toggleableAbbrevCache.getState(), Arrays.asList(new Object[] { toggleableAbbrevCache}));
+ setIrrelevantReferenceDetail(false);
+ setIrrelevantReferenceDetail(true);
}
/**
label = "Book";
break;
case InProceedings:
- label = "Print Series";
+ label = "Proceedings";
break;
case Article:
label = "Journal";
if (createInReferenceWidget) {
selection_inReference = formFactory
- .createSelectionElement(Reference.class,
- getConversationHolder(), element, label,
+ .createSelectionElement(Reference.class,//getConversationHolder(),
+ element, label,
reference.getInReference(),
EntitySelectionElement.ALL, style);
}
// pages
text_pages = formFactory.createTextWithLabelElement(element, "Pages",
reference.getPages(), style);
+
+
}
/**
if (referenceType.equals(ReferenceType.Report)) {
// institution
selection_institution = formFactory
- .createSelectionElement(Institution.class,
- getConversationHolder(), element, "Institution",
+ .createSelectionElement(Institution.class,//getConversationHolder(),
+ element, "Institution",
reference.getInstitution(),
EntitySelectionElement.ALL, style);
}
if (referenceType.equals(ReferenceType.Thesis)) {
// school
selection_institution = formFactory
- .createSelectionElement(Institution.class,
- getConversationHolder(), element, "School",
+ .createSelectionElement(Institution.class,//getConversationHolder(),
+ element, "School",
reference.getSchool(),
EntitySelectionElement.ALL, style);
}
ReferenceType referenceType, Reference reference, int style) {
// in series
selection_inSeries = formFactory
- .createSelectionElement(Reference.class,
- getConversationHolder(), element, "In Series",
+ .createSelectionElement(Reference.class,//getConversationHolder(),
+ element, "In Series",
(Reference) reference.getInSeries(),
EntitySelectionElement.ALL, style);
text_editor = formFactory.createTextWithLabelElement(element, "Editor",
reference.getEditor(), style);
- // series part
+ /* series part
text_seriesPart = formFactory.createTextWithLabelElement(element,
"Series", reference.getSeriesPart(), style);
-
+*/
if (referenceType.equals(ReferenceType.Book)) {
// edition
text_edition = formFactory.createTextWithLabelElement(element,
"Edition", reference.getEdition(), style);
- // isbn
- text_isbn = formFactory.createTextWithLabelElement(element, "ISBN",
- reference.getIsbn(), style);
}
+ // isbn
+ text_isbn = formFactory.createTextWithLabelElement(element, "ISBN",
+ reference.getIsbn(), style);
}
private void createUriAndAbstract(ICdmFormElement element,
// uri
text_uri = formFactory.createUriWithLabelElement(element, "URI",
reference.getUri(), style);
+ if (reference.getType().equals(ReferenceType.WebPage)){
+ createWebPageControls(this, reference, style);
+ }
// abstract
text_referenceAbstract = formFactory.createMultiLineTextWithLabel(
element, "Reference Abstract", 100, style);
if (eventSource == combo_referenceType) {
getEntity().setType(combo_referenceType.getSelection());
updateContent();
+ //this is needed for the "new" wizards in order to redraw correctly
+ StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true);
} else if (eventSource == element_timePeriod) {
getEntity().setDatePublished(element_timePeriod.getTimePeriod());
clearException();
// selections
else if (eventSource == selection_authorTeam) {
getEntity().setAuthorship(
- (TeamOrPersonBase) selection_authorTeam.getSelection());
+ (TeamOrPersonBase) selection_authorTeam.getEntity());
} else if (eventSource == selection_inReference) {
getEntity().setInReference(selection_inReference.getSelection());
} else if (eventSource == selection_inSeries) {
getEntity().setPublisher(text_publisher.getText());
} else if (eventSource == text_referenceAbstract) {
getEntity().setReferenceAbstract(text_referenceAbstract.getText());
- } else if (eventSource == text_seriesPart) {
- getEntity().setSeriesPart(text_seriesPart.getText());
- } else if (eventSource == text_title) {
+ } else if (eventSource == text_series) {
+ getEntity().setSeriesPart(text_series.getText());
+ } else if (eventSource == text_title ) {
getEntity().setTitle(text_title.getText());
- toggleable_cache.setText(text_title.getText());
- } else if (eventSource == text_abbrevTitle) {
+ if (!toggleable_cache.isEnabled()){
+ toggleable_cache.setText(getEntity().generateTitle());
+ }
+ } else if (eventSource == text_abbrevTitle ) {
getEntity().setAbbrevTitle(text_abbrevTitle.getText());
- toggleableAbbrevCache.setText(text_abbrevTitle.getText());
+ if (!toggleableAbbrevCache.isEnabled()){
+ toggleableAbbrevCache.setText(getEntity().generateAbbrevTitle());
+ }
} else if (eventSource == text_uri) {
getEntity().setUri(text_uri.parseText());
} else if (eventSource == text_volume) {
getEntity().setVolume(text_volume.getText());
- }
+ }else if (eventSource == text_doi) {
+ getEntity().setDoi(text_doi.parseText());
+ }else if (eventSource == text_accessed.getController()) {
+ getEntity().setAccessed(text_accessed.getController().getDateTime());
+ }
if (eventSource != text_title && eventSource != text_abbrevTitle) {
// set abbrev title cache to null to force new generation
if(!getEntity().isProtectedAbbrevTitleCache()){
getEntity().setAbbrevTitleCache(null, getEntity().isProtectedAbbrevTitleCache());
}
+ if(!getEntity().isProtectedTitleCache()){
+ getEntity().setTitleCache(null, getEntity().isProtectedTitleCache());
+ }
+
toggleable_cache.setText(getEntity().getTitleCache());
toggleableAbbrevCache.setText(getEntity().getAbbrevTitleCache());
}
protected void handleToggleableAbbrevTitleField() {
boolean pushedAbbrevState = toggleableAbbrevCache.getState();
getEntity().setAbbrevTitleCache(toggleableAbbrevCache.getText(), pushedAbbrevState);
- setIrrelevant(pushedAbbrevState, Arrays.asList(new Object[] { toggleableAbbrevCache, toggleable_cache, text_title }));
+ setIrrelevantReferenceDetail(true);
updateToggleableCacheField();
}
}
}
}
+
+ @Override
+ protected void handleToggleableCacheField() {
+
+ boolean pushedState = toggleable_cache.getState();
+ getEntity().setTitleCache(toggleable_cache.getText(), pushedState);
+ setIrrelevantReferenceDetail(false);
+ updateToggleableCacheField();
+ }
+
+ protected void setIrrelevantReferenceDetail(boolean abbrev){
+
+ List<Object> except = new ArrayList();
+
+ except.addAll( Arrays.asList(new Object[] { toggleable_cache, toggleableAbbrevCache, text_editor, text_isbn, text_issn, text_organisation, text_pages, text_placePublished, text_publisher, text_referenceAbstract, text_uri, selection_institution}));
+ boolean pushedState;
+ if (abbrev){
+ except.add(text_title);
+ } else{
+ except.add(text_abbrevTitle);
+ }
+ pushedState = toggleableAbbrevCache.getState() || toggleable_cache.getState();
+
+ switch( getEntity().getType()){
+ case Journal:
+ except.add(element_timePeriod);
+ break;
+ case Book:
+ except.remove(text_series);
+ except.remove(text_edition);
+ break;
+ default:
+ break;
+ }
+
+ setIrrelevant(pushedState, except);
+ text_title.setIrrelevant(toggleable_cache.getState());
+ text_abbrevTitle.setIrrelevant(toggleableAbbrevCache.getState());
+ }
+
+
+
+
}