Project

General

Profile

Download (7.72 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.ui.section.media;
5

    
6
import java.util.Map;
7

    
8
import org.eclipse.jface.action.IAction;
9
import org.eclipse.swt.SWT;
10
import org.eclipse.swt.events.SelectionAdapter;
11
import org.eclipse.swt.events.SelectionEvent;
12
import org.eclipse.swt.events.SelectionListener;
13
import org.eclipse.swt.widgets.Button;
14
import org.eclipse.swt.widgets.Display;
15

    
16
import eu.etaxonomy.cdm.common.CdmUtils;
17
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
18
import eu.etaxonomy.cdm.model.agent.AgentBase;
19
import eu.etaxonomy.cdm.model.common.CdmBase;
20
import eu.etaxonomy.cdm.model.common.Language;
21
import eu.etaxonomy.cdm.model.common.LanguageString;
22
import eu.etaxonomy.cdm.model.common.TimePeriod;
23
import eu.etaxonomy.cdm.model.media.Media;
24
import eu.etaxonomy.taxeditor.model.AbstractUtility;
25
import eu.etaxonomy.taxeditor.model.ImageResources;
26
import eu.etaxonomy.taxeditor.store.CdmStore;
27
import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog;
28
import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
29
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
30
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
31
import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
32
import eu.etaxonomy.taxeditor.ui.element.LabelElement;
33
import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
34
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
35
import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
36
import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
37
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
38
import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
39
import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
40

    
41
/**
42
 * @author n.hoffmann
43
 * @created Nov 17, 2009
44
 * @version 1.0
45
 */
46
public class MediaMetaElement extends AbstractEntityCollectionElement<Media> implements ISelectableElement, ITogglableMediaElement{
47

    
48
    private EntitySelectionElement<AgentBase> selection_artist;
49
    private LanguageStringWithLabelElement text_description;
50
    private LanguageStringWithLabelElement text_title;
51
    private MediaDetailElement mediaDetailElement;
52
    private TimePeriodElement mediaCreated;
53
    private SelectionArbitrator selectionArbitrator;
54
    private LabelElement warnForReferencedObjects;
55

    
56
    public MediaMetaElement(CdmFormFactory cdmFormFactory,
57
            AbstractFormSection<?> formElement, Media element,
58
            SelectionListener removeListener, int style) {
59
        super(cdmFormFactory, formElement, element, removeListener, null, style);
60
        //make element selectable
61
        if(cdmFormFactory.getSelectionProvider() != null){
62
            selectionArbitrator = cdmFormFactory.createSelectionArbitrator(this);
63
        }
64

    
65

    
66
    }
67

    
68
    /** {@inheritDoc} */
69
    @Override
70
    public void createControls(ICdmFormElement element, int style) {
71
        final IAction switchAction = MediaViewSwitch.createSwitch(MediaMetaElement.this);
72
        Button btnToggleAdvancedMediaView = new Button(getBox(), style);
73
        btnToggleAdvancedMediaView.setToolTipText(switchAction.getText());
74
        btnToggleAdvancedMediaView.setImage(ImageResources.getImage(ImageResources.SWITCH_VIEW_TYPE));
75
        btnToggleAdvancedMediaView.addSelectionListener(new SelectionAdapter() {
76
            @Override
77
            public void widgetSelected(SelectionEvent e) {
78
                switchAction.run();
79
            }
80
        });
81
        setWarnForReferencingObjects(element, 2);
82
        text_title = formFactory.createLanguageStringWithLabelElement(element, "Title", null, style);
83
        selection_artist = formFactory.createSelectionElement(AgentBase.class, //getConversationHolder(),
84
                element, "Artist", null, EntitySelectionElement.ALL, style);
85
        addElement(selection_artist);
86

    
87
        mediaCreated = formFactory.createTimePeriodElement(element, "Media Created", getEntity().getMediaCreated(), style);
88
        addElement(mediaCreated);
89
        text_description = formFactory.createLanguageStringWithLabelElement(element, "Description", null, 100, true, style);
90

    
91

    
92

    
93

    
94
        mediaDetailElement = formFactory.createMediaDetailElement(element);
95
        addElement(mediaDetailElement);
96
    }
97

    
98
    /** {@inheritDoc} */
99
    @Override
100
    public void setEntity(Media element) {
101
        this.entity = element;
102
        mediaDetailElement.setEntity(element);
103

    
104
        selection_artist.setEntity(HibernateProxyHelper
105
                .deproxy(element.getArtist()));
106

    
107
        text_description.setLanguageString(element.getDescription(CdmStore
108
                .getDefaultLanguage()));
109
        if (CdmUtils.isBlank(text_description.getText())){
110
        	Map<Language, LanguageString> allDescriptions = element.getAllDescriptions();
111
        	if (!allDescriptions.isEmpty()){
112
        		text_description.setLanguageString(allDescriptions.get(Language.ENGLISH()));
113
        	}
114
        }
115

    
116
        LanguageString title = element.getTitle(CdmStore.getDefaultLanguage());
117

    
118
        if (title == null) {
119
            title = LanguageString.NewInstance(element.getTitleCache(), CdmStore.getDefaultLanguage());
120
        }
121

    
122
        text_title.setLanguageString(title);
123

    
124

    
125
    }
126

    
127
    @Override
128
    protected Media selectFromDialog() {
129

    
130
    	setEntity(MediaSelectionDialog.select(AbstractUtility.getShell(), //null,
131
    	        null));
132
        return entity;
133
    }
134

    
135
    @Override
136
    public void toggleAdvancedMediaView(){
137
        mediaDetailElement.toggleAdvancedMediaView();
138
    }
139

    
140
    /** {@inheritDoc} */
141
   @Override
142
    public void handleEvent(Object eventSource) {
143
        if (eventSource == selection_artist) {
144
            getEntity().setArtist(selection_artist.getSelection());
145
        } else if (eventSource == text_description) {
146
            getEntity().addDescription(text_description.getLanguageString());
147
        } else if (eventSource == text_title) {
148
            getEntity().putTitle(text_title.getLanguageString());
149
            if (getParentElement() instanceof AbstractCdmDetailSection) {
150
                ((AbstractCdmDetailSection<?>) getParentElement()).updateTitle();
151
            }
152
        } else if (eventSource == mediaCreated){
153
        	TimePeriod date = mediaCreated.getTimePeriod();
154
        	getEntity().setMediaCreated(date);
155
        }
156
    }
157

    
158
    @Override
159
    public SelectionArbitrator getSelectionArbitrator() {
160
        return selectionArbitrator;
161
    }
162

    
163
    public void setWarnForReferencedObjects(LabelElement warnForReferencedObjects) {
164
        this.warnForReferencedObjects = warnForReferencedObjects;
165
    }
166

    
167
    public void setWarnForReferencingObjects(ICdmFormElement formElement, int defaultReferencingObjects){
168
        if (getEntity() instanceof CdmBase){
169
            CdmBase cdmBase = getEntity();
170
            if (cdmBase.getId() != 0){
171
                long referencingObjectsCount = CdmStore.getCommonService().getReferencingObjectsCount(cdmBase);
172

    
173
                if (referencingObjectsCount > defaultReferencingObjects){
174
                    setWarnForReferencedObjects(formFactory.createLabel(formElement, CdmUtils.Nz("The "+ cdmBase.getUserFriendlyTypeName()+" is referenced by more than one object, if you change it, it is changed for all these objects")));
175
                    warnForReferencedObjects.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
176
                    warnForReferencedObjects.setLayout(LayoutConstants.FILL(2, 3));
177
                    warnForReferencedObjects.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
178

    
179
                }
180
            }
181
        }
182
    }
183

    
184
    public void setWarnForReferencingObjects(ICdmFormElement formElement){
185
        setWarnForReferencingObjects(formElement, 1);
186
    }
187

    
188
    public void setWarnForReferencingObjectsVisible(boolean isVisible){
189
        if (warnForReferencedObjects != null){
190
            warnForReferencedObjects.setVisible(isVisible);
191
        }
192
    }
193

    
194
}
(4-4/10)