Author: simoneg
Date: Wed Dec  9 20:28:49 2009
New Revision: 888947

URL: http://svn.apache.org/viewvc?rev=888947&view=rev
Log:
LABS-380 : meta type for uploaded files

Added:
    labs/magma/trunk/beans-file/pom.xml
    labs/magma/trunk/beans-file/src/
    labs/magma/trunk/beans-file/src/main/
    labs/magma/trunk/beans-file/src/main/java/
    labs/magma/trunk/beans-file/src/main/java/org/
    labs/magma/trunk/beans-file/src/main/java/org/apache/
    labs/magma/trunk/beans-file/src/main/java/org/apache/magma/
    labs/magma/trunk/beans-file/src/main/java/org/apache/magma/beans/
    
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/beans/MagFile.java
    labs/magma/trunk/beans-file/src/main/java/org/apache/magma/conversion/
    labs/magma/trunk/beans-file/src/main/java/org/apache/magma/conversion/file/
    
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/conversion/file/FileConverterToString.java
    labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/
    
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/
    
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/InferConsiderOnFileValidated.aj
    
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUpload.java
    
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUploadValidator.java
    labs/magma/trunk/beans-file/src/main/resources/
    labs/magma/trunk/beans-file/src/main/resources/META-INF/
    
labs/magma/trunk/beans-file/src/main/resources/META-INF/magma.default.properties
    labs/magma/trunk/beans-file/src/test/
    labs/magma/trunk/beans-file/src/test/java/
    labs/magma/trunk/beans-file/src/test/java/org/
    labs/magma/trunk/beans-file/src/test/java/org/apache/
    labs/magma/trunk/beans-file/src/test/java/org/apache/magma/
    labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/
    
labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/FileTestUtils.java
    
labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/MagFileTest.java
    labs/magma/trunk/beans-file/src/test/resources/
    labs/magma/trunk/beans-file/src/test/resources/testFile.txt

Added: labs/magma/trunk/beans-file/pom.xml
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/pom.xml?rev=888947&view=auto
==============================================================================
--- labs/magma/trunk/beans-file/pom.xml (added)
+++ labs/magma/trunk/beans-file/pom.xml Wed Dec  9 20:28:49 2009
@@ -0,0 +1,32 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <parent>
+    <artifactId>magma-parent</artifactId>
+    <groupId>org.apache.magma</groupId>
+    <version>3</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.magma</groupId>
+  <artifactId>beans-file</artifactId>
+  <packaging>magma</packaging>
+  <version>0.0.3-SNAPSHOT</version>
+  <name>Magma File metatype</name>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.magma</groupId>
+      <artifactId>foundation-beans</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>

Added: 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/beans/MagFile.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/src/main/java/org/apache/magma/beans/MagFile.java?rev=888947&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/beans/MagFile.java 
(added)
+++ 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/beans/MagFile.java 
Wed Dec  9 20:28:49 2009
@@ -0,0 +1,220 @@
+package org.apache.magma.beans;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.settings.Settings;
+
+
+public class MagFile {
+       
+       protected String originalName;
+       protected String mimeType;
+       protected long length;
+       /**
+        * Relative file name of this file
+        */
+       protected String source;
+
+       /**
+        * Root folder where files are stored
+        */
+       protected String base = Settings.get("magma.files.store");
+       
+       // Persisting variables
+       protected File temporary;
+       protected boolean modified;
+       
+       protected InputStream stream;
+       
+
+       public MagFile() {
+       }
+       
+       public MagFile(File temporaryFile, String originalName) {
+               this.temporary = temporaryFile;
+               this.originalName = originalName;
+               this.length = this.temporary.length();
+               this.modified = true;
+       }
+               
+       /**
+        * Parse the string representation of a file.
+        * 
+        * Currently two formats are supported : raw relative path and Magma 
format.
+        * 
+        * The raw relative path is simply a path relative to the local file 
storage. This
+        * mean that to obtain the file name and length some filesystem 
operations need to
+        * be perfomed.
+        * 
+        * On the opposite, the magma format contains original name, length and 
other informations in a packed
+        * string, not requiring any access to the filesystem.
+        * 
+        * @param spec
+        */
+       public MagFile(String spec) {
+               char fmt = spec.charAt(0);
+               spec = spec.substring(1);
+               if (fmt == '1') {
+                       int ios = spec.indexOf('/');
+                       if (ios != -1) {
+                               spec = spec.substring(0, ios);
+                       }
+                       String[] split = spec.split("\\*");
+                       source = split[0];
+                       if (split[1] != "null")
+                               originalName = split[1];
+                       if (split[2] != "null")
+                               mimeType = split[2];
+                       if (split[3] != "null")
+                               length = Long.parseLong(split[3]);
+               } else {
+                       if (fmt != '/') {
+                               spec = fmt + spec;
+                       }
+                       spec = spec.replaceAll("\\\\", "/");
+                       while (spec.startsWith("/")) {
+                               spec = spec.substring(1);
+                       }
+                       if (spec.contains("..")) {
+                               throw new MagmaException("Cannot accept {0} as 
a file path cause it contains '..'", spec);
+                       }
+                       this.source = spec;
+                       File f = new File(this.base + this.source);
+                       this.originalName = f.getName();
+                       if (f.exists()) {
+                               this.length = f.length();
+                       }
+               }
+               this.modified = false;
+       }
+       
+       public MagFile(InputStream stream) {
+               this.stream = stream;
+               this.modified = false;
+       }
+       
+       public void setInputStream(InputStream stream) {
+               this.stream = stream;
+               this.modified = true;
+       }
+       
+       public String getOriginalName() {
+               return originalName;
+       }
+
+       public void setOriginalName(String originalName) {
+               this.originalName = originalName;
+       }
+
+       public String getMimeType() {
+               return mimeType;
+       }
+
+       public void setMimeType(String mimeType) {
+               this.mimeType = mimeType;
+       }
+
+       public String getSource() {
+               return source;
+       }
+
+       public void setSource(String source) {
+               this.source = source;
+       }
+
+       public long getLength() {
+               return length;
+       }
+
+       public void setLength(long length) {
+               this.length = length;
+       }
+       
+       
+       public String getSpec() {
+               return "1" + this.source + "*" + this.originalName + "*" + 
this.mimeType + "*" + this.length;
+       }
+
+       public InputStream getInputStream() {
+               if (this.stream != null) return this.stream;
+               if (!base.endsWith("/")) base += "/";
+               try {
+                       return new FileInputStream(new File(this.base + 
this.source));
+               } catch (FileNotFoundException e) {
+                       throw new MagmaException(e, "File not found");
+               }
+       }
+       
+       public void persist() {
+               if (!modified) return;
+               if (source == null) {
+                       source = Long.toHexString(System.currentTimeMillis()) + 
Long.toHexString(System.nanoTime()); 
+               }
+               if (this.stream != null) {
+                       try {
+                               try {
+                                       persist(this.stream);
+                               } finally {
+                                       this.stream.close();
+                               }
+                       } catch (IOException e) {
+                               throw new MagmaException(e, "Error persisting 
file");
+                       }                       
+               } else if (temporary != null) {
+                       try {
+                               FileInputStream fis = new 
FileInputStream(temporary);
+                               try {
+                                       persist(fis);
+                               } finally {
+                                       fis.close();
+                               }
+                       } catch (IOException e) {
+                               throw new MagmaException(e, "Error persisting 
file");
+                       }
+               }
+       }
+
+       protected void persist(InputStream fileInputStream) throws IOException {
+               if (!base.endsWith("/")) base += "/";
+               File dest = new File(base + this.source);               
+               FileOutputStream fos = new FileOutputStream(dest);
+               try {
+                       byte[] buff = new byte[4096];
+                       int len = 0;
+                       while ((len = fileInputStream.read(buff)) > 0) {
+                               fos.write(buff, 0, len);
+                       }
+               } finally {
+                       fos.close();
+               }
+       }
+       
+       public String getExtension() {
+               String name = this.originalName;
+               if (name == null) {
+                       if (this.temporary != null) name = 
this.temporary.getName();
+                       if (name == null) {
+                               name = this.source;
+                       }
+               }
+               if (name == null) return "raw";
+               int iop = name.lastIndexOf('.');
+               if (iop == -1) return "raw";
+               return name.substring(iop + 1);
+       }
+
+       public File getTemporaryFile() {
+               return this.temporary;
+       }
+
+       public boolean isModified() {
+               return modified;
+       }
+
+}

Added: 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/conversion/file/FileConverterToString.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/src/main/java/org/apache/magma/conversion/file/FileConverterToString.java?rev=888947&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/conversion/file/FileConverterToString.java
 (added)
+++ 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/conversion/file/FileConverterToString.java
 Wed Dec  9 20:28:49 2009
@@ -0,0 +1,54 @@
+package org.apache.magma.conversion.file;
+
+import java.io.File;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagFile;
+import org.apache.magma.beans.PropertyInfo;
+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;
+
+/**
+ * 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 FileConverterToString extends BaseConverter<MagFile> implements 
PropertyAwareConverter {
+
+       public FileConverterToString() {
+               super(MagFile.class);
+       }
+
+       /**
+        * Always returns a new instance, cause being a {...@link 
PropertyAwareConverter} means this class is not thread safe. 
+        */     
+       @Override
+       public Converter<MagFile> build(Class<? extends MagFile> clazz) {
+               return new FileConverterToString();
+       }
+       
+       public MagFile from(String value) {
+               if (value == null || value.length() == 0) return null;
+               MagFile ret = new MagFile(value);
+               return ret;
+       }
+
+       public int getMaximumStringSize() {
+               return 0;
+       }
+
+       public String to(MagFile value) {
+               value.persist();
+               return value.getSpec();
+       }       
+
+
+}

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

Added: 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUpload.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUpload.java?rev=888947&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUpload.java
 (added)
+++ 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUpload.java
 Wed Dec  9 20:28:49 2009
@@ -0,0 +1,48 @@
+/*
+ * 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 MagUpload {
+
+       /**
+        * @return The extensions permitted.
+        */
+       public String[] extensions() default {};
+
+       /**
+        * @return Maximum length permitted.
+        */
+       public long maxLength() default Long.MAX_VALUE;
+       
+}

Added: 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUploadValidator.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUploadValidator.java?rev=888947&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUploadValidator.java
 (added)
+++ 
labs/magma/trunk/beans-file/src/main/java/org/apache/magma/validation/validators/MagUploadValidator.java
 Wed Dec  9 20:28:49 2009
@@ -0,0 +1,80 @@
+/*
+ * 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.MagFile;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.validation.Validator;
+
+public class MagUploadValidator implements Validator<MagFile> {
+
+       private String[] extensions;
+       private long maxLength;
+       
+       public List<LocalizableString> validate(Object bean, PropertyInfo 
property, MagFile 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));
+                       }
+               }
+               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;
+       }
+
+}

Added: 
labs/magma/trunk/beans-file/src/main/resources/META-INF/magma.default.properties
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/src/main/resources/META-INF/magma.default.properties?rev=888947&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-file/src/main/resources/META-INF/magma.default.properties
 (added)
+++ 
labs/magma/trunk/beans-file/src/main/resources/META-INF/magma.default.properties
 Wed Dec  9 20:28:49 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.file=org.apache.magma.conversion.file.FileConverterToString

Added: 
labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/FileTestUtils.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/FileTestUtils.java?rev=888947&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/FileTestUtils.java
 (added)
+++ 
labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/FileTestUtils.java
 Wed Dec  9 20:28:49 2009
@@ -0,0 +1,44 @@
+package org.apache.magma.beans;
+
+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-file/src/test/java/org/apache/magma/beans/MagFileTest.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/MagFileTest.java?rev=888947&view=auto
==============================================================================
--- 
labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/MagFileTest.java
 (added)
+++ 
labs/magma/trunk/beans-file/src/test/java/org/apache/magma/beans/MagFileTest.java
 Wed Dec  9 20:28:49 2009
@@ -0,0 +1,60 @@
+package org.apache.magma.beans;
+
+import static org.junit.Assert.*;
+import static org.junit.matchers.JUnitMatchers.*;
+import static org.hamcrest.CoreMatchers.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class MagFileTest {
+       
+       private FileTestUtils ftu = null;
+       
+       @Before
+       public void setup() {
+               ftu = new FileTestUtils();
+               ftu.setup();
+       }
+       
+       @After
+       public void teardown() {
+               if (ftu != null) ftu.teardown();
+       }
+       
+       @Test
+       public void cyclingTest() throws Exception {
+               URL url = getClass().getResource("/testFile.txt");
+               File f = new File(url.toURI());
+               MagFile mf = new MagFile(f, "textfile.txt");
+               assertThat(mf.getLength(), equalTo(f.length()));
+               mf.persist();
+               String source = mf.getSource();
+               assertNotNull(source);
+               File saved = new File(ftu.tmpstore, source);
+               assertTrue("File not created", saved.exists());
+               assertThat("File size does not match", saved.length(), 
equalTo(f.length()));
+               
+               String spec = mf.getSpec();
+               assertNotNull("No spec", spec);
+               MagFile mf2 = new MagFile(spec);
+               assertThat(mf2.getOriginalName(), equalTo("textfile.txt"));
+               assertThat(mf2.getLength(), equalTo(f.length()));
+               assertThat(mf2.getSource(), equalTo(source));
+               InputStream inputStream = mf2.getInputStream();
+               assertNotNull(inputStream);
+               byte[] buff = new byte[1024];
+               int len = inputStream.read(buff);
+               assertThat(len, equalTo((int)f.length()));
+               
+       }
+       
+       
+
+}

Added: labs/magma/trunk/beans-file/src/test/resources/testFile.txt
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/beans-file/src/test/resources/testFile.txt?rev=888947&view=auto
==============================================================================
--- labs/magma/trunk/beans-file/src/test/resources/testFile.txt (added)
+++ labs/magma/trunk/beans-file/src/test/resources/testFile.txt Wed Dec  9 
20:28:49 2009
@@ -0,0 +1 @@
+This is a test file
\ No newline at end of file



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

Reply via email to