Author: simoneg
Date: Wed Dec  9 20:34:58 2009
New Revision: 888953

URL: http://svn.apache.org/viewvc?rev=888953&view=rev
Log:
LABS-380 : uploaded image support

Added:
    labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java
    labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java
    labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java
    labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java
    labs/magma/trunk/beans-image/src/main/resources/META-INF/
    
labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties
    labs/magma/trunk/beans-image/src/test/java/org/
    labs/magma/trunk/beans-image/src/test/java/org/apache/
    labs/magma/trunk/beans-image/src/test/java/org/apache/magma/
    labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/
    labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/
    
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java
    
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java
    
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java
    labs/magma/trunk/beans-image/src/test/resources/falls_big.jpg   (with props)
    labs/magma/trunk/beans-image/src/test/resources/falls_micro.jpg   (with 
props)
    labs/magma/trunk/beans-image/src/test/resources/falls_small.jpg   (with 
props)
Modified:
    labs/magma/trunk/beans-image/pom.xml
    
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java

Modified: labs/magma/trunk/beans-image/pom.xml
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/pom.xml?rev=888953&r1=888952&r2=888953&view=diff
==============================================================================
--- labs/magma/trunk/beans-image/pom.xml (original)
+++ labs/magma/trunk/beans-image/pom.xml Wed Dec  9 20:34:58 2009
@@ -16,6 +16,22 @@
       <artifactId>foundation-beans</artifactId>
       <version>0.0.3-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.magma</groupId>
+      <artifactId>beans-file</artifactId>
+      <version>0.0.3-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+       <groupId>org.apache.magma</groupId>
+       <artifactId>foundation-validation</artifactId>
+       <version>0.0.3-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+       <groupId>org.apache.magma.tools</groupId>
+       <artifactId>magma-test-utilities</artifactId>
+       <version>0.0.3-SNAPSHOT</version>
+       <scope>test</scope>
+    </dependency>
   </dependencies>
   
 </project>

Modified: 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java?rev=888953&r1=888952&r2=888953&view=diff
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java
 (original)
+++ 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java
 Wed Dec  9 20:34:58 2009
@@ -14,6 +14,7 @@
  *
  * @author Simone Gianni <[email protected]>
  */
+// TODO this is going to be removed, replaced by new ImageUtil
 public class ThumbnailMaker {
        
        private int maxw = 80;

Added: 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java 
(added)
+++ 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java 
Wed Dec  9 20:34:58 2009
@@ -0,0 +1,25 @@
+package org.apache.magma.beans;
+
+import java.io.File;
+
+import org.apache.magma.beans.MagFile;
+import org.apache.magma.beans.image.ImageUtil;
+
+public class MagImage extends MagFile {
+
+       public MagImage() {
+               super();
+       }
+
+       public MagImage(File temporaryFile, String originalName) {
+               super(temporaryFile, originalName);
+       }
+
+       public MagImage(String spec) {
+               super(spec);
+       }
+
+       
+       
+       
+}

Added: 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java
 (added)
+++ 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,75 @@
+package org.apache.magma.beans.image;
+
+public class ImageFormat {
+
+       private int width = -1;
+       private int height = -1;
+       private String format = "png";
+
+       /**
+        * Constructs using a string defined format.
+        * 
+        * The format is :
+        * [format] [&lt;width&gt;x&lt;height&gt;]
+        * 
+        * So for example "jpg 80x80", "80x80" or "jpg".
+        * 
+        * @param def The format
+        */
+       public ImageFormat(String def) {
+               def = def.trim();
+               if (def.indexOf(' ') > 0) {
+                       this.format = def.substring(0, def.indexOf(' '));
+                       def = def.substring(def.indexOf(' ') + 1);
+                       String[] split = def.split("x");
+                       this.width = Integer.parseInt(split[0]);
+                       this.height = Integer.parseInt(split[1]);
+               } else {
+                       if (Character.isDigit(def.charAt(0))) {
+                               String[] split = def.split("x");
+                               this.width = Integer.parseInt(split[0]);
+                               this.height = Integer.parseInt(split[1]);       
                        
+                       } else {
+                               this.format = def;
+                       }
+               }
+       }
+
+       /**
+        * Constructs using  
+        * @param width
+        * @param height
+        * @param format
+        */
+       public ImageFormat(int width, int height, String format) {
+               this.width = width;
+               this.height = height;
+               this.format = format;
+       }
+
+       public int getWidth() {
+               return width;
+       }
+
+       public void setWidth(int width) {
+               this.width = width;
+       }
+
+       public int getHeight() {
+               return height;
+       }
+
+       public void setHeight(int height) {
+               this.height = height;
+       }
+
+       public String getFormat() {
+               return format;
+       }
+
+       public void setFormat(String format) {
+               this.format = format;
+       }
+       
+       
+}

Added: 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java
 (added)
+++ 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,138 @@
+package org.apache.magma.beans.image;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+import javax.imageio.ImageIO;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagImage;
+
+public class ImageUtil {
+
+       private InputStream data;
+       private BufferedImage img;
+       private int width;
+       private int height;
+       
+       public ImageUtil(MagImage img) {
+               if (img.getTemporaryFile() != null) {
+                       try {
+                               data = new 
FileInputStream(img.getTemporaryFile());
+                       } catch (Exception e) {
+                               throw new MagmaException(e, "Error loading file 
from {0}", img.getTemporaryFile().getAbsolutePath());
+                       }
+               } else {
+                       data = img.getInputStream();
+               }
+       }
+       
+       public ImageUtil(InputStream data) {
+               this.data = data;
+       }
+       
+       protected void load() {
+               if (img != null) return;
+               try {
+                       img = ImageIO.read(data);
+               } catch (Exception e) {
+                       throw new MagmaException(e, "Error parsing image");
+               }
+               width = img.getWidth();
+               height = img.getHeight();
+       }
+       
+       public int getWidth() {
+               load();
+               return width;
+       }
+       
+       public int getHeight() {
+               load();
+               return height;
+       }
+       
+       public boolean isBiggerThan(ImageFormat format) {
+               if (format.getHeight() != -1) {
+                       if (this.getHeight() < format.getHeight()) return false;
+               }
+               if (format.getWidth() != -1) {
+                       if (this.getWidth() < format.getWidth()) return false;
+               }
+               return true;
+       }
+       
+       public boolean isSmallerThan(ImageFormat format) {
+               if (format.getHeight() != -1) {
+                       if (this.getHeight() > format.getHeight()) return false;
+               }
+               if (format.getWidth() != -1) {
+                       if (this.getWidth() > format.getWidth()) return false;
+               }
+               return true;
+       }
+       
+       public InputStream resize(ImageFormat format) {
+               load();
+               int prew = getWidth();
+               int preh = getHeight();
+               int maxw = format.getWidth();
+               int maxh = format.getHeight();
+               // scale factor based on width
+               double scalefw = ((double)maxw / (double)prew);
+               // scale factor based on height
+               double scalefh = ((double)maxh / (double)preh);
+               int tgw = -1;
+               int tgh = -1;
+               if (prew > maxw || preh > maxh) {
+                       if (scalefw < scalefh) {
+                               // we need to scale on width
+                               tgw = maxw;
+                       } else {
+                               // we need to scale on height
+                               tgh = maxh;
+                       }
+               }
+               Image scaled = img.getScaledInstance(tgw, tgh, 
Image.SCALE_SMOOTH);
+               BufferedImage scaledbi = new 
BufferedImage(scaled.getWidth(null), 
scaled.getHeight(null),BufferedImage.TYPE_INT_RGB);
+               scaledbi.getGraphics().drawImage(scaled, 0, 0, null);
+               ByteArrayOutputStream baos = new ByteArrayOutputStream();
+               try {
+                       ImageIO.write(scaledbi, format.getFormat(), baos);
+               } catch (Exception e) {
+                       throw new MagmaException(e, "Error rendering resized 
image");
+               }
+               return new ByteArrayInputStream(baos.toByteArray());
+       }
+       
+       public void resize(MagImage img, ImageFormat fmt) {
+               load();
+               InputStream resize = resize(fmt);
+               String name = img.getOriginalName();
+               if (name != null) {
+                       if (name.indexOf('.') != -1) {
+                               name = name.substring(0, name.indexOf('.'));
+                       }
+                       name += "." + fmt.getFormat();
+                       img.setOriginalName(name);
+               }
+               img.setInputStream(resize);
+       }
+       
+       public void dispose() {
+               try {
+                       this.data.close();
+               } catch (Exception e) {}
+       }
+
+       @Override
+       protected void finalize() throws Throwable {
+               this.dispose();
+               super.finalize();
+       }
+       
+}

Added: 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java
 (added)
+++ 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,77 @@
+package org.apache.magma.conversion.image;
+
+import java.io.File;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagImage;
+import org.apache.magma.beans.MagFile;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.beans.image.ImageFormat;
+import org.apache.magma.beans.image.ImageUtil;
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.PropertyAwareConverter;
+import org.apache.magma.conversion.string.BaseConverter;
+import org.apache.magma.settings.Settings;
+import org.apache.magma.validation.CompoundValidator;
+import org.apache.magma.validation.Validator;
+import org.apache.magma.validation.validators.MagUploadImageValidator;
+
+/**
+ * Converts a MagFile to string and back, using a file system store.
+ * 
+ * The file system directory for storage is taken from the property
+ * magma.files.store .
+ * 
+ * The string format contains the file path in the local store, followed by 
the original file name and
+ * mime type.
+ *
+ * @author Simone Gianni <[email protected]>
+ */
+public class ImageConverterToString extends BaseConverter<MagImage> implements 
PropertyAwareConverter {
+
+       public ImageConverterToString() {
+               super(MagImage.class);
+       }
+
+       /**
+        * Always returns a new instance, cause being a {...@link 
PropertyAwareConverter} means this class is not thread safe. 
+        */     
+       @Override
+       public Converter<MagImage> build(Class<? extends MagImage> clazz) {
+               return new ImageConverterToString();
+       }
+       
+       public MagImage from(String value) {
+               if (value == null || value.length() == 0) return null;
+               MagImage ret = new MagImage(value);
+               return ret;
+       }
+
+       public int getMaximumStringSize() {
+               return 0;
+       }
+
+       public String to(MagImage value) {
+               if (value.isModified()) {
+                       PropertyInfo property = this.getProperty();
+                       ImageFormat resizeFormat = null;
+                       try {
+                               CompoundValidator val = property.getValidator();
+                               MagUploadImageValidator validator = 
(MagUploadImageValidator) val.getValidator(MagUploadImageValidator.class);
+                               resizeFormat = validator.getResizeFormat();
+                       } catch (NullPointerException e) {}
+                       if (resizeFormat != null) {
+                               ImageUtil iu = new ImageUtil(value);
+                               try {
+                                       iu.resize(value, resizeFormat);
+                               } finally {
+                                       iu.dispose();
+                               }
+                       }
+               }
+               value.persist();
+               return value.getSpec();
+       }       
+
+
+}

Added: 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj
 (added)
+++ 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,13 @@
+package org.apache.magma.validation.validators;
+
+import org.apache.magma.beans.Consider;
+import org.apache.magma.beans.MagImage;
+import org.apache.magma.beans.MagmaBeanSupport;
+
+public aspect InferConsiderOnImageValidated {
+
+       // TODO worked around for AspectJ bug
+       declare @method : (@MagUploadImage !...@consider public * 
org.apache.magma.beans.*agmaBeanSupport+.get*()) : @Consider(MagImage.class);
+       declare @method : (@MagUploadImage !...@consider public void 
org.apache.magma.beans.*agmaBeanSupport+.set*(..)) : @Consider(MagImage.class);
+       
+}

Added: 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java
 (added)
+++ 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.magma.validation.validators;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.magma.beans.Consider;
+import org.apache.magma.beans.MagFile;
+import org.apache.magma.validation.ValidationAnnotation;
+
+/**
+ * Validation for fields marked as {...@link MagFile} using {...@link 
Consider}.
+ *
+ * @author Simone Gianni <[email protected]>
+ */
+...@validationannotation
+...@target(ElementType.METHOD)
+...@retention(RetentionPolicy.RUNTIME)
+public @interface MagUploadImage {
+
+       /**
+        * @return The extensions permitted.
+        */
+       public String[] extensions() default {};
+
+       /**
+        * @return Maximum length permitted.
+        */
+       public long maxLength() default Long.MAX_VALUE;
+       
+       /**
+        * @return Minimum size, for example "16x16".
+        */
+       public String minSize() default "";
+
+       /**
+        * @return Maximum size, for example "16x16".
+        */
+       public String maxSize() default "";
+       
+       /**
+        * @return Resize the image, for example "800x800", optionally also a 
format can be specified, like "PNG 800x800" 
+        */
+       public String resize() default "";
+       
+}

Added: 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java
 (added)
+++ 
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.magma.validation.validators;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.beans.MagImage;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.beans.image.ImageFormat;
+import org.apache.magma.beans.image.ImageUtil;
+import org.apache.magma.validation.Validator;
+
+public class MagUploadImageValidator implements Validator<MagImage> {
+
+       private String[] extensions;
+       private long maxLength;
+       private String minSize;
+       private String maxSize;
+       private String resize;
+       
+       private ImageFormat maxFormat = null;
+       private ImageFormat minFormat = null;
+       private ImageFormat resizeFormat = null;
+       
+       
+       public List<LocalizableString> validate(Object bean, PropertyInfo 
property, MagImage value) {
+               if (value == null) return null;
+               List<LocalizableString> messages = null;
+               if (extensions != null && extensions.length > 0) {
+                       String name = value.getOriginalName();
+                       if (name != null) {
+                               boolean found = false;
+                               for (String ext : this.extensions) {
+                                       if (name.endsWith("." + ext)) {
+                                               found = true;
+                                               break;
+                                       }
+                               }
+                               if (!found) {
+                                       if (messages == null) messages = new 
ArrayList<LocalizableString>();
+                                       messages.add(new 
LocalizableString("Given file is not correct type, please provide one of {0}", 
this.extensions));
+                               }
+                       }
+               }
+               if (value.getLength() != 0) {
+                       if (value.getLength() > this.maxLength) {
+                               if (messages == null) messages = new 
ArrayList<LocalizableString>();
+                               messages.add(new LocalizableString("File size 
{0} is too much, please provide a file under {1} bytes", value.getLength(), 
this.maxLength));
+                       }
+               }
+               ImageUtil iu = null;
+               try {
+                       if (this.maxFormat != null) {
+                               if (iu == null) iu = new ImageUtil(value);
+                               if (iu.isBiggerThan(this.maxFormat)) {
+                                       if (messages == null) messages = new 
ArrayList<LocalizableString>();
+                                       messages.add(new 
LocalizableString("Image too big, it is {0}x{1}, while should be smaller than 
{2}x{3}", iu.getWidth(), iu.getHeight(), maxFormat.getWidth(), 
maxFormat.getHeight()));                          
+                               }
+                       }
+                       if (this.minFormat != null) {
+                               if (iu == null) iu = new ImageUtil(value);
+                               if (iu.isSmallerThan(this.minFormat)) {
+                                       if (messages == null) messages = new 
ArrayList<LocalizableString>();
+                                       messages.add(new 
LocalizableString("Image too small, it is {0}x{1}, while should be bigger than 
{2}x{3}", iu.getWidth(), iu.getHeight(), minFormat.getWidth(), 
minFormat.getHeight()));                         
+                               }
+                       }
+               } finally {
+                       if (iu != null) iu.dispose();
+               }
+               return messages;
+       }
+
+       public String[] getExtensions() {
+               return extensions;
+       }
+
+       public void setExtensions(String[] extension) {
+               this.extensions = extension;
+       }
+
+       public long getMaxLength() {
+               return maxLength;
+       }
+
+       public void setMaxLength(long maxLength) {
+               this.maxLength = maxLength;
+       }
+
+       public int maxCharacterLength() {
+               return 0;
+       }
+
+       public String getMinSize() {
+               return minSize;
+       }
+
+       public void setMinSize(String minSize) {
+               this.minSize = minSize;
+               if (minSize != null && minSize.length() > 0) {
+                       this.minFormat = new ImageFormat(minSize);
+               }
+       }
+
+       public String getMaxSize() {
+               return maxSize;
+       }
+
+       public void setMaxSize(String maxSize) {
+               this.maxSize = maxSize;
+               if (maxSize != null && maxSize.length() > 0) {
+                       this.maxFormat = new ImageFormat(maxSize);
+               }
+       }
+
+       public String getResize() {
+               return resize;
+       }
+
+       public void setResize(String resize) {
+               this.resize = resize;
+               if (resize != null && resize.length() > 0) {
+                       this.resizeFormat = new ImageFormat(resize);
+               }
+       }
+
+       public ImageFormat getMaxFormat() {
+               return maxFormat;
+       }
+
+       public void setMaxFormat(ImageFormat maxFormat) {
+               this.maxFormat = maxFormat;
+       }
+
+       public ImageFormat getMinFormat() {
+               return minFormat;
+       }
+
+       public void setMinFormat(ImageFormat minFormat) {
+               this.minFormat = minFormat;
+       }
+
+       public ImageFormat getResizeFormat() {
+               return resizeFormat;
+       }
+
+       public void setResizeFormat(ImageFormat resizeFormat) {
+               this.resizeFormat = resizeFormat;
+       }
+
+}

Added: 
labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties
 (added)
+++ 
labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,15 @@
+#Licensed to the Apache Software Foundation (ASF) under one or more
+#contributor license agreements.  See the NOTICE file distributed with
+#this work for additional information regarding copyright ownership.
+#The ASF licenses this file to You under the Apache License, Version 2.0
+#(the "License"); you may not use this file except in compliance with
+#the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing, software
+#distributed under the License is distributed on an "AS IS" BASIS,
+#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#See the License for the specific language governing permissions and
+#limitations under the License.
+org.apache.magma.conversion.Converter.aimage=org.apache.magma.conversion.image.ImageConverterToString

Added: 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java
 (added)
+++ 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,36 @@
+package org.apache.magma.beans.image;
+
+import org.apache.magma.beans.MagmaBean;
+import org.apache.magma.validation.validators.MagUploadImage;
+
+...@magmabean
+public class BeanWithImage {
+       
+       private String name;
+       private String image;
+       private String resizeImage;
+       
+       public String getName() {
+               return name;
+       }
+       public void setName(String name) {
+               this.name = name;
+       }
+       
+       @MagUploadImage(maxSize="100x100", minSize="20x20")
+       public String getImage() {
+               return image;
+       }
+       public void setImage(String image) {
+               this.image = image;
+       }
+       
+       @MagUploadImage(minSize="20x20",resize="PNG 150x150")
+       public String getResizeImage() {
+               return resizeImage;
+       }
+       public void setResizeImage(String resizeImage) {
+               this.resizeImage = resizeImage;
+       }
+
+}

Added: 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java
 (added)
+++ 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,44 @@
+package org.apache.magma.beans.image;
+
+import java.io.File;
+
+import org.apache.magma.settings.Settings;
+import org.apache.magma.settings.SettingsHolder;
+
+public class FileTestUtils {
+
+       public File tmpstore = null;
+       
+       public void setup() {
+               String tmpdirstr = System.getProperty("java.io.tmpdir");
+               File tmpdir = new File(tmpdirstr);
+               tmpstore = new File(tmpdir, "testfilestore");
+               tmpstore.mkdir();
+               Settings.ftuModifyEntry("magma.files.store", 
tmpstore.getAbsolutePath());
+       }
+       
+       static privileged aspect SettingsModifier {
+               
+               public static void Settings.ftuModifyEntry(String key, String 
value) {
+                       holder.override(key, value);
+               }
+               
+       }
+       
+       public void teardown() {
+               recurseDelete(tmpstore);
+       }
+       
+       private void recurseDelete(File f) {
+               if (f.isFile()) {
+                       f.delete();
+               } else if (f.isDirectory()) {
+                       File[] listFiles = f.listFiles();
+                       for (File file : listFiles) {
+                               recurseDelete(file);
+                       }
+                       f.delete();
+               }
+       }
+       
+}

Added: 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java?rev=888953&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java
 (added)
+++ 
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java
 Wed Dec  9 20:34:58 2009
@@ -0,0 +1,72 @@
+package org.apache.magma.beans.image;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.net.URL;
+
+import org.apache.magma.beans.BeanData;
+import org.apache.magma.beans.BeanHandler;
+import org.apache.magma.beans.MagImage;
+import org.apache.magma.conversion.image.ImageConverterToString;
+import org.apache.magma.validation.ValidationError;
+import org.junit.Test;
+
+public class TestOnBean {
+
+       @Test(expected=ValidationError.class)
+       public void validationTooSmall() throws Exception {
+               BeanWithImage bwi = new BeanWithImage();
+               BeanHandler bh = bwi.handler();
+               
+               MagImage micro = new MagImage(resAsFile("/falls_micro.jpg"), 
"fallsmicro.jpg");
+               bh.setValue("image", micro);
+               bh.validate();
+       }
+
+       @Test(expected=ValidationError.class)
+       public void validationTooBig() throws Exception {
+               BeanWithImage bwi = new BeanWithImage();
+               BeanHandler bh = bwi.handler();
+               
+               MagImage big = new MagImage(resAsFile("/falls_big.jpg"), 
"fallsbig.jpg");
+               bh.setValue("image", big);
+               bh.validate();
+       }
+       
+       @Test
+       public void noerror() throws Exception {
+               BeanWithImage bwi = new BeanWithImage();
+               BeanHandler bh = bwi.handler();
+               
+               MagImage big = new MagImage(resAsFile("/falls_small.jpg"), 
"fallssmall.jpg");
+               bh.setValue("image", big);
+               bh.validate();          
+       }
+       
+       @Test
+       public void resizing() throws Exception {
+               FileTestUtils ftu = new FileTestUtils();
+               ftu.setup();
+               try {
+                       BeanWithImage bwi = new BeanWithImage();
+                       BeanData bd = bwi.beanData();
+                       ImageConverterToString ico = new 
ImageConverterToString();
+                       ico.setProperty(bd.getProperty("resizeImage"));
+                       MagImage big = new 
MagImage(resAsFile("/falls_big.jpg"), "fallsbig.jpg");
+                       String spec = ico.to(big);
+                       System.out.println(spec);
+                       MagImage nbig = ico.from(spec);
+                       ImageUtil iu = new ImageUtil(nbig);
+                       assertTrue(iu.isSmallerThan(new 
ImageFormat("150x150")));
+               } finally {
+                       ftu.teardown();
+               }
+       }
+       
+       private File resAsFile(String name) throws Exception {
+               URL resource = getClass().getResource(name);
+               return new File(resource.toURI());
+       }
+       
+}

Added: labs/magma/trunk/beans-image/src/test/resources/falls_big.jpg
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/resources/falls_big.jpg?rev=888953&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/beans-image/src/test/resources/falls_big.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/beans-image/src/test/resources/falls_micro.jpg
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/resources/falls_micro.jpg?rev=888953&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/beans-image/src/test/resources/falls_micro.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/beans-image/src/test/resources/falls_small.jpg
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/resources/falls_small.jpg?rev=888953&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/beans-image/src/test/resources/falls_small.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to