- separated user interface to add media into two classe (#3339)
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / media / MediaDetailElement.java
1 // $Id$
2 /**
3 * Copyright (C) 2014 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.media;
11
12 import java.net.URISyntaxException;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.Set;
16
17 import org.eclipse.jface.util.IPropertyChangeListener;
18
19 import eu.etaxonomy.cdm.model.media.Media;
20 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
21 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
22 import eu.etaxonomy.cdm.model.media.MediaUtils;
23 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
24 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
25 import eu.etaxonomy.taxeditor.preference.Resources;
26 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
27 import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
28 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
29 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
30 import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
31 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
32
33 /**
34 * @author pplitzner
35 * @date 25.08.2014
36 *
37 */
38 public class MediaDetailElement extends AbstractCdmDetailElement<Media>{
39
40 private UriWithLabelElement textUri;
41 private MediaRepresentationSection section_mediaRepresentation;
42
43 private CheckboxElement checkBoxShowAdvancedView;
44 private MediaRepresentationPart singleMediaRepresentationPart;
45 private ICdmFormElement parentFormElement;
46 private int style;
47
48 /**
49 * @param formFactory
50 * @param formElement
51 */
52 public MediaDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
53 super(formFactory, formElement);
54 }
55
56 /* (non-Javadoc)
57 * @see eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement#createControls(eu.etaxonomy.taxeditor.ui.element.ICdmFormElement, java.lang.Object, int)
58 */
59 @Override
60 protected void createControls(ICdmFormElement formElement, Media entity, int style) {
61 this.parentFormElement = formElement;
62 this.style = style;
63 checkBoxShowAdvancedView = formFactory.createCheckbox(formElement, "Advanced Media View", false, style);
64 List<IPropertyChangeListener> checkBoxPropertyChangeListeners = checkBoxShowAdvancedView.getPropertyChangeListeners();
65 checkBoxPropertyChangeListeners.retainAll(Collections.singletonList(this));
66 checkBoxShowAdvancedView.setPropertyChangeListeners(checkBoxPropertyChangeListeners);//no property change events for checkbox
67 }
68
69 /* (non-Javadoc)
70 * @see eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement#setEntity(java.lang.Object)
71 */
72 @Override
73 public void setEntity(Media entity) {
74 super.setEntity(entity);
75 if(singleMediaRepresentationPart==null){
76 singleMediaRepresentationPart = MediaUtils.initFirstMediaRepresentationPart(entity);
77 }
78 showAdvancedView(isAdvancedMediaView());
79
80 }
81
82 /* (non-Javadoc)
83 * @see eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement#handleEvent(java.lang.Object)
84 */
85 @Override
86 public void handleEvent(Object eventSource) {
87 if(eventSource==textUri){
88 textUri.setBackground(getPersistentBackground());
89 try {
90 singleMediaRepresentationPart.setUri(textUri.getUri());
91 } catch (URISyntaxException e) {
92 textUri.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
93 }
94 }
95 else if(eventSource==checkBoxShowAdvancedView){
96 showAdvancedView(checkBoxShowAdvancedView.getSelection());
97 }
98 }
99
100 /**
101 * @param showAdvancedView
102 */
103 private void showAdvancedView(boolean showAdvancedView) {
104 if(showAdvancedView){
105 if(textUri!=null){
106 removeElementsAndControls(textUri);
107 }
108 section_mediaRepresentation = formFactory.createMediaRepresentationSection(getConversationHolder(), parentFormElement, style);
109 section_mediaRepresentation.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
110 section_mediaRepresentation.setEntity(getEntity());
111 }
112 else{
113 if(section_mediaRepresentation!=null){
114 removeElementsAndControls(section_mediaRepresentation);
115 }
116 textUri = formFactory.createUriWithLabelElement(parentFormElement, "Media URI", null, style);
117 textUri.setUri(singleMediaRepresentationPart.getUri());
118 textUri.getLayoutComposite().layout();
119 }
120 }
121
122 private boolean isAdvancedMediaView(){
123 if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ADVANCED_MEDIA_SECTION)){
124 checkBoxShowAdvancedView.setSelection(true);
125 return true;
126 }
127 Set<MediaRepresentation> representations = getEntity().getRepresentations();
128 if(representations.size()>1){
129 checkBoxShowAdvancedView.setEnabled(false);
130 return true;
131 }
132 if(representations.size()==1){
133 List<MediaRepresentationPart> parts = representations.iterator().next().getParts();
134 if(parts.size()>1){
135 checkBoxShowAdvancedView.setEnabled(false);
136 return true;
137 }
138 }
139 return false;
140 }
141
142
143 }