/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: MimeType.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.cmf;
import com.uwyn.rife.cmf.format.Formatter;
import com.uwyn.rife.cmf.format.ImageFormatter;
import com.uwyn.rife.cmf.format.PlainTextFormatter;
import com.uwyn.rife.cmf.format.RawFormatter;
import com.uwyn.rife.cmf.format.XhtmlFormatter;
import com.uwyn.rife.cmf.validation.CmfPropertyValidationRule;
import com.uwyn.rife.cmf.validation.SupportedImage;
import com.uwyn.rife.cmf.validation.SupportedXhtml;
import com.uwyn.rife.datastructures.EnumClass;
import com.uwyn.rife.site.ConstrainedProperty;
/**
* This is a typed enumeration of all the mime types that the content
* management framework specifically knows about.
* <p>The types that are defined here can be validated and transformed.
*
* @author Geert Bevin (gbevin[remove] at uwyn dot com)
* @version $Revision: 3918 $
* @since 1.0
*/
public abstract class MimeType extends EnumClass<String>
{
/**
* The <code>application/xhtml+xml</code> mime type.
*/
public static final MimeType APPLICATION_XHTML = new MimeType("application/xhtml+xml") {
public CmfPropertyValidationRule getValidationRule(ConstrainedProperty constrainedProperty)
{
return new SupportedXhtml(constrainedProperty.getPropertyName(), constrainedProperty.isFragment());
}
public Formatter getFormatter()
{
return new XhtmlFormatter();
}
};
/**
* The <code>image/gif</code> mime type.
*/
public static final MimeType IMAGE_GIF = new MimeType("image/gif") {
public CmfPropertyValidationRule getValidationRule(ConstrainedProperty constrainedProperty)
{
return new SupportedImage(constrainedProperty.getPropertyName());
}
public Formatter getFormatter()
{
return new ImageFormatter();
}
};
/**
* The <code>image/jpeg</code> mime type.
*/
public static final MimeType IMAGE_JPEG = new MimeType("image/jpeg") {
public CmfPropertyValidationRule getValidationRule(ConstrainedProperty constrainedProperty)
{
return new SupportedImage(constrainedProperty.getPropertyName());
}
public Formatter getFormatter()
{
return new ImageFormatter();
}
};
/**
* The <code>image/png</code> mime type.
*/
public static final MimeType IMAGE_PNG = new MimeType("image/png") {
public CmfPropertyValidationRule getValidationRule(ConstrainedProperty constrainedProperty)
{
return new SupportedImage(constrainedProperty.getPropertyName());
}
public Formatter getFormatter()
{
return new ImageFormatter();
}
};
/**
* The <code>text/plain</code> mime type.
*/
public static final MimeType TEXT_PLAIN = new MimeType("text/plain") {
public CmfPropertyValidationRule getValidationRule(ConstrainedProperty constrainedProperty)
{
return null;
}
public Formatter getFormatter()
{
return new PlainTextFormatter();
}
};
/**
* The <code>text/plain</code> mime type.
*/
public static final MimeType TEXT_XML = new MimeType("text/xml") {
public CmfPropertyValidationRule getValidationRule(ConstrainedProperty constrainedProperty)
{
return null;
}
public Formatter getFormatter()
{
return new PlainTextFormatter();
}
};
/**
* A generic mime type indicating that the content should be stored as raw
* data without any mime-type related processing.
*/
public static final MimeType RAW = new MimeType("raw") {
public CmfPropertyValidationRule getValidationRule(ConstrainedProperty constrainedProperty)
{
return null;
}
public Formatter getFormatter()
{
return new RawFormatter();
}
};
/**
* Constructs and returns a CMF-specific validation rule that is able to
* validate data for this mime type.
*
* @param constrainedProperty an instance of the property for which the
* validation rule has to be built
* @return an instance of the validation rule
* @since 1.0
*/
public abstract CmfPropertyValidationRule getValidationRule(ConstrainedProperty constrainedProperty);
/**
* Returns an instance of the formatter for this mime type.
*
* @return an instance of the formatter
* @since 1.0
*/
public abstract Formatter getFormatter();
/**
* Returns the <code>MimeType</code> instance that corresponds to a given
* textual identifier.
*
* @param identifier the identifier of the mime type that has to be
* retrieved
* @return the requested <code>MimeType</code>; or
* <p><code>null</code> if the <code>MimeType</code> is not supported
* @since 1.0
*/
public static MimeType getMimeType(String identifier)
{
return getMember(MimeType.class, identifier);
}
MimeType(String identifier)
{
super(MimeType.class, identifier);
}
}