You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ad...@apache.org on 2003/12/07 17:11:44 UTC

cvs commit: incubator-geronimo/specs/activation/src/test/javax/activation MimeTypeParameterListTest.java MimeTypeTest.java

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() {
  -        /*@todo implement*/
       }
   
       public MimeType(String rawdata) throws MimeTypeParseException {
  -        /*@todo implement*/
  +        parseMimeType(rawdata);
       }
   
       public MimeType(String primary, String sub) throws MimeTypeParseException {
  -        /*@todo implement*/
  +        setPrimaryType(primary);
  +        setSubType(sub);
       }
   
       public String getPrimaryType() {
  -        /*@todo implement*/
  -        return null;
  +        return primaryType;
       }
   
       public void setPrimaryType(String primary) throws MimeTypeParseException {
  -        /*@todo implement*/
  +        primaryType = parseToken(primary);
       }
   
       public String getSubType() {
  -        /*@todo implement*/
  -        return null;
  +        return subType;
       }
   
       public void setSubType(String sub) throws MimeTypeParseException {
  -        /*@todo implement*/
  +        subType = parseToken(sub);
       }
   
       public MimeTypeParameterList getParameters() {
  -        /*@todo implement*/
  -        return null;
  +        return parameterList;
       }
   
       public String getParameter(String name) {
  -        /*@todo implement*/
  -        return null;
  +        return parameterList.get(name);
       }
   
       public void setParameter(String name, String value) {
  -        /*@todo implement*/
  +        parameterList.set(name, value);
       }
   
       public void removeParameter(String name) {
  -        /*@todo implement*/
  +        parameterList.remove(name);
       }
   
       public String toString() {
  -        /*@todo implement*/
  -        return null;
  +        return getBaseType() +
  +                (parameterList == null
  +                ? ""
  +                : PARAMETER_SEPARATOR + parameterList.toString());
       }
   
       public String getBaseType() {
  -        /*@todo implement*/
  -        return null;
  +        return getPrimaryType() + TYPE_SEPARATOR + getSubType();
       }
   
       public boolean match(MimeType type) {
  -        /*@todo 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 {
  -         /*@todo implement*/
  -        return false;
  +        return match(new MimeType(rawdata));
       }
   
       public void writeExternal(ObjectOutput out) throws IOException {
  -        /*@todo implement*/
  +        out.writeUTF(toString());
  +        out.flush();
       }
   
       public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  -        /*@todo 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() {
  -        /*@todo implement*/
  +
       }
   
       public MimeTypeParameterList(String parameterList) throws MimeTypeParseException {
  -        /*@todo implement*/
  +        parse(parameterList);
       }
   
       protected void parse(String parameterList) throws MimeTypeParseException {
  -        /*@todo 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() {
  -        /*@todo implement*/
  -        return -1;
  +        return _mimeTypeParameterMap.size();
       }
   
       public boolean isEmpty() {
  -        /*@todo implement*/
  -        return false;
  +        return _mimeTypeParameterMap.isEmpty();
       }
   
       public String get(String name) {
  -        /*@todo implement*/
  -        return null;
  +        return (String) _mimeTypeParameterMap.get(name);
       }
   
       public void set(String name, String value) {
  -        /*@todo implement*/
  +        name = parseToken(name);
  +        value = parseToken(value);
  +        _mimeTypeParameterMap.put(name, value);
       }
   
       public void remove(String name) {
  -        /*@todo implement*/
  +        _mimeTypeParameterMap.remove(name);
       }
   
       public Enumeration getNames() {
  -        /*@todo implement*/
  -        return null;
  +        return Collections.enumeration(_mimeTypeParameterMap.keySet());
       }
   
       public String toString() {
  -        /*@todo 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 apache@apache.org.
   *
   * 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 apache@apache.org.
   *
   * 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
  	}
  }