- added simple user interface to add media (#3339)
authorPatric Plitzner <p.plitzner@bgbm.org>
Mon, 18 Aug 2014 08:14:39 +0000 (08:14 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Mon, 18 Aug 2014 08:14:39 +0000 (08:14 +0000)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/MediaDetailsSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/media/MediaSpecimenGeneralDetailElement.java

index 04a0171b1b7d09d74d1626003dbcb9aff67498a5..d149d0488011f4083b5f38e5f01b1cbf4d8db85b 100644 (file)
@@ -11,7 +11,7 @@
 package eu.etaxonomy.taxeditor.ui.section.description;
 
 import org.eclipse.jface.viewers.ISelectionProvider;
 package eu.etaxonomy.taxeditor.ui.section.description;
 
 import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
@@ -71,8 +71,7 @@ public class MediaDetailsSection extends AbstractCdmDetailSection<Media> {
                if(element_media != null){
                        this.removeElements();
                }
                if(element_media != null){
                        this.removeElements();
                }
-               element_media = (MediaElement) formFactory.createEntityCollectionElement(this, entity, null, null, Section.EXPANDED);
-               formFactory.addPropertyChangeListener(element_media);
+               element_media = (MediaElement) formFactory.createEntityCollectionElement(this, entity, null, null, ExpandableComposite.EXPANDED);
                super.setEntity(entity);
                setSectionTitle();
                layout();
                super.setEntity(entity);
                setSectionTitle();
                layout();
index 299bd27b45e895d7b76e029325358d71d8b6c07b..767afd8c71329d5104b8e267746e5c689913ab01 100644 (file)
@@ -3,6 +3,11 @@
  */
 package eu.etaxonomy.taxeditor.ui.section.media;
 
  */
 package eu.etaxonomy.taxeditor.ui.section.media;
 
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
+import java.util.Set;
+
 import org.eclipse.swt.events.SelectionListener;
 
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import org.eclipse.swt.events.SelectionListener;
 
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
@@ -10,12 +15,15 @@ import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 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.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.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
 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.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;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
@@ -31,93 +39,134 @@ import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
  */
 public class MediaElement extends AbstractEntityCollectionElement<Media> {
 
  */
 public class MediaElement extends AbstractEntityCollectionElement<Media> {
 
-       private MediaRepresentationSection section_mediaRepresentation;
-       private EntitySelectionElement<AgentBase> selection_artist;
-       private LanguageStringWithLabelElement text_description;
-       private LanguageStringWithLabelElement text_title;
+//    private MediaRepresentationSection section_mediaRepresentation;
+    private EntitySelectionElement<AgentBase> selection_artist;
+    private LanguageStringWithLabelElement text_description;
+    private LanguageStringWithLabelElement text_title;
+    private UriWithLabelElement textUri;
 
 
-       /**
-        * <p>
-        * Constructor for MediaElement.
-        * </p>
-        *
-        * @param formElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection}
-        *            object.
-        * @param element
-        *            a {@link eu.etaxonomy.cdm.model.media.Media} object.
-        * @param removeListener
-        *            a {@link org.eclipse.swt.events.SelectionListener} object.
-        * @param style
-        *            a int.
-        * @param cdmFormFactory
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
-        *            object.
-        */
-       public MediaElement(CdmFormFactory cdmFormFactory,
-                       AbstractFormSection formElement, Media element,
-                       SelectionListener removeListener, int style) {
-               super(cdmFormFactory, formElement, element, removeListener, null, style);
-       }
+    /**
+     * <p>
+     * Constructor for MediaElement.
+     * </p>
+     *
+     * @param formElement
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection}
+     *            object.
+     * @param element
+     *            a {@link eu.etaxonomy.cdm.model.media.Media} object.
+     * @param removeListener
+     *            a {@link org.eclipse.swt.events.SelectionListener} object.
+     * @param style
+     *            a int.
+     * @param cdmFormFactory
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+     *            object.
+     */
+    public MediaElement(CdmFormFactory cdmFormFactory,
+            AbstractFormSection formElement, Media element,
+            SelectionListener removeListener, int style) {
+        super(cdmFormFactory, formElement, element, removeListener, null, style);
+    }
 
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see
-        * eu.etaxonomy.taxeditor.forms.entitysections.AbstractEntitySetElementComposite
-        * #createControls(org.eclipse.swt.widgets.Composite, int)
-        */
-       /** {@inheritDoc} */
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * eu.etaxonomy.taxeditor.forms.entitysections.AbstractEntitySetElementComposite
+     * #createControls(org.eclipse.swt.widgets.Composite, int)
+     */
+    /** {@inheritDoc} */
     @Override
     public void createControls(ICdmFormElement element, int 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);
     @Override
     public void createControls(ICdmFormElement element, int 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);
-        section_mediaRepresentation = formFactory.createMediaRepresentationSection(getConversationHolder(), element, style);
-        section_mediaRepresentation.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
-       }
+        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;
+    }
 
 
-       /** {@inheritDoc} */
-       @Override
-       public void setEntity(Media element) {
-               this.entity = element;
-               section_mediaRepresentation.setEntity(element);
-               selection_artist.setEntity((TeamOrPersonBase) HibernateProxyHelper
-                               .deproxy(element.getArtist()));
+    /** {@inheritDoc} */
+    @Override
+    public void setEntity(Media element) {
+        this.entity = element;
+//        section_mediaRepresentation.setEntity(element);
+        selection_artist.setEntity((TeamOrPersonBase) HibernateProxyHelper
+                .deproxy(element.getArtist()));
 
 
-               text_description.setLanguageString(element.getDescription(CdmStore
-                               .getDefaultLanguage()));
+        text_description.setLanguageString(element.getDescription(CdmStore
+                .getDefaultLanguage()));
 
 
-               LanguageString title = element.getTitle(CdmStore.getDefaultLanguage());
+        LanguageString title = element.getTitle(CdmStore.getDefaultLanguage());
 
 
-               if (title == null) {
-                       title = LanguageString.NewInstance("",
-                                       CdmStore.getDefaultLanguage());
-               }
+        if (title == null) {
+            title = LanguageString.NewInstance("",
+                    CdmStore.getDefaultLanguage());
+        }
 
 
-               text_title.setLanguageString(title);
-       }
+        text_title.setLanguageString(title);
 
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see
-        * eu.etaxonomy.taxeditor.section.AbstractEntityCollectionElement#handleEvent
-        * (java.lang.Object)
-        */
-       /** {@inheritDoc} */
-       @Override
-       public void handleEvent(Object eventSource) {
-               if (eventSource == selection_artist) {
-                       getEntity().setArtist(selection_artist.getSelection());
-               } else if (eventSource == text_description) {
-                       getEntity().addDescription(text_description.getLanguageString());
-               } else if (eventSource == text_title) {
-                       getEntity().putTitle(text_title.getLanguageString());
-                       if (getParentElement() instanceof AbstractCdmDetailSection) {
-                               ((AbstractCdmDetailSection) getParentElement()).updateTitle();
-                       }
-               }
-               firePropertyChangeEvent(this);
-       }
+        MediaRepresentationPart firstMediaRepresentationPart = getFirstMediaRepresentationPart();
+        if(firstMediaRepresentationPart!=null){
+            textUri.setUri(firstMediaRepresentationPart.getUri());
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * eu.etaxonomy.taxeditor.section.AbstractEntityCollectionElement#handleEvent
+     * (java.lang.Object)
+     */
+    /** {@inheritDoc} */
+    @Override
+    public void handleEvent(Object eventSource) {
+        if (eventSource == selection_artist) {
+            getEntity().setArtist(selection_artist.getSelection());
+        } else if (eventSource == text_description) {
+            getEntity().addDescription(text_description.getLanguageString());
+        } else if (eventSource == text_title) {
+            getEntity().putTitle(text_title.getLanguageString());
+            if (getParentElement() instanceof AbstractCdmDetailSection) {
+                ((AbstractCdmDetailSection) getParentElement()).updateTitle();
+            }
+        }
+        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);
+                    }
+                }
+            } catch (URISyntaxException e) {
+                textUri.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
+            }
+        }
+    }
 }
 }
index 0af1cb17f268f035b26ad2917a0adf83ddb7bed8..f834a8d2abab902904b0529c0947cb4bb9648155 100644 (file)
@@ -9,8 +9,10 @@
  */
 package eu.etaxonomy.taxeditor.ui.section.occurrence.media;
 
  */
 package eu.etaxonomy.taxeditor.ui.section.occurrence.media;
 
+import java.net.URISyntaxException;
+import java.util.Set;
+
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.joda.time.DateTime;
 
 import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import org.joda.time.DateTime;
 
 import eu.etaxonomy.cdm.api.service.IVocabularyService;
@@ -22,19 +24,21 @@ import eu.etaxonomy.cdm.model.common.OriginalSourceType;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.common.VocabularyEnum;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.common.VocabularyEnum;
 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.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
 import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.taxeditor.preference.Resources;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 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.TextWithLabelElement;
 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
+import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
 import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
 import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.media.MediaRepresentationSection;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 
 /**
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 
 /**
@@ -54,8 +58,10 @@ public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<
     private EntitySelectionElement<Collection> selection_collection;
     private TextWithLabelElement text_accessionNumber;
     private EntitySelectionElement<Reference> selection_publishedIn;
     private EntitySelectionElement<Collection> selection_collection;
     private TextWithLabelElement text_accessionNumber;
     private EntitySelectionElement<Reference> selection_publishedIn;
+    private UriWithLabelElement textMediaUri;
+    private MediaRepresentationPart mediaRepresentationPart;
 
 
-    private MediaRepresentationSection mediaRepresentationSection;
+//    private MediaRepresentationSection mediaRepresentationSection;
     /**
      * @param formFactory
      * @param formElement
     /**
      * @param formFactory
      * @param formElement
@@ -102,10 +108,12 @@ public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<
                 }
             }
             selection_publishedIn = formFactory.createSelectionElement(Reference.class, getConversationHolder(), formElement, "Published in", publishedIn, EntitySelectionElement.ALL, style);
                 }
             }
             selection_publishedIn = formFactory.createSelectionElement(Reference.class, getConversationHolder(), formElement, "Published in", publishedIn, EntitySelectionElement.ALL, style);
+            mediaRepresentationPart = getMediaRepresentationPart(media);
+            textMediaUri = formFactory.createUriWithLabelElement(formElement, "Media URI", mediaRepresentationPart.getUri(), style);
 
 
-            mediaRepresentationSection = formFactory.createMediaRepresentationSection(getConversationHolder(), formElement, ExpandableComposite.TWISTIE);
-            mediaRepresentationSection.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
-            mediaRepresentationSection.setEntity(media);
+//            mediaRepresentationSection = formFactory.createMediaRepresentationSection(getConversationHolder(), formElement, ExpandableComposite.TWISTIE);
+//            mediaRepresentationSection.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+//            mediaRepresentationSection.setEntity(media);
         }
     }
 
         }
     }
 
@@ -160,5 +168,29 @@ public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<
                 primaryMediaSource.setCitation(selection_publishedIn.getSelection());
             }
         }
                 primaryMediaSource.setCitation(selection_publishedIn.getSelection());
             }
         }
+        else if(eventSource==textMediaUri){
+            textMediaUri.setBackground(getPersistentBackground());
+            try {
+                mediaRepresentationPart.setUri(textMediaUri.getUri());
+            } catch (URISyntaxException e) {
+                textMediaUri.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
+            }
+        }
     }
     }
+
+    private MediaRepresentationPart getMediaRepresentationPart(Media media) {
+        if(mediaRepresentationPart!=null){
+            return mediaRepresentationPart;
+        }
+        else {
+            MediaRepresentationPart part = MediaRepresentationPart.NewInstance(null, null);
+
+            Set<MediaRepresentation> representations = media.getRepresentations();
+            MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance();
+            mediaRepresentation.addRepresentationPart(part);
+            media.addRepresentation(mediaRepresentation);
+            return part;
+        }
+    }
+
 }
 }