blob: 76fd947f76d5cf0827a2c49eb0a1c30a8c87d8d2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002-2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.wst.wsi.internal.core.util;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import org.eclipse.wst.wsi.internal.core.WSIException;
/**
* Set of HTTPL related utilities.
*
* @version 1.0.1
* @author Peter Brittenham
*/
public final class MIMEUtils
{
/**
* Utility to present MIME header information as attribute-value pairs,
* based on ':' as attribute-value separator.
* @param mimeHeaderString an MIME header string.
* @param separators attribute-value separator list.
* @return MIME header information as attribute-value pairs.
* @throws WSIException if unable to create MIME header information
* as attribute-value pairs.
*/
public static Map getMimeHeaderTokens(String mimeHeaderString, String separators)
throws WSIException
{
StringTokenizer tokenizer = new StringTokenizer(mimeHeaderString, "\n\r\f");
Map map = new HashMap();
while (tokenizer.hasMoreTokens())
{
String line = tokenizer.nextToken();
int index = line.indexOf(separators);
if (index > 0 && index < line.length() - 1)
{
map.put(line.substring(0, index).toUpperCase(), line.substring(index + 1).trim());
}
}
return map;
}
/**
* Utility to take sub attribute value from MIME header
* @param mimeHeaderString an MIME header string.
* @param attributeName attribute name.
* @param subAttributeName sub attribute name.
* @return sub attribute value from MIME header.
* @throws WSIException if unable to get sub attribute value from MIME header.
*/
public static String getMimeHeaderSubAttribute(String mimeHeaderString,
String attributeName, String subAttributeName)
throws WSIException
{
// get attribute value
String value =
(String) getMimeHeaderTokens(mimeHeaderString,":").get(attributeName.toUpperCase());
if(value != null)
{
// search sub attribute token
int idxQ = value.toUpperCase().indexOf(subAttributeName.toUpperCase()+"=\"");
int idx = value.toUpperCase().indexOf(subAttributeName.toUpperCase()+"=");
// if attribute is quoted
if (idxQ != -1)
{
idxQ += (subAttributeName+"=\"").length();
int eIdxQ = value.indexOf("\"", idxQ);
if (eIdxQ != -1)
{
return value.substring(idxQ, eIdxQ);
}
else
{
return null;
}
}
// if attribute is not quoted
else if (idx != -1)
{
idx += (subAttributeName+"=").length();
int eIdx = -1;
// find end space separator
if ((eIdx = value.indexOf(" ", idx)) != -1)
{
return value.substring(idx, eIdx);
}
// find coma separator
else if ((eIdx = value.indexOf(";", idx)) != -1)
{
return value.substring(idx, eIdx);
}
// this is last attribute
else
{
return value.substring(idx);
}
}
// if attribute do not found
else
{
return null;
}
}
return value;
}
/**
* Utility to take attribute value from MIME header
* @param mimeHeaderString an MIME header string.
* @param attributeName attribute name.
* @return attribute value from MIME header.
* @throws WSIException if unable to get attribute value from MIME header.
*/
public static String getMimeHeaderAttribute(String mimeHeaderString,
String attributeName)
throws WSIException
{
String attributeValue =
(String) getMimeHeaderTokens(mimeHeaderString,":").get(attributeName.toUpperCase());
// get first token
if((attributeValue != null) && (attributeValue.indexOf(";") != -1)) {
attributeValue = attributeValue.substring(0, attributeValue.indexOf(";"));
}
return attributeValue;
}
}