-// $Id$
/**
* Copyright (C) 2007 EDIT
* European Distributed Institute of Taxonomy
* 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.
*/
-
package eu.etaxonomy.taxeditor.ui.section.reference;
import java.util.ArrayList;
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.agent.TeamOrPersonBase;
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.store.StoreUtil;
import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
+import eu.etaxonomy.taxeditor.ui.element.CacheRelevance;
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.LsidWithExceptionLabelElement;
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.section.common.ExternalLinksSection;
import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
/**
- * <p>
- * ReferenceBaseDetailElement class.
- * </p>
- *
* @author n.hoffmann
* @created Mar 2, 2010
- * @version 1.0
*/
public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElement<Reference>
implements IErrorIntolerableElement, IExceptionHandler {
- private ToggleableTextElement toggleableAbbrevCache;
+ boolean isNomenclaturalReference = false;
+
+ private ToggleableTextElement toggleableAbbrevCache;
private TextWithLabelElement text_edition;
private TextWithLabelElement text_editor;
private TextWithLabelElement text_volume;
private TextWithLabelElement text_abbrevTitle;
private TextWithLabelElement text_title;
+ private DoiWithLabelElement text_doi;
private UriWithLabelElement text_uri;
- private EntitySelectionElement<AgentBase> selection_authorTeam;
- private TimePeriodElement element_timePeriod;
+ private LsidWithExceptionLabelElement text_lsid;
+ private DateElement text_accessed;
+ private EntitySelectionElement<TeamOrPersonBase> selection_authorTeam;
+ private VerbatimTimePeriodElement element_timePeriod;
private EntitySelectionElement<Reference> selection_inReference;
private EntitySelectionElement<Institution> selection_institution;
private EnumComboElement<ReferenceType> combo_referenceType;
-
+ private ExternalLinksSection externalLinks;
private EntitySelectionElement<Reference> selection_inSeries;
+ private void registerCacheElements() {
+ registerCacheRelevance(text_edition, toggleable_cache, toggleableAbbrevCache);
+ registerCacheRelevance(text_pages, toggleable_cache);
+ registerCacheRelevance(text_series, toggleable_cache, toggleableAbbrevCache);
+ registerCacheRelevance(text_volume, toggleable_cache, toggleableAbbrevCache);
+ registerCacheRelevance(text_abbrevTitle, toggleableAbbrevCache);
+ registerCacheRelevance(text_title, toggleable_cache);
+ registerCacheRelevance(text_accessed, toggleable_cache, toggleableAbbrevCache);
+ registerCacheRelevance(selection_authorTeam, toggleable_cache, toggleableAbbrevCache);
+ registerCacheRelevance(element_timePeriod, toggleable_cache, toggleableAbbrevCache);
+ registerCacheRelevance(selection_inReference, toggleable_cache, toggleableAbbrevCache);
+ registerCacheRelevance(combo_referenceType, toggleable_cache, toggleableAbbrevCache);
+ }
+
/**
- * <p>
* Constructor for ReferenceBaseDetailElement.
- * </p>
- *
- * @param cdmFormFactory
- * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
- * object.
- * @param formElement
- * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
- * object.
- * @param style
- * a int.
*/
public ReferenceDetailElement(CdmFormFactory cdmFormFactory,
ICdmFormElement formElement, int style) {
super(cdmFormFactory, formElement);
}
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.forms.section.cdmdetail.AbstractCdmDetailComposite
- * #createControl(org.eclipse.swt.widgets.Composite, int)
- */
- /** {@inheritDoc} */
+ public ReferenceDetailElement(CdmFormFactory cdmFormFactory,
+ ICdmFormElement formElement, boolean isNomenclaturalReference, int style) {
+ this(cdmFormFactory, formElement, style);
+ this.isNomenclaturalReference = isNomenclaturalReference;
+
+ }
+ public boolean isNomenclaturalReference() {
+ return isNomenclaturalReference;
+ }
+
+ public void setNomenclaturalReference(boolean isNomenclaturalReference) {
+ this.isNomenclaturalReference = isNomenclaturalReference;
+ }
+
@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(),
- entity.isProtectedAbbrevTitleCache(), style);
+ "Nomencl. Cache", entity.getAbbrevTitleCache(),
+ entity.isProtectedAbbrevTitleCache(), CacheRelevance.CACHE2, style);
combo_referenceType = formFactory.createEnumComboElement(ReferenceType.class,
formElement, style);
combo_referenceType.setSelection(entity.getType());
// title
- text_title = formFactory.createTextWithLabelElement(formElement,
- "Title", entity.getTitle(), style);
+ text_title = formFactory.createMultiLineTextWithLabel(formElement,
+ "Title", 60, style);
+ text_title.setText(entity.getTitle());
// abbreviated title
text_abbrevTitle = formFactory.createTextWithLabelElement(formElement,
- "Abbrev. Title", entity.getAbbrevTitle(), style);
-
- // author team
- selection_authorTeam = formFactory
- .createSelectionElement(AgentBase.class,
- getConversationHolder(), formElement, "Author",
- entity.getAuthorship(),
- EntitySelectionElement.ALL, style);
-
+ "Nomencl. Title", entity.getAbbrevTitle(), style);
ReferenceType referenceType = entity.getType();
+ // author team
+ if(referenceType != null && !referenceType.equals(ReferenceType.Journal) && !referenceType.equals(ReferenceType.PrintSeries) ) {
+ if (isNomenclaturalReference){
+ selection_authorTeam = formFactory
+ .createSelectionElementWithAbbreviatedTitle(TeamOrPersonBase.class,getConversationHolder(),
+ formElement, "Author",
+ entity.getAuthorship(),
+ EntitySelectionElement.ALL, style);
+ }else{
+ selection_authorTeam = formFactory
+ .createSelectionElement(TeamOrPersonBase.class,
+ formElement, "Author",
+ entity.getAuthorship(),
+ EntitySelectionElement.ALL, style);
+ }
+ }
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);
}
// 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);
+ }
+
+ createUri(this, entity, SWT.NULL);
+
+// externalLinks = formFactory.createExternalLinksSection(getConversationHolder(), formElement, StoreUtil.getSectionStyle(ExternalLinksSection.class, DescriptionElementSource.class.getCanonicalName()));
+// externalLinks.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 3));
+// externalLinks.setEntity(entity);
+// externalLinks.setFont(AbstractUtility.getFont(Resources.COLOR_FONT_DEFAULT));
+// externalLinks.setEmptySectionString("No links yet.");
+
+ if(referenceType != null && (!referenceType.equals(ReferenceType.Journal) && !referenceType.equals(ReferenceType.PrintSeries) && !referenceType.equals(ReferenceType.PersonalCommunication))) {
+ text_doi = formFactory.createDoiWithLabelElement(formElement, "DOI", entity.getDoi(), style);
+ }
+
+ createLsid(this, entity, SWT.NULL);
+ createAbstract(this, entity, SWT.NULL);
+
+ registerCacheElements();
- 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);
}
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.forms.section.cdmdetail.AbstractCdmDetailComposite
- * #updateContent()
- */
- /** {@inheritDoc} */
@Override
protected void updateContent() {
if (getEntity() == null) {
super.updateContent();
// enable elements according to state of cache protection
- // setEnabled(getEntity().isProtectedTitleCache(), Arrays.asList(new
- // Object[]{text_cache}));
- toggleable_cache.setEnabled(getEntity().isProtectedTitleCache());
- toggleableAbbrevCache.setEnabled(getEntity().isProtectedAbbrevTitleCache());
- setIrrelevantReferenceDetail(false);
- setIrrelevantReferenceDetail(true);
+ toggleable_cache.setCacheEnabled(getEntity().isProtectedTitleCache());
+ toggleableAbbrevCache.setCacheEnabled(getEntity().isProtectedAbbrevTitleCache());
}
/**
* Creates an in reference for reference types that do hav this.
- *
- * @param element
- * @param referenceType
- * @param reference
- * @param style
*/
private void createInReferenceByType(ICdmFormElement element,
ReferenceType referenceType, Reference reference, int style) {
- boolean createInReferenceWidget = true;
- String label = "In Reference";
+
+ String label;
switch (referenceType) {
- case Generic:
- break;
- case Section:
- break;
+ case Book:
+ case Proceedings:
+ label = "In Series";
+ break;
case BookSection:
label = "Book";
break;
case InProceedings:
- label = "Print Series";
+ label = "Proceedings";
break;
case Article:
label = "Journal";
break;
- case WebPage:
- break;
default:
- createInReferenceWidget = false;
+ label = "In Reference";
}
+ boolean createInReferenceWidget = !ReferenceType.inReferenceContraints(referenceType).isEmpty();
+
if (createInReferenceWidget) {
selection_inReference = formFactory
.createSelectionElement(Reference.class,
- getConversationHolder(), element, label,
+ element, label,
reference.getInReference(),
EntitySelectionElement.ALL, style);
}
/**
* Creates additional controls to edit a generic reference
- *
- * @param element
- * @param reference
- * @param listener
- * @param style
*/
private void createGenericControls(ICdmFormElement element,
Reference reference, int style) {
/**
* Creates additional controls to edit a publication
- *
- * @param element
- * @param reference
- * @param listener
- * @param style
*/
private void createPublicationControls(ICdmFormElement element,
ReferenceType referenceType, Reference reference, int 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);
}
// school
selection_institution = formFactory
.createSelectionElement(Institution.class,
- getConversationHolder(), element, "School",
+ element, "School",
reference.getSchool(),
EntitySelectionElement.ALL, style);
}
/**
* Creates additional controls to edit a section
- *
- * @param element
- * @param reference
- * @param style
*/
private void createSectionControls(ICdmFormElement element,
Reference reference, int style) {
/**
* Creates additional controls to edit a volume
- *
- * @param element
- * @param reference
- * @param style
*/
private void createVolumeControls(ICdmFormElement element,
Reference reference, int style) {
reference.getSeriesPart(), style);
}
- /**
- *
- * @param element
- * @param referenceType
- * @param reference
- * @param style
- */
private void createPrintedUnitControls(ICdmFormElement element,
ReferenceType referenceType, Reference reference, int style) {
// in series
- selection_inSeries = formFactory
- .createSelectionElement(Reference.class,
- getConversationHolder(), element, "In Series",
- (Reference) reference.getInSeries(),
- EntitySelectionElement.ALL, style);
+ //handled in generic in-Reference part
// editor
text_editor = formFactory.createTextWithLabelElement(element, "Editor",
// 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,
+ private void createAbstract(ICdmFormElement element,
Reference reference, int style) {
- // uri
- text_uri = formFactory.createUriWithLabelElement(element, "URI",
- reference.getUri(), style);
- // abstract
+
text_referenceAbstract = formFactory.createMultiLineTextWithLabel(
element, "Reference Abstract", 100, style);
text_referenceAbstract.setText(reference.getReferenceAbstract());
}
- /** {@inheritDoc} */
+ private void createLsid(ICdmFormElement element,
+ Reference reference, int style) {
+ text_lsid = formFactory.createLsidWithExceptionLabelElement(element, "LSID",
+ reference.getLsid(), style);
+ }
+
+ private void createUri(ICdmFormElement element,
+ Reference reference, int style) {
+
+ text_uri = formFactory.createUriWithLabelElement(element, "URI",
+ reference.getUri(), style);
+ if (reference.isDynamic()){
+ createWebPageControls(this, reference, style);
+ }
+ }
+
@Override
public void handleEvent(Object eventSource) {
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());
+ selection_authorTeam.getEntity());
} else if (eventSource == selection_inReference) {
getEntity().setInReference(selection_inReference.getSelection());
} else if (eventSource == selection_inSeries) {
getEntity().setSeriesPart(text_series.getText());
} else if (eventSource == text_title ) {
getEntity().setTitle(text_title.getText());
- if (!toggleable_cache.isEnabled()){
+ if (!toggleable_cache.isCacheEnabled()){
toggleable_cache.setText(getEntity().generateTitle());
}
} else if (eventSource == text_abbrevTitle ) {
getEntity().setAbbrevTitle(text_abbrevTitle.getText());
- if (!toggleableAbbrevCache.isEnabled()){
+ if (!toggleableAbbrevCache.isCacheEnabled()){
toggleableAbbrevCache.setText(getEntity().generateAbbrevTitle());
}
} else if (eventSource == text_uri) {
getEntity().setUri(text_uri.parseText());
- } else if (eventSource == text_volume) {
+ } else if (eventSource == text_lsid) {
+ getEntity().setLsid(text_lsid.parseText());
+ } else if (eventSource == text_volume) {
getEntity().setVolume(text_volume.getText());
- }
+ }else if (eventSource == text_doi) {
+ getEntity().setDoi(text_doi.parseText());
+ }else if (text_accessed != null && 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());
}
firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
}
-
@Override
public void updateToggleableCacheField() {
if (!getEntity().isProtectedTitleCache()) {
}
protected void handleToggleableAbbrevTitleField() {
- boolean pushedAbbrevState = toggleableAbbrevCache.getState();
- getEntity().setAbbrevTitleCache(toggleableAbbrevCache.getText(), pushedAbbrevState);
- setIrrelevantReferenceDetail(true);
+ getEntity().setAbbrevTitleCache(
+ toggleableAbbrevCache.getText(), toggleableAbbrevCache.getState());
updateToggleableCacheField();
+ updateCacheRelevance();
}
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleException
- * (eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent)
- */
- /** {@inheritDoc} */
@Override
public void handleException(CdmPropertyChangeEvent event) {
exceptionOccurred(event);
}
- /*
- * (non-Javadoc)
- *
- * @see eu.etaxonomy.taxeditor.forms.IExceptionHandler#clearException()
- */
- /** {@inheritDoc} */
@Override
public void clearException() {
exceptionOccurred(null);
}
- private final List<IExceptionHandler> exceptionHandlers = new ArrayList<IExceptionHandler>();
+ private final List<IExceptionHandler> exceptionHandlers = new ArrayList<>();
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#addExceptionHandler
- * (eu.etaxonomy.taxeditor.forms.IExceptionHandler)
- */
- /** {@inheritDoc} */
@Override
public void addExceptionHandler(IExceptionHandler handler) {
exceptionHandlers.add(handler);
}
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#removeExceptionHandler
- * (eu.etaxonomy.taxeditor.forms.IExceptionHandler)
- */
- /** {@inheritDoc} */
@Override
public void removeExceptionHandler(IExceptionHandler handler) {
exceptionHandlers.remove(handler);
}
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#exceptionOccurred
- * (eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent)
- */
- /** {@inheritDoc} */
@Override
public void exceptionOccurred(CdmPropertyChangeEvent event) {
for (IExceptionHandler handler : exceptionHandlers) {
@Override
protected void handleToggleableCacheField() {
-
- boolean pushedState = toggleable_cache.getState();
- getEntity().setTitleCache(toggleable_cache.getText(), pushedState);
- setIrrelevantReferenceDetail(false);
+ getEntity().setTitleCache(toggleable_cache.getText(), toggleable_cache.getState());
updateToggleableCacheField();
+ updateCacheRelevance();
}
protected void setIrrelevantReferenceDetail(boolean abbrev){
- List<Object> except = new ArrayList();
+ 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);
- pushedState = toggleableAbbrevCache.getState();
} else{
- except.add(text_abbrevTitle);
- pushedState = toggleable_cache.getState();
+ except.add(text_abbrevTitle);
}
+
switch( getEntity().getType()){
case Journal:
except.add(element_timePeriod);
default:
break;
}
- setIrrelevant(pushedState, except);
+
+ updateCacheRelevance();
}
-}
+}
\ No newline at end of file