- generalized simple user interface to add media (#3339)
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / media / MediaElement.java
index 767afd8c71329d5104b8e267746e5c689913ab01..2d9a7c27457029a3ce2c757167ee33e872c3ca66 100644 (file)
@@ -3,7 +3,6 @@
  */
 package eu.etaxonomy.taxeditor.ui.section.media;
 
-import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.List;
 import java.util.Set;
@@ -17,12 +16,17 @@ import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
+import eu.etaxonomy.cdm.model.media.MediaUtils;
+import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.preference.Resources;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
 import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
@@ -39,11 +43,16 @@ import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
  */
 public class MediaElement extends AbstractEntityCollectionElement<Media> {
 
-//    private MediaRepresentationSection section_mediaRepresentation;
     private EntitySelectionElement<AgentBase> selection_artist;
     private LanguageStringWithLabelElement text_description;
     private LanguageStringWithLabelElement text_title;
     private UriWithLabelElement textUri;
+    private MediaRepresentationSection section_mediaRepresentation;
+
+    private CheckboxElement checkBoxShowAdvancedView;
+    private MediaRepresentationPart singleMediaRepresentationPart;
+    private ICdmFormElement parentFormElement;
+    private int style;
 
     /**
      * <p>
@@ -64,7 +73,7 @@ public class MediaElement extends AbstractEntityCollectionElement<Media> {
      *            object.
      */
     public MediaElement(CdmFormFactory cdmFormFactory,
-            AbstractFormSection formElement, Media element,
+            AbstractFormSection<?> formElement, Media element,
             SelectionListener removeListener, int style) {
         super(cdmFormFactory, formElement, element, removeListener, null, style);
     }
@@ -79,31 +88,24 @@ public class MediaElement extends AbstractEntityCollectionElement<Media> {
     /** {@inheritDoc} */
     @Override
     public void createControls(ICdmFormElement element, int style) {
+        this.parentFormElement = element;
+        this.style = style;
         text_title = formFactory.createLanguageStringWithLabelElement(element, "Title", null, style);
         selection_artist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), element, "Artist", null, EntitySelectionElement.ALL, style);
         text_description = formFactory.createLanguageStringWithLabelElement(element, "Description", null, 100, style);
-        textUri = formFactory.createUriWithLabelElement(element, "Media URI", null, style);
-        //        section_mediaRepresentation = formFactory.createMediaRepresentationSection(getConversationHolder(), element, style);
-        //        section_mediaRepresentation.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
-    }
-
-    private MediaRepresentationPart getFirstMediaRepresentationPart() {
-        Set<MediaRepresentation> representations = entity.getRepresentations();
-        if(representations.size()==1){
-            List<MediaRepresentationPart> parts = representations.iterator().next().getParts();
-            if(parts.size()==1){
-                return parts.iterator().next();
-            }
-        }
-        return null;
+        checkBoxShowAdvancedView = formFactory.createCheckbox(element, "Advanced Media View", false, style);
     }
 
     /** {@inheritDoc} */
     @Override
     public void setEntity(Media element) {
         this.entity = element;
-//        section_mediaRepresentation.setEntity(element);
-        selection_artist.setEntity((TeamOrPersonBase) HibernateProxyHelper
+        if(singleMediaRepresentationPart==null){
+            singleMediaRepresentationPart = MediaUtils.initFirstMediaRepresentationPart(element);
+        }
+        showAdvancedView(isAdvancedMediaView());
+
+        selection_artist.setEntity((TeamOrPersonBase<?>) HibernateProxyHelper
                 .deproxy(element.getArtist()));
 
         text_description.setLanguageString(element.getDescription(CdmStore
@@ -112,16 +114,10 @@ public class MediaElement extends AbstractEntityCollectionElement<Media> {
         LanguageString title = element.getTitle(CdmStore.getDefaultLanguage());
 
         if (title == null) {
-            title = LanguageString.NewInstance("",
-                    CdmStore.getDefaultLanguage());
+            title = LanguageString.NewInstance("", CdmStore.getDefaultLanguage());
         }
 
         text_title.setLanguageString(title);
-
-        MediaRepresentationPart firstMediaRepresentationPart = getFirstMediaRepresentationPart();
-        if(firstMediaRepresentationPart!=null){
-            textUri.setUri(firstMediaRepresentationPart.getUri());
-        }
     }
 
     /*
@@ -141,32 +137,59 @@ public class MediaElement extends AbstractEntityCollectionElement<Media> {
         } else if (eventSource == text_title) {
             getEntity().putTitle(text_title.getLanguageString());
             if (getParentElement() instanceof AbstractCdmDetailSection) {
-                ((AbstractCdmDetailSection) getParentElement()).updateTitle();
+                ((AbstractCdmDetailSection<?>) getParentElement()).updateTitle();
             }
         }
-        else if (eventSource == textUri){
+        else if(eventSource==textUri){
             textUri.setBackground(getPersistentBackground());
-            MediaRepresentationPart firstMediaRepresentationPart = getFirstMediaRepresentationPart();
-            URI uri;
             try {
-                uri = textUri.getUri();
-                if(firstMediaRepresentationPart!=null){
-                    firstMediaRepresentationPart.setUri(uri);
-                }
-                else{
-                    Set<MediaRepresentation> representations = getEntity().getRepresentations();
-                    if(representations.size()>=1){
-                        representations.iterator().next().addRepresentationPart(MediaRepresentationPart.NewInstance(uri, null));
-                    }
-                    else{
-                        MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance();
-                        mediaRepresentation.addRepresentationPart(MediaRepresentationPart.NewInstance(uri, null));
-                        getEntity().addRepresentation(mediaRepresentation);
-                    }
-                }
+                singleMediaRepresentationPart.setUri(textUri.getUri());
             } catch (URISyntaxException e) {
                 textUri.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
             }
         }
+        else if(eventSource==checkBoxShowAdvancedView){
+            showAdvancedView(checkBoxShowAdvancedView.getSelection());
+        }
     }
+
+    /**
+     * @param showAdvancedView
+     */
+    private void showAdvancedView(boolean showAdvancedView) {
+        if(showAdvancedView){
+            if(textUri!=null){
+                removeElementsAndControls(textUri);
+            }
+            section_mediaRepresentation = formFactory.createMediaRepresentationSection(getConversationHolder(), parentFormElement, style);
+            section_mediaRepresentation.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+            section_mediaRepresentation.setEntity(getEntity());
+        }
+        else{
+            if(section_mediaRepresentation!=null){
+                removeElementsAndControls(section_mediaRepresentation);
+            }
+            textUri = formFactory.createUriWithLabelElement(parentFormElement, "Media URI", null, style);
+            textUri.setUri(singleMediaRepresentationPart.getUri());
+            textUri.getLayoutComposite().layout();
+        }
+    }
+
+    private boolean isAdvancedMediaView(){
+        if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ADVANCED_MEDIA_SECTION)){
+            return true;
+        }
+        Set<MediaRepresentation> representations = entity.getRepresentations();
+        if(representations.size()>1){
+            return true;
+        }
+        if(representations.size()==1){
+            List<MediaRepresentationPart> parts = representations.iterator().next().getParts();
+            if(parts.size()>1){
+                return true;
+            }
+        }
+        return false;
+    }
+
 }