Merge branch 'release/5.19.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / occurrence / media / MediaSpecimenGeneralDetailElement.java
1 /**
2 * Copyright (C) 2013 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.ui.section.occurrence.media;
10
11 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
12 import eu.etaxonomy.cdm.api.service.IVocabularyService;
13 import eu.etaxonomy.cdm.model.agent.AgentBase;
14 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
15 import eu.etaxonomy.cdm.model.common.Language;
16 import eu.etaxonomy.cdm.model.common.TimePeriod;
17 import eu.etaxonomy.cdm.model.media.Media;
18 import eu.etaxonomy.cdm.model.occurrence.Collection;
19 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
20 import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
21 import eu.etaxonomy.cdm.model.reference.Reference;
22 import eu.etaxonomy.cdm.model.term.DefinedTerm;
23 import eu.etaxonomy.cdm.model.term.TermVocabulary;
24 import eu.etaxonomy.cdm.model.term.VocabularyEnum;
25 import eu.etaxonomy.taxeditor.store.CdmStore;
26 import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
27 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
28 import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
29 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
30 import eu.etaxonomy.taxeditor.ui.element.LabelElement;
31 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
32 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
33 import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
34 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
35 import eu.etaxonomy.taxeditor.ui.section.media.ITogglableMediaElement;
36 import eu.etaxonomy.taxeditor.ui.section.media.MediaDetailElement;
37 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
38
39 /**
40 * @author pplitzner
41 * @date 16.12.2013
42 *
43 */
44 public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<DerivedUnitFacade> implements ITogglableMediaElement{
45
46 private final TermVocabulary mediaSpecimenVocabulary = CdmStore.getService(IVocabularyService.class).find(VocabularyEnum.MediaSpecimenKindOfUnit.getUuid());
47
48 private TermComboElement<DefinedTerm> comboKindOfUnit;
49 private LanguageStringWithLabelElement textTitleLanguageString;
50 private EntitySelectionElement<AgentBase> selectionArtist;
51 private TimePeriodElement date;
52 private LanguageStringWithLabelElement textMethodLanguageString;
53 private EntitySelectionElement<Collection> selection_collection;
54 private TextWithLabelElement text_accessionNumber;
55 private EntitySelectionElement<Reference> selection_publishedIn;
56 private TextWithLabelElement text_published_in_detail;
57 private CheckboxElement checkIsPublish;
58
59 private MediaDetailElement mediaDetailElement;
60 /**
61 * @param formFactory
62 * @param formElement
63 */
64 public MediaSpecimenGeneralDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
65 super(formFactory, formElement);
66 }
67
68 @Override
69 protected void createControls(ICdmFormElement formElement, DerivedUnitFacade entity, int style) {
70 MediaSpecimen specimen = null;
71 if (entity.innerDerivedUnit() instanceof MediaSpecimen){
72 specimen = (MediaSpecimen)entity.innerDerivedUnit();
73 }
74 Media media = null;
75 if (specimen != null){
76 media = specimen.getMediaSpecimen();
77 }
78 if(media==null){
79 formFactory.createLabel(formElement, "No media attached to this MediaSpecimen!");
80 }
81 else{
82 comboKindOfUnit = formFactory.createDefinedTermComboElement(mediaSpecimenVocabulary, formElement, "Kind of Media", specimen.getKindOfUnit(), style);
83 textTitleLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Motif", media.getTitle(), style);
84 LabelElement label1 = formFactory.createLabel(formElement, "");
85
86 selectionArtist = formFactory.createSelectionElement(AgentBase.class, //getConversationHolder(),
87 formElement, "Prepared by", media.getArtist(), EntitySelectionElement.ALL, style);
88 TimePeriod mediaCreated = specimen.getMediaSpecimen().getMediaCreated();
89
90 date = formFactory.createTimePeriodElement(formElement, "Preparation Date", mediaCreated, style);
91 textMethodLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Method", media.getDescription(Language.getDefaultLanguage()), style);
92 // EmptyElement spacer = formFactory.createEmptyElement(formElement, ""); //$NON-NLS-1$
93 // spacer.setBackground(getPersistentBackground());
94 LabelElement label2 = formFactory.createLabel(formElement, "");
95
96 selection_collection = formFactory.createSelectionElement(Collection.class,// getConversationHolder(),
97 formElement, "Collection", entity.getCollection(), EntitySelectionElement.ALL, style);
98 text_accessionNumber = formFactory.createTextWithLabelElement(formElement, "Accession Number", entity.getAccessionNumber(), style);
99
100 LabelElement label3 = formFactory.createLabel(formElement, "");
101 //the first PrimaryMediaSource is used for storing the reference
102 Reference publishedIn = null;
103 String publishedInDetail = null;
104 for(IdentifiableSource source:media.getSources()){
105 if(source.getType()==OriginalSourceType.PrimaryMediaSource){
106 publishedIn = source.getCitation();
107 publishedInDetail = source.getCitationMicroReference();
108 break;
109 }
110 }
111 selection_publishedIn = formFactory.createSelectionElement(Reference.class, //getConversationHolder(),
112 formElement, "Published in", publishedIn, EntitySelectionElement.ALL, style);
113 text_published_in_detail = formFactory.createTextWithLabelElement(formElement, "Published in Detail", publishedInDetail, style);
114 LabelElement label4 = formFactory.createLabel(formElement, "");
115
116 checkIsPublish = formFactory.createCheckbox(formElement, "Publish", entity.isPublish(), style);
117
118 mediaDetailElement = formFactory.createMediaDetailElement(formElement);
119 mediaDetailElement.setEntity(media);
120 }
121 }
122
123 @Override
124 public void handleEvent(Object eventSource) {
125 Media media = ((MediaSpecimen)getEntity().innerDerivedUnit()).getMediaSpecimen();
126 if(media==null){
127 media = Media.NewInstance();
128 ((MediaSpecimen)getEntity().innerDerivedUnit()).setMediaSpecimen(media);
129 }
130 if(eventSource==comboKindOfUnit){
131 ((MediaSpecimen)getEntity().innerDerivedUnit()).setKindOfUnit(comboKindOfUnit.getSelection());
132 }
133 else if(eventSource==textTitleLanguageString){
134 media.putTitle(textTitleLanguageString.getLanguageString());
135 }
136 else if(eventSource==date){
137 TimePeriod dateTime = date.getTimePeriod();
138 media.setMediaCreated(dateTime);
139 }
140 else if(eventSource==selectionArtist){
141 media.setArtist(selectionArtist.getSelection());
142 }
143 else if(eventSource==textMethodLanguageString){
144 media.addDescription(textMethodLanguageString.getLanguageString());
145 }
146 else if (eventSource == selection_collection) {
147 getEntity().setCollection(selection_collection.getSelection());
148 }
149 else if (eventSource == text_accessionNumber) {
150 getEntity().setAccessionNumber(text_accessionNumber.getText());
151 }
152 else if(eventSource==selection_publishedIn){
153 IdentifiableSource primaryMediaSource = null;
154 for(IdentifiableSource source:media.getSources()){
155 if(source.getType()==OriginalSourceType.PrimaryMediaSource){
156 primaryMediaSource = source;
157 }
158 }
159 if(primaryMediaSource==null){
160 primaryMediaSource = IdentifiableSource.NewInstance(OriginalSourceType.PrimaryMediaSource);
161 media.addSource(primaryMediaSource);
162 }
163 else{
164 primaryMediaSource.setCitation(selection_publishedIn.getSelection());
165 }
166 }
167 else if(eventSource==text_published_in_detail){
168 IdentifiableSource primaryMediaSource = null;
169 for(IdentifiableSource source:media.getSources()){
170 if(source.getType()==OriginalSourceType.PrimaryMediaSource){
171 primaryMediaSource = source;
172 }
173 }
174 if(primaryMediaSource==null){
175 primaryMediaSource = IdentifiableSource.NewInstance(OriginalSourceType.PrimaryMediaSource);
176 media.addSource(primaryMediaSource);
177 }
178 else{
179 primaryMediaSource.setCitationMicroReference(text_published_in_detail.getText());
180 }
181 }
182 else if(eventSource==checkIsPublish){
183 ((MediaSpecimen)getEntity().innerDerivedUnit()).setPublish(checkIsPublish.getSelection());
184 }
185 }
186
187 @Override
188 public void toggleAdvancedMediaView() {
189 if(mediaDetailElement!=null){
190 mediaDetailElement.toggleAdvancedMediaView();
191 }
192 }
193
194 public boolean isAdvancedMediaView() {
195 if(mediaDetailElement==null){
196 return false;
197 }
198 return mediaDetailElement.isAdvancedMediaView();
199 }
200
201 }