From: Patric Plitzner Date: Mon, 18 Aug 2014 08:14:39 +0000 (+0000) Subject: - added simple user interface to add media (#3339) X-Git-Tag: 3.6.0~501 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/2bfe249fc4c0f46739f466bf81b8f5a8ddfd5ee5 - added simple user interface to add media (#3339) --- diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/MediaDetailsSection.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/MediaDetailsSection.java index 04a0171b1..d149d0488 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/MediaDetailsSection.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/MediaDetailsSection.java @@ -11,7 +11,7 @@ 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; @@ -71,8 +71,7 @@ public class MediaDetailsSection extends AbstractCdmDetailSection { 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(); diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaElement.java index 299bd27b4..767afd8c7 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaElement.java @@ -3,6 +3,11 @@ */ 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; @@ -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.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.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; @@ -31,93 +39,134 @@ import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement; */ public class MediaElement extends AbstractEntityCollectionElement { - private MediaRepresentationSection section_mediaRepresentation; - private EntitySelectionElement selection_artist; - private LanguageStringWithLabelElement text_description; - private LanguageStringWithLabelElement text_title; +// private MediaRepresentationSection section_mediaRepresentation; + private EntitySelectionElement selection_artist; + private LanguageStringWithLabelElement text_description; + private LanguageStringWithLabelElement text_title; + private UriWithLabelElement textUri; - /** - *

- * Constructor for MediaElement. - *

- * - * @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); - } + /** + *

+ * Constructor for MediaElement. + *

+ * + * @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); - 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 representations = entity.getRepresentations(); + if(representations.size()==1){ + List 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 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)); + } + } + } } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/media/MediaSpecimenGeneralDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/media/MediaSpecimenGeneralDetailElement.java index 0af1cb17f..f834a8d2a 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/media/MediaSpecimenGeneralDetailElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/media/MediaSpecimenGeneralDetailElement.java @@ -9,8 +9,10 @@ */ 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.ui.forms.widgets.ExpandableComposite; 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.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.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.ui.element.LayoutConstants; 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.section.media.MediaRepresentationSection; import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement; /** @@ -54,8 +58,10 @@ public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement< private EntitySelectionElement selection_collection; private TextWithLabelElement text_accessionNumber; private EntitySelectionElement selection_publishedIn; + private UriWithLabelElement textMediaUri; + private MediaRepresentationPart mediaRepresentationPart; - private MediaRepresentationSection mediaRepresentationSection; +// private MediaRepresentationSection mediaRepresentationSection; /** * @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); + 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()); } } + 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 representations = media.getRepresentations(); + MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance(); + mediaRepresentation.addRepresentationPart(part); + media.addRepresentation(mediaRepresentation); + return part; + } + } + }