Fixing problems with image handling.
authorn.hoffmann <n.hoffmann@localhost>
Tue, 21 Jun 2011 12:04:23 +0000 (12:04 +0000)
committern.hoffmann <n.hoffmann@localhost>
Tue, 21 Jun 2011 12:04:23 +0000 (12:04 +0000)
12 files changed:
.gitattributes
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/AbstractCdmFormElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/AbstractFormSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/ImageElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/LabelElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/AbstractMediaRepresentationPartElement.java [moved from eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AbstractMediaRepresentationPartElement.java with 97% similarity]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.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/media/MediaRepresentationElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaRepresentationPartSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/CdmSectionPart.java

index c74e3df114e2456a2f584af68edeb3ef2802fc70..f223383e6460869615827a7bd1ec8735ada78f02 100644 (file)
@@ -1017,6 +1017,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/key
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/key/PolytomousKeyNodeDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/key/ScopeRestrictionSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/key/TaxonomicScopeSection.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/AbstractMediaRepresentationPartElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/ImageFileElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaRepresentationElement.java -text
@@ -1078,7 +1079,6 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/ref
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/reference/ReferenceWizardPage.java -text
-eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AbstractMediaRepresentationPartElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AbstractOriginalSourceElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AbstractReferencedEntityElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AnnotationElement.java -text
index bbc1864b0ae550bdee5c7fd408cf03d4abed0c3d..dbd28a95d80e2e8d182e314f5a6009067fe14f73 100644 (file)
@@ -248,10 +248,22 @@ public abstract class AbstractCdmFormElement implements IPropertyChangeEmitter,
                }
        }
        
+       /**
+        * Fires a {@link CdmPropertyChangeEvent} with the given object as source.
+        *  
+        * @param object the object on which the property changed
+        */
        public void firePropertyChangeEvent(Object object){
                firePropertyChangeEvent(object, null);
        }
        
+       /**
+        * Fires a {@link CdmPropertyChangeEvent} with the given object as source also containing the
+        * originating event
+        * 
+        * @param object the object on which the property changed
+        * @param originatingEvent the originating event
+        */
        public void firePropertyChangeEvent(Object object, PropertyChangeEvent originatingEvent){
                firePropertyChangeEvent(new CdmPropertyChangeEvent(object, originatingEvent));
        }
index d1587708d4ca1a5956b1836e5e4179525257b971..22f297271623a733b8a6480fb115d442a25f37be 100644 (file)
@@ -33,9 +33,6 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
-import eu.etaxonomy.taxeditor.ui.selection.AbstractSelectionElement;
-import eu.etaxonomy.taxeditor.ui.term.AbstractEnumComboElement;
-import eu.etaxonomy.taxeditor.ui.term.AbstractTermComboElement;
 
 /**
  * <p>Abstract AbstractFormSection class.</p>
@@ -180,6 +177,27 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
                }
        }
        
+
+       /**
+        * Fires a {@link CdmPropertyChangeEvent} with the given object as source.
+        *  
+        * @param object the object on which the property changed
+        */
+       public void firePropertyChangeEvent(Object object){
+               firePropertyChangeEvent(object, null);
+       }
+       
+       /**
+        * Fires a {@link CdmPropertyChangeEvent} with the given object as source also containing the
+        * originating event
+        * 
+        * @param object the object on which the property changed
+        * @param originatingEvent the originating event
+        */
+       public void firePropertyChangeEvent(Object object, PropertyChangeEvent originatingEvent){
+               firePropertyChangeEvent(new CdmPropertyChangeEvent(object, originatingEvent));
+       }
+       
        /* (non-Javadoc)
         * @see org.eclipse.swt.widgets.Composite#setFocus()
         */
index bc7b06ab641aabac0dc5a6f837eacb9a8a434692..59d169cfc24f402205464740227980f7ff1292af 100644 (file)
@@ -26,6 +26,7 @@ import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.ui.forms.widgets.TableWrapData;
@@ -44,7 +45,6 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene
 
        private URI imageUri;
        private Image image;
-       private Rectangle imageMaxBounds;
        
        private Composite container;
 
@@ -182,18 +182,18 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene
                return runnable;
        }
        
-       private void calculateImageBounds(){
+       private Rectangle calculateImageBounds(Image image, Control control){
                Rectangle imageBounds = image.getBounds();
-               Rectangle containerBounds = container.getBounds();
+               Rectangle containerBounds = control.getBounds();
                
                Integer imgWidth = imageBounds.width;
                Integer imgHeight = imageBounds.height;
                
                Float ratio = imgHeight.floatValue()/imgWidth.floatValue();
                Integer width = containerBounds.width;
-               Float height = width * ratio;
+               Integer height = ((Float) (width * ratio)).intValue();
                
-               imageMaxBounds = new Rectangle(containerBounds.x, containerBounds.y, width, height.intValue());
+               return new Rectangle(containerBounds.x, containerBounds.y, width, height);
        }
 
 
@@ -204,16 +204,16 @@ public class ImageElement extends AbstractCdmFormElement implements PaintListene
        @Override
        public void paintControl(PaintEvent e) {
                TableWrapData layoutData = CdmFormFactory.FILL(2, 1);
-               Composite composite = (Composite) e.widget;
+               Control control = (Control) e.widget;
                if(image != null){
-                       calculateImageBounds();
+                       Rectangle imageMaxBounds = calculateImageBounds(image, control);
                        layoutData.heightHint = imageMaxBounds.height;
                        e.gc.drawImage(image, 0, 0, image.getBounds().width, image.getBounds().height, 0, 0, imageMaxBounds.width, imageMaxBounds.height);
                }else{
                        layoutData.heightHint = 10;
                        e.gc.drawRectangle(0, 0, 0, 10);
                }
-               composite.setLayoutData(layoutData);
+               control.setLayoutData(layoutData);
                e.gc.dispose();
        }
 
index e9fdedb3e26dbfe393b7a7d33b979bd9772e4c60..7fc5174d320e41e8a2ed34a77e7a131e45c3acb5 100644 (file)
@@ -13,6 +13,8 @@ package eu.etaxonomy.taxeditor.ui.forms;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Label;
 
+import eu.etaxonomy.cdm.common.CdmUtils;
+
 /**
  * <p>LabelElement class.</p>
  *
@@ -55,6 +57,6 @@ public class LabelElement extends AbstractCdmFormElement {
         * @param text a {@link java.lang.String} object.
         */
        public void setText(String text) {
-               label.setText(text);
+               label.setText(CdmUtils.Nz(text));
        }
 }
index bcce1218c99c3027a769239aa388b683707c78d2..9ee5eb3937efd71d202565ca44c66c1a80244e6d 100644 (file)
@@ -158,7 +158,7 @@ public abstract class AbstractEntityCollectionSection<ENTITY, ELEMENT> extends A
                if(isExpanded() || expandSectionWhenContentAvailable())
                        renderContent(isExpanded());
                if(changed)
-                       firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+                       firePropertyChangeEvent(this);
        }
 
        /**
index eb13e836cbc077bf047b4c854f806b750ff13d3b..4b2e70343bca8e7a0a362ceeecfa75a6cbd2557f 100644 (file)
@@ -29,7 +29,6 @@ import eu.etaxonomy.taxeditor.ui.forms.ImageElement;
 import eu.etaxonomy.taxeditor.ui.forms.KeyValueViewerElement;
 import eu.etaxonomy.taxeditor.ui.forms.LabelElement;
 import eu.etaxonomy.taxeditor.ui.forms.NumberWithLabelElement;
-import eu.etaxonomy.taxeditor.ui.section.supplemental.AbstractMediaRepresentationPartElement;
 
 /**
  * <p>ImageFileElement class.</p>
@@ -148,9 +147,10 @@ public class ImageFileElement extends AbstractMediaRepresentationPartElement<Ima
                                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
                        } catch (Exception e) {
                                handleException(e);
+                       } finally {                             
+                               firePropertyChangeEvent(this);
                        }
                }
-               
        }
 
        private void handleException(Exception e) {
index 7fd2f8c70b8115845bfc68498194e983f9edf630..dc853ed0358ef053f802171abf258b90f3a84d0a 100644 (file)
@@ -128,5 +128,6 @@ public class MediaElement extends AbstractEntityCollectionElement<Media> {
                                ((AbstractCdmDetailSection) getParentElement()).updateTitle();
                        }
                }
+               firePropertyChangeEvent(this);
        }
 }
index 248a07865c5998d904bc3e22971ca7380a5a8552..1958ba58727099a41c11cd435f17d88bfbca2485 100644 (file)
@@ -14,16 +14,13 @@ import java.io.IOException;
 import java.net.URI;
 import java.util.Collection;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.http.HttpException;
 import org.eclipse.swt.events.SelectionListener;
 
-import eu.etaxonomy.cdm.api.service.IMediaService;
 import eu.etaxonomy.cdm.common.media.ImageInfo;
 import eu.etaxonomy.cdm.model.media.ImageFile;
 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
-import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
@@ -96,9 +93,15 @@ public class MediaRepresentationElement extends AbstractEntityCollectionElement<
                        getEntity().setSuffix(text_suffix.getText());
                }
                // FIXME HACK automatically set the mime type to the first mediaRepresentationPart's mimetype
-               else if(eventSource == section_mediaRepresentationPart){
+               else if(eventSource == section_mediaRepresentationPart){                        
+                       firePropertyChangeEvent(this);
+                       
                        Collection<MediaRepresentationPart> imageFileElements = section_mediaRepresentationPart.getCollection(section_mediaRepresentationPart.getEntity());
                        
+                       if(! imageFileElements.iterator().hasNext()){
+                               return; 
+                       }
+                       
                        MediaRepresentationPart mediaRepresentationPart = imageFileElements.iterator().next();
                        if(mediaRepresentationPart == null || !(mediaRepresentationPart instanceof ImageFile)){
                                return;
@@ -113,13 +116,17 @@ public class MediaRepresentationElement extends AbstractEntityCollectionElement<
                                ImageInfo imageInfo = ImageInfo.NewInstance(uri, 10000);
                                String mimeType = imageInfo.getMimeType();
                                text_mimeType.setText(mimeType);
+                               getEntity().setMimeType(mimeType);
                                text_suffix.setText(imageInfo.getSuffix());     
+                               getEntity().setSuffix(imageInfo.getSuffix());
                        } catch (IOException e) {
                                StoreUtil.error(getClass(), e);
                        } catch (HttpException e) {
                                StoreUtil.error(getClass(), e);
                        }
                }
+               
+               
        }
        
        private String getMimeType(URI uri){
index 10a456512e1bd82d2274ae47df24d9ab7e4de7b1..a1207657bda9dd3175b7f6f09a130a69237e9f82 100644 (file)
@@ -85,8 +85,5 @@ public class MediaRepresentationPartSection extends
                        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
                        super.propertyChange(event);
                }
-               
-               
-       }
-       
+       }       
 }
index 097d78afeb6c0f8c21542d06914b622da99c7861..d173e34fda3137f417e8828165c7f200dd274169 100644 (file)
@@ -22,6 +22,7 @@ import eu.etaxonomy.taxeditor.model.IElementHasDetails;
 import eu.etaxonomy.taxeditor.model.PolytomousKeyRelationship;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.ui.forms.AbstractCdmFormElement;
 import eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.ITaxonBaseDetailSection;
@@ -100,11 +101,15 @@ public class CdmSectionPart<T> extends SectionPart implements
        public void propertyChange(PropertyChangeEvent event) {
                if (event != null) {
 
-                       Object eventSource = event.getSource();
-
-                       if (formSection.equals(eventSource)
-                                       || (eventSource instanceof AbstractCdmDetailElement && formSection
-                                                       .containsFormElement((AbstractCdmDetailElement) eventSource))) {
+                       Object eventSource = event.getSource();                 
+                       
+                       if (formSection.equals(eventSource)){
+                               markDirty();
+                       }
+                       if((
+                                               (eventSource instanceof AbstractCdmFormElement) 
+                                               && formSection.containsFormElement((AbstractCdmFormElement) eventSource))
+                                               ) {
                                markDirty();
                        }
                }