- added support for term retrieval by TermVocabulary
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / occurrence / media / MediaSpecimenGeneralDetailElement.java
1 // $Id$
2 /**
3 * Copyright (C) 2013 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.ui.section.occurrence.media;
11
12 import org.eclipse.swt.widgets.Label;
13 import org.eclipse.ui.forms.widgets.ExpandableComposite;
14 import org.joda.time.DateTime;
15
16 import eu.etaxonomy.cdm.api.service.IVocabularyService;
17 import eu.etaxonomy.cdm.model.agent.AgentBase;
18 import eu.etaxonomy.cdm.model.common.DefinedTerm;
19 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
20 import eu.etaxonomy.cdm.model.common.Language;
21 import eu.etaxonomy.cdm.model.common.OriginalSourceType;
22 import eu.etaxonomy.cdm.model.common.TermVocabulary;
23 import eu.etaxonomy.cdm.model.common.VocabularyEnum;
24 import eu.etaxonomy.cdm.model.media.Media;
25 import eu.etaxonomy.cdm.model.occurrence.Collection;
26 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
27 import eu.etaxonomy.cdm.model.reference.Reference;
28 import eu.etaxonomy.taxeditor.store.CdmStore;
29 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
30 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
31 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
32 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
33 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
34 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
35 import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
36 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
37 import eu.etaxonomy.taxeditor.ui.section.media.MediaRepresentationSection;
38 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
39
40 /**
41 * @author pplitzner
42 * @date 16.12.2013
43 *
44 */
45 public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<MediaSpecimen> {
46
47 private final TermVocabulary mediaSpecimenVocabulary = CdmStore.getService(IVocabularyService.class).find(VocabularyEnum.MediaSpecimenKindOfUnit.getUuid());
48
49 private TermComboElement<DefinedTerm> comboKindOfUnit;
50 private LanguageStringWithLabelElement textTitleLanguageString;
51 private EntitySelectionElement<AgentBase> selectionArtist;
52 private DateElement date;
53 private LanguageStringWithLabelElement textMethodLanguageString;
54 private EntitySelectionElement<Collection> selection_collection;
55 private TextWithLabelElement text_accessionNumber;
56 private EntitySelectionElement<Reference> selection_publishedIn;
57
58 private MediaRepresentationSection mediaRepresentationSection;
59 /**
60 * @param formFactory
61 * @param formElement
62 */
63 public MediaSpecimenGeneralDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
64 super(formFactory, formElement);
65 }
66
67 /*
68 * (non-Javadoc)
69 *
70 * @see
71 * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#createControls
72 * (eu.etaxonomy.taxeditor.forms.ICdmFormElement, java.lang.Object, int)
73 */
74 @Override
75 protected void createControls(ICdmFormElement formElement, MediaSpecimen entity, int style) {
76 Media media = entity.getMediaSpecimen();
77 if(media==null){
78 formFactory.createLabel(formElement, "No media attached to this MediaSpecimen!");
79 }
80 else{
81 comboKindOfUnit = formFactory.createDefinedTermComboElement(mediaSpecimenVocabulary, formElement, "Kind of Media", entity.getKindOfUnit(), style);
82 textTitleLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Motif", media.getTitle(), style);
83 selectionArtist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), formElement, "Prepared by", media.getArtist(), EntitySelectionElement.ALL, style);
84
85 Label label = new Label(getLayoutComposite(), style);
86 label.setText("Preparation Date (yyyy-mm-dd)");
87 // label.setLayoutData(LayoutConstants.LEFT());
88 date = new DateElement(formElement.getLayoutComposite(), entity.getMediaSpecimen().getMediaCreated(), style);
89 date.initController(formFactory, formElement);
90
91
92 textMethodLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Method", media.getDescription(Language.getDefaultLanguage()), style);
93 selection_collection = formFactory.createSelectionElement(Collection.class, getConversationHolder(), formElement, "Collection", entity.getCollection(), EntitySelectionElement.ALL, style);
94 text_accessionNumber = formFactory.createTextWithLabelElement(formElement, "Accession Number", entity.getAccessionNumber(), style);
95
96 //the first PrimaryMediaSource is used for storing the reference
97 Reference<?> publishedIn = null;
98 for(IdentifiableSource source:media.getSources()){
99 if(source.getType()==OriginalSourceType.PrimaryMediaSource){
100 publishedIn = source.getCitation();
101 break;
102 }
103 }
104 selection_publishedIn = formFactory.createSelectionElement(Reference.class, getConversationHolder(), formElement, "Published in", publishedIn, EntitySelectionElement.ALL, style);
105
106 mediaRepresentationSection = formFactory.createMediaRepresentationSection(getConversationHolder(), formElement, ExpandableComposite.TWISTIE);
107 mediaRepresentationSection.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
108 mediaRepresentationSection.setEntity(media);
109 }
110 }
111
112 /*
113 * (non-Javadoc)
114 *
115 * @see
116 * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java
117 * .lang.Object)
118 */
119 @Override
120 public void handleEvent(Object eventSource) {
121 Media media = getEntity().getMediaSpecimen();
122 if(media==null){
123 media = Media.NewInstance();
124 getEntity().setMediaSpecimen(media);
125 }
126 if(eventSource==comboKindOfUnit){
127 getEntity().setKindOfUnit(comboKindOfUnit.getSelection());
128 }
129 else if(eventSource==textTitleLanguageString){
130 media.putTitle(textTitleLanguageString.getLanguageString());
131 }
132 else if(eventSource==date.getController()){
133 DateTime dateTime = date.getController().getDateTime();
134 media.setMediaCreated(dateTime);
135 }
136 else if(eventSource==selectionArtist){
137 media.setArtist(selectionArtist.getSelection());
138 }
139 else if(eventSource==textMethodLanguageString){
140 media.addDescription(textMethodLanguageString.getLanguageString());
141 }
142 else if (eventSource == selection_collection) {
143 getEntity().setCollection(selection_collection.getSelection());
144 }
145 else if (eventSource == text_accessionNumber) {
146 getEntity().setAccessionNumber(text_accessionNumber.getText());
147 }
148 else if(eventSource==selection_publishedIn){
149 IdentifiableSource primaryMediaSource = null;
150 for(IdentifiableSource source:media.getSources()){
151 if(source.getType()==OriginalSourceType.PrimaryMediaSource){
152 primaryMediaSource = source;
153 }
154 }
155 if(primaryMediaSource==null){
156 primaryMediaSource = IdentifiableSource.NewInstance(OriginalSourceType.PrimaryMediaSource);
157 media.addSource(primaryMediaSource);
158 }
159 else{
160 primaryMediaSource.setCitation(selection_publishedIn.getSelection());
161 }
162 }
163 }
164 }