From 1eb2001d2c1cc6bf365f992ed9aaa417c4073bed Mon Sep 17 00:00:00 2001 From: Patrick Plitzner Date: Mon, 20 Jul 2015 20:16:59 +0200 Subject: [PATCH] Enhance handling of simple and advanced media view - Buffer URI string in case of parsing errors - disable toggling when media conists of more than one representation or part --- .../ui/section/media/ImageFileElement.java | 8 +++- .../ui/section/media/MediaDetailElement.java | 45 +++++++++++++++++-- .../media/MediaRepresentationPartElement.java | 29 +++++++++++- 3 files changed, 76 insertions(+), 6 deletions(-) diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java index fbde0b7e0..9d016cb31 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java @@ -119,7 +119,13 @@ public class ImageFileElement extends MediaRepresentationPartElement try { URI uri = text_uri.getUri(); getEntity().setUri(uri); - + if(uri==null){ + //buffer URI if parsing error occurred + MediaDetailElement parentMediaDetailElement = getParentMediaDetailElement(); + if(parentMediaDetailElement!=null){ + parentMediaDetailElement.setUriBuffer(text_uri.getText()); + } + } loadImage(getEntity().getUri(), true); diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java index e05ed4064..1c2766564 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java @@ -9,6 +9,7 @@ */ package eu.etaxonomy.taxeditor.ui.section.media; +import java.net.URI; import java.util.List; import java.util.Set; @@ -16,6 +17,7 @@ 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.model.MessagingUtils; import eu.etaxonomy.taxeditor.preference.IPreferenceKeys; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; @@ -39,6 +41,11 @@ public class MediaDetailElement extends AbstractCdmDetailElement{ private ICdmFormElement parentFormElement; private int style; + /** + * Used to store the URI even if it is invalid and thus cannot be stored in CDM + */ + private String uriBuffer; + public MediaDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) { super(formFactory, formElement); } @@ -63,11 +70,25 @@ public class MediaDetailElement extends AbstractCdmDetailElement{ public void handleEvent(Object eventSource){ if(eventSource==textUri){ textUri.setBackground(getPersistentBackground()); - singleMediaRepresentationPart.setUri(textUri.getUri()); + URI uri = textUri.getUri(); + singleMediaRepresentationPart.setUri(uri); + if(uri==null){ + uriBuffer=textUri.getText(); + } } } - public void toggleAdvancedMediaView(){ + public void toggleAdvancedMediaView() { + if (getEntity().getRepresentations() != null + && (getEntity().getRepresentations().size() > 1 || + (getEntity().getRepresentations().size() == 1 + && getEntity().getRepresentations().iterator().next().getParts().size() > 1))) { + MessagingUtils.informationDialog("Toggling not possible", + "Media has consists of multiple representations or representatio parts"); + // toggling is only possible if there are no more than one + // MediaRepresentation resp. MediaRepresentationParts + return; + } isAdvancedMediaView = !isAdvancedMediaView; showAdvancedView(); reflowParentScrolledForm(true); @@ -81,13 +102,23 @@ public class MediaDetailElement extends AbstractCdmDetailElement{ section_mediaRepresentation = formFactory.createMediaRepresentationSection(getConversationHolder(), parentFormElement, style); section_mediaRepresentation.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1)); section_mediaRepresentation.setEntity(getEntity()); + //set buffered uri as text if uri had parsing problems in simple view + if(uriBuffer!=null){ + section_mediaRepresentation.getLayoutComposite().getChildren(); + } } else{ if(section_mediaRepresentation!=null){ removeElementsAndControls(section_mediaRepresentation); } textUri = formFactory.createUriWithLabelElement(parentFormElement, "Media URI", null, style); - textUri.setUri(singleMediaRepresentationPart.getUri()); + URI uri = singleMediaRepresentationPart.getUri(); + textUri.setUri(uri); + //set buffered uri as text if uri had parsing problems in advanced view + if(uri==null && uriBuffer!=null){ + textUri.setText(uriBuffer); + textUri.getUri(); + } textUri.getLayoutComposite().layout(); } } @@ -116,4 +147,12 @@ public class MediaDetailElement extends AbstractCdmDetailElement{ return isAdvancedMediaView; } + public void setUriBuffer(String uriBuffer) { + this.uriBuffer = uriBuffer; + } + + public String getUriBuffer() { + return uriBuffer; + } + } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaRepresentationPartElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaRepresentationPartElement.java index 5a2952547..663848da4 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaRepresentationPartElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaRepresentationPartElement.java @@ -58,8 +58,14 @@ public class MediaRepresentationPartElement e text_size.setText(FileUtils.byteCountToDisplaySize(entity.getSize())); } if(entity.getUri() != null){ - text_uri.setText(entity.getUri().toString()); - } + text_uri.setUri(entity.getUri()); + } else { + String uriBuffer = getParentMediaDetailElement().getUriBuffer(); + if(uriBuffer!=null){ + text_uri.setText(uriBuffer); + text_uri.getUri();//just to update the error label + } + } } @Override @@ -67,8 +73,27 @@ public class MediaRepresentationPartElement e if(eventSource == text_uri){ URI uri = text_uri.getUri(); getEntity().setUri(uri); + if(uri==null){ + //buffer URI if parsing error occurred + MediaDetailElement parentMediaDetailElement = getParentMediaDetailElement(); + if(parentMediaDetailElement!=null){ + parentMediaDetailElement.setUriBuffer(text_uri.getText()); + } + } + firePropertyChangeEvent(this); } } + protected MediaDetailElement getParentMediaDetailElement() { + ICdmFormElement parentElement = getParentElement(); + while(parentElement!=null){ + parentElement = parentElement.getParentElement(); + if(parentElement instanceof MediaDetailElement){ + return (MediaDetailElement) parentElement; + } + } + return null; + } + } -- 2.34.1