- create an empty media for MediaSpecimen (fixes #4543)
[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.joda.time.DateTime;
13
14 import eu.etaxonomy.cdm.api.service.IVocabularyService;
15 import eu.etaxonomy.cdm.model.agent.AgentBase;
16 import eu.etaxonomy.cdm.model.common.DefinedTerm;
17 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
18 import eu.etaxonomy.cdm.model.common.Language;
19 import eu.etaxonomy.cdm.model.common.OriginalSourceType;
20 import eu.etaxonomy.cdm.model.common.TermVocabulary;
21 import eu.etaxonomy.cdm.model.common.VocabularyEnum;
22 import eu.etaxonomy.cdm.model.media.Media;
23 import eu.etaxonomy.cdm.model.occurrence.Collection;
24 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
25 import eu.etaxonomy.cdm.model.reference.Reference;
26 import eu.etaxonomy.taxeditor.store.CdmStore;
27 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
28 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
29 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
30 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
31 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
32 import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
33 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
34 import eu.etaxonomy.taxeditor.ui.section.media.MediaDetailElement;
35 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
36
37 /**
38 * @author pplitzner
39 * @date 16.12.2013
40 *
41 */
42 public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<MediaSpecimen> {
43
44 private final TermVocabulary mediaSpecimenVocabulary = CdmStore.getService(IVocabularyService.class).find(VocabularyEnum.MediaSpecimenKindOfUnit.getUuid());
45
46 private TermComboElement<DefinedTerm> comboKindOfUnit;
47 private LanguageStringWithLabelElement textTitleLanguageString;
48 private EntitySelectionElement<AgentBase> selectionArtist;
49 private DateElement date;
50 private LanguageStringWithLabelElement textMethodLanguageString;
51 private EntitySelectionElement<Collection> selection_collection;
52 private TextWithLabelElement text_accessionNumber;
53 private EntitySelectionElement<Reference> selection_publishedIn;
54
55 private MediaDetailElement mediaDetailElement;
56 /**
57 * @param formFactory
58 * @param formElement
59 */
60 public MediaSpecimenGeneralDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
61 super(formFactory, formElement);
62 }
63
64 /*
65 * (non-Javadoc)
66 *
67 * @see
68 * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#createControls
69 * (eu.etaxonomy.taxeditor.forms.ICdmFormElement, java.lang.Object, int)
70 */
71 @Override
72 protected void createControls(ICdmFormElement formElement, MediaSpecimen entity, int style) {
73 Media media = entity.getMediaSpecimen();
74 if(media==null){
75 formFactory.createLabel(formElement, "No media attached to this MediaSpecimen!");
76 }
77 else{
78 comboKindOfUnit = formFactory.createDefinedTermComboElement(mediaSpecimenVocabulary, formElement, "Kind of Media", entity.getKindOfUnit(), style);
79 textTitleLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Motif", media.getTitle(), style);
80 selectionArtist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), formElement, "Prepared by", media.getArtist(), EntitySelectionElement.ALL, style);
81 date = formFactory.createDateElement(formElement, "Preparation Date", entity.getMediaSpecimen().getMediaCreated(), style);
82 textMethodLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Method", media.getDescription(Language.getDefaultLanguage()), style);
83 selection_collection = formFactory.createSelectionElement(Collection.class, getConversationHolder(), formElement, "Collection", entity.getCollection(), EntitySelectionElement.ALL, style);
84 text_accessionNumber = formFactory.createTextWithLabelElement(formElement, "Accession Number", entity.getAccessionNumber(), style);
85
86 //the first PrimaryMediaSource is used for storing the reference
87 Reference<?> publishedIn = null;
88 for(IdentifiableSource source:media.getSources()){
89 if(source.getType()==OriginalSourceType.PrimaryMediaSource){
90 publishedIn = source.getCitation();
91 break;
92 }
93 }
94 selection_publishedIn = formFactory.createSelectionElement(Reference.class, getConversationHolder(), formElement, "Published in", publishedIn, EntitySelectionElement.ALL, style);
95
96 mediaDetailElement = formFactory.createMediaDetailElement(formElement);
97 mediaDetailElement.setEntity(media);
98 }
99 }
100
101 /*
102 * (non-Javadoc)
103 *
104 * @see
105 * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java
106 * .lang.Object)
107 */
108 @Override
109 public void handleEvent(Object eventSource) {
110 Media media = getEntity().getMediaSpecimen();
111 if(media==null){
112 media = Media.NewInstance();
113 getEntity().setMediaSpecimen(media);
114 }
115 if(eventSource==comboKindOfUnit){
116 getEntity().setKindOfUnit(comboKindOfUnit.getSelection());
117 }
118 else if(eventSource==textTitleLanguageString){
119 media.putTitle(textTitleLanguageString.getLanguageString());
120 }
121 else if(eventSource==date.getController()){
122 DateTime dateTime = date.getController().getDateTime();
123 media.setMediaCreated(dateTime);
124 }
125 else if(eventSource==selectionArtist){
126 media.setArtist(selectionArtist.getSelection());
127 }
128 else if(eventSource==textMethodLanguageString){
129 media.addDescription(textMethodLanguageString.getLanguageString());
130 }
131 else if (eventSource == selection_collection) {
132 getEntity().setCollection(selection_collection.getSelection());
133 }
134 else if (eventSource == text_accessionNumber) {
135 getEntity().setAccessionNumber(text_accessionNumber.getText());
136 }
137 else if(eventSource==selection_publishedIn){
138 IdentifiableSource primaryMediaSource = null;
139 for(IdentifiableSource source:media.getSources()){
140 if(source.getType()==OriginalSourceType.PrimaryMediaSource){
141 primaryMediaSource = source;
142 }
143 }
144 if(primaryMediaSource==null){
145 primaryMediaSource = IdentifiableSource.NewInstance(OriginalSourceType.PrimaryMediaSource);
146 media.addSource(primaryMediaSource);
147 }
148 else{
149 primaryMediaSource.setCitation(selection_publishedIn.getSelection());
150 }
151 }
152 }
153
154 public void toogleAdvancedMediaView() {
155 if(mediaDetailElement!=null){
156 mediaDetailElement.toggleAdvancedMediaView();
157 }
158 }
159
160 public boolean isAdvancedMediaView() {
161 if(mediaDetailElement==null){
162 return false;
163 }
164 return mediaDetailElement.isAdvancedMediaView();
165 }
166
167 }