/*
* @(#)ContentDescriptor.java 1.16 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package javax.media.protocol;
import javax.media.Format;
/**
* A <CODE>ContentDescriptor</CODE> identifies media data containers.
*
* @see SourceStream
* @see javax.media.Format
* @since JMF 1.0, extends Format in JMF 2.0
*/
public class ContentDescriptor extends Format {
/**
* RAW content type. This signifies content that's contained in
* individual buffers of type <code>Buffer</code> and carries any
* format of media as specified by the <code>format</code> attribute
* of the buffer.
* @see javax.media.Buffer
* @see javax.media.Format
* @see javax.media.protocol.PullBufferDataSource
* @see javax.media.protocol.PushBufferDataSource
*/
static public final String RAW = "raw";
/**
* RAW RTP content type. This is similar to the RAW content type
* but only carries buffers that contain packetized data formats
* supported by RTP.
*/
static public final String RAW_RTP = "raw.rtp";
/**
* Mixed content type. This signifies content that contains
* other elementary content types. e.g., when more than one
* <code>DataSources</code> is merged to formed one
* <code>DataSource</code>, the resulting <code>DataSource</code>
* may contain mixed contents.
*/
static public final String MIXED = "application.mixed-data";
/** Unknown content type */
static public final String CONTENT_UNKNOWN = "UnknownContent";
/**
* Obtain a string that represents the content-name
* for this descriptor.
*
* @return The content-type name.
*/
public String getContentType() {
return getEncoding();
}
/**
* Create a content descriptor with the specified name.
* <p>
* To create a <CODE>ContentDescriptor</CODE> from a MIME type, use
* the <code>mimeTypeToPackageName</code> static member.
*
* @param cdName The name of the content-type.
*/
public ContentDescriptor(String cdName) {
super(cdName);
}
/**
* Returns a string which describes the format parameters.
* @return a string which describes the format parameters.
*/
public String toString() {
if (encoding.equalsIgnoreCase(RAW))
return "RAW";
else if (encoding.equalsIgnoreCase(RAW_RTP))
return "RAW/RTP";
else if (encoding.equalsIgnoreCase("audio.cdaudio"))
return "CD Audio";
else
return encoding;
}
/**
* Map a MIME content-type to an equivalent string
* of class-name components.
* <p>
* The MIME type is mapped to a string by:
* <ol>
* <li>Replacing all slashes with a period.
* <li>Converting all alphabetic characters to lower case.
* <li>Converting all non-alpha-numeric characters other than periods
* to underscores (_).
* </ol>
* <p>
* For example, "text/html" would
* be converted to "text.html"
*
* @param mimeType The MIME type to map to a string.
*/
static final public String mimeTypeToPackageName(String mimeType) {
if (mimeType == null)
return null;
// All to lower case ...
mimeType = mimeType.toLowerCase();
// ... run through each char and convert
// '/' -> '.'
// !([A-Za-z0--9]) -> '_'
int len = mimeType.length();
char nm[] = new char[len];
mimeType.getChars(0, len, nm, 0);
for (int i = 0; i < len; i++) {
char c = nm[i];
if (c == '/') {
nm[i] = '.';
} else if (!(c == '.' ||
'A' <= c && c <= 'Z' ||
'a' <= c && c <= 'z' ||
'0' <= c && c <= '9')) {
nm[i] = '_';
}
}
return new String(nm);
}
}
|