adc         2003/12/07 08:11:44

  Modified:    specs/activation/src/java/javax/activation MimeType.java
                        MimeTypeParameterList.java
  Added:       specs/activation/src/test/javax/activation
                        MimeTypeParameterListTest.java MimeTypeTest.java
  Log:
  Partial JAF spec by Laurent Foret.
  
  Revision  Changes    Path
  1.2       +63 -30    
incubator-geronimo/specs/activation/src/java/javax/activation/MimeType.java
  
  Index: MimeType.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/specs/activation/src/java/javax/activation/MimeType.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MimeType.java     16 Aug 2003 18:07:45 -0000      1.1
  +++ MimeType.java     7 Dec 2003 16:11:44 -0000       1.2
  @@ -67,86 +67,119 @@
   import java.io.ObjectInput;
   import java.io.ObjectOutput;
   
  +
   /**
  - *
  - *
  - *
    * @version $Revision$ $Date$
    */
   public class MimeType implements Externalizable {
  +    private final static String TYPE_SEPARATOR = "/";
  +    private final static String PARAMETER_SEPARATOR = ";";
  +    private final static String STAR_SUB_TYPE = "*";
  +
  +    private String primaryType = "text";
  +    private String subType = "plain";
  +    private MimeTypeParameterList parameterList = new 
MimeTypeParameterList();;
  +
       public MimeType() {
  -        /[EMAIL PROTECTED] implement*/
       }
   
       public MimeType(String rawdata) throws MimeTypeParseException {
  -        /[EMAIL PROTECTED] implement*/
  +        parseMimeType(rawdata);
       }
   
       public MimeType(String primary, String sub) throws 
MimeTypeParseException {
  -        /[EMAIL PROTECTED] implement*/
  +        setPrimaryType(primary);
  +        setSubType(sub);
       }
   
       public String getPrimaryType() {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        return primaryType;
       }
   
       public void setPrimaryType(String primary) throws MimeTypeParseException 
{
  -        /[EMAIL PROTECTED] implement*/
  +        primaryType = parseToken(primary);
       }
   
       public String getSubType() {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        return subType;
       }
   
       public void setSubType(String sub) throws MimeTypeParseException {
  -        /[EMAIL PROTECTED] implement*/
  +        subType = parseToken(sub);
       }
   
       public MimeTypeParameterList getParameters() {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        return parameterList;
       }
   
       public String getParameter(String name) {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        return parameterList.get(name);
       }
   
       public void setParameter(String name, String value) {
  -        /[EMAIL PROTECTED] implement*/
  +        parameterList.set(name, value);
       }
   
       public void removeParameter(String name) {
  -        /[EMAIL PROTECTED] implement*/
  +        parameterList.remove(name);
       }
   
       public String toString() {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        return getBaseType() +
  +                (parameterList == null
  +                ? ""
  +                : PARAMETER_SEPARATOR + parameterList.toString());
       }
   
       public String getBaseType() {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        return getPrimaryType() + TYPE_SEPARATOR + getSubType();
       }
   
       public boolean match(MimeType type) {
  -        /[EMAIL PROTECTED] implement*/
  -        return false;
  +        return (
  +                getPrimaryType().equals(type.getPrimaryType())
  +                && (getSubType().equals(STAR_SUB_TYPE)
  +                || type.getSubType().equals(STAR_SUB_TYPE)
  +                || getSubType().equals(type.getSubType())));
       }
   
       public boolean match(String rawdata) throws MimeTypeParseException {
  -         /[EMAIL PROTECTED] implement*/
  -        return false;
  +        return match(new MimeType(rawdata));
       }
   
       public void writeExternal(ObjectOutput out) throws IOException {
  -        /[EMAIL PROTECTED] implement*/
  +        out.writeUTF(toString());
  +        out.flush();
       }
   
       public void readExternal(ObjectInput in) throws IOException, 
ClassNotFoundException {
  -        /[EMAIL PROTECTED] implement*/
  +        try {
  +            parseMimeType(in.readUTF());
  +        } catch (MimeTypeParseException mtpex) {
  +            throw new IOException(mtpex.getMessage());
  +        }
       }
  -}
  \ No newline at end of file
  +
  +    private void parseMimeType(String rawData) throws MimeTypeParseException 
{
  +        int typeSeparatorPos = rawData.indexOf(TYPE_SEPARATOR);
  +        int parameterSeparatorPos = rawData.indexOf(PARAMETER_SEPARATOR);
  +
  +        if (typeSeparatorPos < 0) {
  +            throw new MimeTypeParseException("Unable to find subtype");
  +        }
  +
  +        setPrimaryType(rawData.substring(0, typeSeparatorPos));
  +        if (parameterSeparatorPos < 0) {
  +            setSubType(rawData.substring(typeSeparatorPos + 1));
  +        } else {
  +            setSubType(rawData.substring(typeSeparatorPos + 1, 
parameterSeparatorPos));
  +            parameterList = new 
MimeTypeParameterList(rawData.substring(parameterSeparatorPos + 1));
  +        }
  +    }
  +
  +    private static String parseToken(String tokenString) {
  +        // TODO it seems to have unauthorized chars
  +        return tokenString;
  +    }
  +
  +}
  
  
  
  1.2       +68 -19    
incubator-geronimo/specs/activation/src/java/javax/activation/MimeTypeParameterList.java
  
  Index: MimeTypeParameterList.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/specs/activation/src/java/javax/activation/MimeTypeParameterList.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MimeTypeParameterList.java        16 Aug 2003 18:07:45 -0000      1.1
  +++ MimeTypeParameterList.java        7 Dec 2003 16:11:44 -0000       1.2
  @@ -63,56 +63,105 @@
   package javax.activation;
   
   import java.util.Enumeration;
  +import java.util.StringTokenizer;
  +import java.util.Collections;
  +import java.util.HashMap;
  +import java.util.Map;
  +
   
   /**
  - *
  - *
  - *
    * @version $Revision$ $Date$
    */
   public class MimeTypeParameterList {
  +    private final static String PARAMETER_SEPARATOR = ";";
  +    private final static String NAME_VALUE_SEPARATOR = "=";
  +
  +    Map _mimeTypeParameterMap = new HashMap();
  +
       public MimeTypeParameterList() {
  -        /[EMAIL PROTECTED] implement*/
  +
       }
   
       public MimeTypeParameterList(String parameterList) throws 
MimeTypeParseException {
  -        /[EMAIL PROTECTED] implement*/
  +        parse(parameterList);
       }
   
       protected void parse(String parameterList) throws MimeTypeParseException 
{
  -        /[EMAIL PROTECTED] implement*/
  +        if (parameterList == null) {
  +            return;
  +        }
  +
  +        StringTokenizer tokenizer = new StringTokenizer(parameterList, 
PARAMETER_SEPARATOR);
  +        while (tokenizer.hasMoreTokens()) {
  +            String parameter = tokenizer.nextToken();
  +            if (parameter.length() == 0) {
  +                continue;
  +            }
  +            int eq = parameter.indexOf(NAME_VALUE_SEPARATOR);
  +            String name = null;
  +            if (eq > -1) {
  +                name = parseToken(parameter.substring(0, eq));
  +            }
  +            String value = parseToken(parameter.substring(eq + 1));
  +            if ((name == null || name.length() == 0) && value.length() == 0) 
{
  +                continue;
  +            }
  +            if (name.length() == 0 || value.length() == 0) {
  +                throw new MimeTypeParseException("Name or value is Missing");
  +            }
  +            set(name, value);
  +
  +        }
  +
       }
   
       public int size() {
  -        /[EMAIL PROTECTED] implement*/
  -        return -1;
  +        return _mimeTypeParameterMap.size();
       }
   
       public boolean isEmpty() {
  -        /[EMAIL PROTECTED] implement*/
  -        return false;
  +        return _mimeTypeParameterMap.isEmpty();
       }
   
       public String get(String name) {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        return (String) _mimeTypeParameterMap.get(name);
       }
   
       public void set(String name, String value) {
  -        /[EMAIL PROTECTED] implement*/
  +        name = parseToken(name);
  +        value = parseToken(value);
  +        _mimeTypeParameterMap.put(name, value);
       }
   
       public void remove(String name) {
  -        /[EMAIL PROTECTED] implement*/
  +        _mimeTypeParameterMap.remove(name);
       }
   
       public Enumeration getNames() {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        return Collections.enumeration(_mimeTypeParameterMap.keySet());
       }
   
       public String toString() {
  -        /[EMAIL PROTECTED] implement*/
  -        return null;
  +        StringBuffer buf = new StringBuffer();
  +        for (Enumeration enum = getNames(); enum.hasMoreElements();) {
  +            buf.append(PARAMETER_SEPARATOR);
  +            String name = (String) enum.nextElement();
  +            buf.append(name).append(NAME_VALUE_SEPARATOR).append(get(name));
  +        }
  +        return buf.toString();
  +    }
  +
  +    private String parseToken(String token) {
  +        // TODO it seems to have unauthorized chars
  +        return removeBlank(token);
  +    }
  +
  +    private String removeBlank(String str) {
  +        StringBuffer buf = new StringBuffer();
  +        StringTokenizer tokenizer = new StringTokenizer(str);
  +        while (tokenizer.hasMoreTokens()) {
  +            buf.append(tokenizer.nextToken());
  +        }
  +        return buf.toString();
       }
   }
  
  
  
  1.1                  
incubator-geronimo/specs/activation/src/test/javax/activation/MimeTypeParameterListTest.java
  
  Index: MimeTypeParameterListTest.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http:www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http:www.apache.org/>.
   *
   * ====================================================================
   */
  package javax.activation;
  
  import junit.framework.TestCase;
  
  
  /**
   *
   * @version $Revision: 1.1 $ $Date: 2003/12/07 16:11:44 $
   */
  public class MimeTypeParameterListTest extends TestCase {
  
        private String simpleParameterListStr;
        private String withWhiteSpacesParameterListStr;
        private String longParameterListStr;
        private String noNameParameterListStr;
        private String noValueParameterListStr;
  
        public MimeTypeParameterListTest(String name) {
                super(name);
        }
  
        protected void setUp() throws Exception {
                super.setUp();
                simpleParameterListStr = ";name=value";
                withWhiteSpacesParameterListStr = "; name= value ;  ";
                longParameterListStr = "; name1 =value1;;   ; name2= 
value2;name3= value3;name4  =value4;";
                noNameParameterListStr = "; = value";
                noValueParameterListStr = "; name=";
        }
  
        public void testEmptyParameterList() {
                MimeTypeParameterList parameterList = new 
MimeTypeParameterList();
                assertEquals(0, parameterList.size());
        }
  
        public void testSimpleParameterList() throws MimeTypeParseException {
                MimeTypeParameterList parameterList = new 
MimeTypeParameterList(simpleParameterListStr);
                assertEquals(simpleParameterListStr, parameterList.toString());
        }
  
        public void testWhiteSpacesParameterList() throws 
MimeTypeParseException {
                MimeTypeParameterList parameterList = new 
MimeTypeParameterList(withWhiteSpacesParameterListStr);
                assertEquals(simpleParameterListStr, parameterList.toString());
        }
  
        public void testLongParameterList() throws MimeTypeParseException {
                MimeTypeParameterList parameterList = new 
MimeTypeParameterList(longParameterListStr);
                assertEquals(4, parameterList.size());
                assertEquals("value1", parameterList.get("name1"));
                assertEquals("value2", parameterList.get("name2"));
                assertEquals("value3", parameterList.get("name3"));
                assertEquals("value4", parameterList.get("name4"));
        }
  
        public void testNoNameParameterList() {
                boolean catched = false;
                try {
                        MimeTypeParameterList parameterList = new 
MimeTypeParameterList(noNameParameterListStr);
                } catch (MimeTypeParseException mtpEx) {
                        catched = true;
                }
                assertTrue(catched);
        }
  
        public void testNoValueParameterList() {
                boolean catched = false;
                try {
                        MimeTypeParameterList parameterList = new 
MimeTypeParameterList(noValueParameterListStr);
                } catch (MimeTypeParseException mtpEx) {
                        catched = true;
                }
                assertTrue(catched);
        }
  }
  
  
  
  
  1.1                  
incubator-geronimo/specs/activation/src/test/javax/activation/MimeTypeTest.java
  
  Index: MimeTypeTest.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http:www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http:www.apache.org/>.
   *
   * ====================================================================
   */
  package javax.activation;
  
  import junit.framework.TestCase;
  
  
  /**
   *
   * @version $Revision: 1.1 $ $Date: 2003/12/07 16:11:44 $
   */
  public class MimeTypeTest extends TestCase {
  
        private final static String DEFAULT_PRIMARY_TYPE = "text";
        private final static String DEFAULT_SUB_TYPE = "plain";
  
        private String defaultRawdata;
        private String primary;
        private String sub;
        private String withParamsRawdata;
  
        public MimeTypeTest(String name) {
                super(name);
        }
  
        public void setUp() throws Exception {
                super.setUp();
                defaultRawdata = "text/plain;";
                primary = "primary";
                sub = "sub";
                withParamsRawdata = primary + "/" + sub + "; name1 =value1; 
name2 = value2;";
        }
  
        public void test1DefaultConstructor() {
                MimeType mimeType = new MimeType();
                assertEquals(DEFAULT_PRIMARY_TYPE, mimeType.getPrimaryType());
                assertEquals(DEFAULT_SUB_TYPE, mimeType.getSubType());
                assertEquals(0, mimeType.getParameters().size());
                assertTrue(mimeType.match(new MimeType()));
        }
  
        public void test2OthersConstructor() throws MimeTypeParseException {
                MimeType mimeType = new MimeType(defaultRawdata);
                MimeType defaultMimeType = new MimeType();
                assertEquals(defaultMimeType.getBaseType(), 
mimeType.getBaseType());
                assertTrue(mimeType.match(defaultMimeType));
  
                mimeType = new MimeType(withParamsRawdata);
                assertEquals(primary, mimeType.getPrimaryType());
                assertEquals(sub, mimeType.getSubType());
                assertEquals(2, mimeType.getParameters().size());
                assertEquals("value1", mimeType.getParameter("name1"));
  
                MimeType mimeType2 = new MimeType(primary, sub);
                assertEquals(primary, mimeType2.getPrimaryType());
                assertEquals(sub, mimeType2.getSubType());
                assertTrue(mimeType2.match(mimeType));
        }
  
        public void test3MatchMethods() throws MimeTypeParseException {
                assertTrue(new MimeType().match(new MimeType()));
                assertTrue(new MimeType().match(defaultRawdata));
        }
  
        public void test4ExternalMethods() {
                // TODO
        }
  }
  
  
  
  

Reply via email to