Project

General

Profile

Download (8.87 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.Set;
14

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

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

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

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

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

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

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

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

    
97

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

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

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

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

    
181
    private MediaRepresentationPart getMediaRepresentationPart(Media media) {
182
        if(mediaRepresentationPart!=null){
183
            return mediaRepresentationPart;
184
        }
185
        else {
186
            MediaRepresentationPart part = MediaRepresentationPart.NewInstance(null, null);
187

    
188
            Set<MediaRepresentation> representations = media.getRepresentations();
189
            MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance();
190
            mediaRepresentation.addRepresentationPart(part);
191
            media.addRepresentation(mediaRepresentation);
192
            return part;
193
        }
194
    }
195

    
196
}
(3-3/6)