Project

General

Profile

Download (9.51 KB) Statistics
| Branch: | Tag: | Revision:
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 java.net.URISyntaxException;
13
import java.util.List;
14
import java.util.Set;
15

    
16
import org.eclipse.swt.widgets.Label;
17
import org.joda.time.DateTime;
18

    
19
import eu.etaxonomy.cdm.api.service.IVocabularyService;
20
import eu.etaxonomy.cdm.model.agent.AgentBase;
21
import eu.etaxonomy.cdm.model.common.DefinedTerm;
22
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
23
import eu.etaxonomy.cdm.model.common.Language;
24
import eu.etaxonomy.cdm.model.common.OriginalSourceType;
25
import eu.etaxonomy.cdm.model.common.TermVocabulary;
26
import eu.etaxonomy.cdm.model.common.VocabularyEnum;
27
import eu.etaxonomy.cdm.model.media.Media;
28
import eu.etaxonomy.cdm.model.media.MediaRepresentation;
29
import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
30
import eu.etaxonomy.cdm.model.occurrence.Collection;
31
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
32
import eu.etaxonomy.cdm.model.reference.Reference;
33
import eu.etaxonomy.taxeditor.preference.Resources;
34
import eu.etaxonomy.taxeditor.store.CdmStore;
35
import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
36
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
37
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
38
import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
39
import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
40
import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
41
import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
42
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
43
import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
44

    
45
/**
46
 * @author pplitzner
47
 * @date 16.12.2013
48
 *
49
 */
50
public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<MediaSpecimen> {
51

    
52
    private final TermVocabulary mediaSpecimenVocabulary = CdmStore.getService(IVocabularyService.class).find(VocabularyEnum.MediaSpecimenKindOfUnit.getUuid());
53

    
54
    private TermComboElement<DefinedTerm> comboKindOfUnit;
55
    private LanguageStringWithLabelElement textTitleLanguageString;
56
    private EntitySelectionElement<AgentBase> selectionArtist;
57
    private DateElement date;
58
    private LanguageStringWithLabelElement textMethodLanguageString;
59
    private EntitySelectionElement<Collection> selection_collection;
60
    private TextWithLabelElement text_accessionNumber;
61
    private EntitySelectionElement<Reference> selection_publishedIn;
62
    private UriWithLabelElement textMediaUri;
63
    private MediaRepresentationPart mediaRepresentationPart;
64

    
65
//    private MediaRepresentationSection mediaRepresentationSection;
66
    /**
67
     * @param formFactory
68
     * @param formElement
69
     */
70
    public MediaSpecimenGeneralDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
71
        super(formFactory, formElement);
72
    }
73

    
74
    /*
75
     * (non-Javadoc)
76
     *
77
     * @see
78
     * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#createControls
79
     * (eu.etaxonomy.taxeditor.forms.ICdmFormElement, java.lang.Object, int)
80
     */
81
    @Override
82
    protected void createControls(ICdmFormElement formElement, MediaSpecimen entity, int style) {
83
        Media media = entity.getMediaSpecimen();
84
        if(media==null){
85
            formFactory.createLabel(formElement, "No media attached to this MediaSpecimen!");
86
        }
87
        else{
88
            comboKindOfUnit = formFactory.createDefinedTermComboElement(mediaSpecimenVocabulary, formElement, "Kind of Media", entity.getKindOfUnit(), style);
89
            textTitleLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Motif", media.getTitle(), style);
90
            selectionArtist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), formElement, "Prepared by", media.getArtist(), EntitySelectionElement.ALL, style);
91

    
92
            Label label = new Label(getLayoutComposite(), style);
93
            label.setText("Preparation Date (yyyy-mm-dd)");
94
//            label.setLayoutData(LayoutConstants.LEFT());
95
            date = new DateElement(formElement.getLayoutComposite(), entity.getMediaSpecimen().getMediaCreated(), style);
96
            date.initController(formFactory, formElement);
97

    
98

    
99
            textMethodLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Method", media.getDescription(Language.getDefaultLanguage()), style);
100
            selection_collection = formFactory.createSelectionElement(Collection.class, getConversationHolder(), formElement, "Collection", entity.getCollection(), EntitySelectionElement.ALL, style);
101
            text_accessionNumber = formFactory.createTextWithLabelElement(formElement, "Accession Number", entity.getAccessionNumber(), style);
102

    
103
            //the first PrimaryMediaSource is used for storing the reference
104
            Reference<?> publishedIn = null;
105
            for(IdentifiableSource source:media.getSources()){
106
                if(source.getType()==OriginalSourceType.PrimaryMediaSource){
107
                    publishedIn = source.getCitation();
108
                    break;
109
                }
110
            }
111
            selection_publishedIn = formFactory.createSelectionElement(Reference.class, getConversationHolder(), formElement, "Published in", publishedIn, EntitySelectionElement.ALL, style);
112
            mediaRepresentationPart = getMediaRepresentationPart(media);
113
            textMediaUri = formFactory.createUriWithLabelElement(formElement, "Media URI", mediaRepresentationPart.getUri(), style);
114

    
115
//            mediaRepresentationSection = formFactory.createMediaRepresentationSection(getConversationHolder(), formElement, ExpandableComposite.TWISTIE);
116
//            mediaRepresentationSection.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
117
//            mediaRepresentationSection.setEntity(media);
118
        }
119
    }
120

    
121
    /*
122
     * (non-Javadoc)
123
     *
124
     * @see
125
     * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java
126
     * .lang.Object)
127
     */
128
    @Override
129
    public void handleEvent(Object eventSource) {
130
        Media media = getEntity().getMediaSpecimen();
131
        if(media==null){
132
            media = Media.NewInstance();
133
            getEntity().setMediaSpecimen(media);
134
        }
135
        if(eventSource==comboKindOfUnit){
136
            getEntity().setKindOfUnit(comboKindOfUnit.getSelection());
137
        }
138
        else if(eventSource==textTitleLanguageString){
139
            media.putTitle(textTitleLanguageString.getLanguageString());
140
        }
141
        else if(eventSource==date.getController()){
142
            DateTime dateTime = date.getController().getDateTime();
143
            media.setMediaCreated(dateTime);
144
        }
145
        else if(eventSource==selectionArtist){
146
            media.setArtist(selectionArtist.getSelection());
147
        }
148
        else if(eventSource==textMethodLanguageString){
149
            media.addDescription(textMethodLanguageString.getLanguageString());
150
        }
151
        else if (eventSource == selection_collection) {
152
            getEntity().setCollection(selection_collection.getSelection());
153
        }
154
        else if (eventSource == text_accessionNumber) {
155
            getEntity().setAccessionNumber(text_accessionNumber.getText());
156
        }
157
        else if(eventSource==selection_publishedIn){
158
            IdentifiableSource primaryMediaSource = null;
159
            for(IdentifiableSource source:media.getSources()){
160
                if(source.getType()==OriginalSourceType.PrimaryMediaSource){
161
                    primaryMediaSource = source;
162
                }
163
            }
164
            if(primaryMediaSource==null){
165
                primaryMediaSource = IdentifiableSource.NewInstance(OriginalSourceType.PrimaryMediaSource);
166
                media.addSource(primaryMediaSource);
167
            }
168
            else{
169
                primaryMediaSource.setCitation(selection_publishedIn.getSelection());
170
            }
171
        }
172
        else if(eventSource==textMediaUri){
173
            textMediaUri.setBackground(getPersistentBackground());
174
            try {
175
                mediaRepresentationPart.setUri(textMediaUri.getUri());
176
            } catch (URISyntaxException e) {
177
                textMediaUri.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
178
            }
179
        }
180
    }
181

    
182
    private MediaRepresentationPart getMediaRepresentationPart(Media media) {
183
        if(mediaRepresentationPart==null){
184
            Set<MediaRepresentation> representations = media.getRepresentations();
185
            if(representations!=null && representations.size()>0){
186
                MediaRepresentation mediaRepresentation = representations.iterator().next();
187
                List<MediaRepresentationPart> parts = mediaRepresentation.getParts();
188
                if(parts!=null && parts.size()>0){
189
                    mediaRepresentationPart = parts.iterator().next();
190
                }
191
                else{
192
                    mediaRepresentationPart = MediaRepresentationPart.NewInstance(null, null);
193
                    mediaRepresentation.addRepresentationPart(mediaRepresentationPart);
194
                }
195
            }
196
            else{
197
                mediaRepresentationPart = MediaRepresentationPart.NewInstance(null, null);
198

    
199
                MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance();
200
                mediaRepresentation.addRepresentationPart(mediaRepresentationPart);
201
                media.addRepresentation(mediaRepresentation);
202
            }
203
        }
204
        return mediaRepresentationPart;
205
    }
206

    
207
}
(3-3/6)