/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/
package org.infoglue.cms.util.handlers;
import org.apache.log4j.Logger;
import org.exolab.castor.mapping.FieldHandler;
import org.exolab.castor.mapping.ValidityException;
import org.infoglue.cms.entities.content.impl.simple.DigitalAssetImpl;
/**
* A FieldHandler for the XML Schema Collection type.
* TODO : support all kind of XSList
* @author <a href="blandin@intalio.com">Arnaud Blandin</a>
* @version $Revision: 1.7 $ $Date: 2009/04/19 19:06:15 $
**/
public class DigitalAssetBytesHandler implements FieldHandler
{
public final static Logger logger = Logger.getLogger(DigitalAssetBytesHandler.class.getName());
private static int maxSize = -1;
private static ThreadLocal maxSizeTL = new ThreadLocal()
{
protected synchronized Object initialValue()
{
return new Integer(maxSize);
}
};
public static int getMaxSize()
{
return ((Integer) (maxSizeTL.get())).intValue();
}
public static void setMaxSize(int maxSize)
{
maxSizeTL.set(maxSize);
}
//----------------/
//- Constructors -/
//----------------/
public DigitalAssetBytesHandler()
{
super();
}
/**
* Returns the value of the field from the object.
*
* @param object The object
* @return The value of the field
* @throws IllegalStateException The Java object has changed and
* is no longer supported by this handler, or the handler is not
* compatiable with the Java object
*/
public Object getValue( Object object ) throws IllegalStateException
{
byte[] returnArray = null;
DigitalAssetImpl asset = (DigitalAssetImpl)object;
if((getMaxSize() != -1 && asset.getAssetFileSize() > getMaxSize())/* || asset.getAssetFileSize() == 0*/)
{
returnArray = "archived".getBytes();
}
else
returnArray = asset.getAssetBytes();
if(returnArray == null)
{
logger.warn("returnArray:" + returnArray + " for " + asset.getId() + "-" + asset.getAssetKey());
returnArray = "archived".getBytes();
logger.warn("fixed returnArray:" + returnArray + " for " + asset.getId() + "-" + asset.getAssetKey());
}
return returnArray;
}
/**
* Sets the value of the field on the object.
*
* @param object The object
* @param value The new value
* @throws IllegalStateException The Java object has changed and
* is no longer supported by this handler, or the handler is not
* compatiable with the Java object
* @thorws IllegalArgumentException The value passed is not of
* a supported type
*/
public void setValue( Object object, Object value ) throws IllegalStateException, IllegalArgumentException
{
DigitalAssetImpl asset = (DigitalAssetImpl)object;
if(value != null)
asset.setAssetBytes((byte[])value);
else
asset.setAssetBytes("archived".getBytes());
}
/**
* Creates a new instance of the object described by this field.
*
* @param parent The object for which the field is created
* @return A new instance of the field's value
* @throws IllegalStateException This field is a simple type and
* cannot be instantiated
*/
public Object newInstance( Object parent ) throws IllegalStateException
{
return null;
}
/**
* Sets the value of the field to a default value.
*
* Reference fields are set to null, primitive fields are set to
* their default value, collection fields are emptied of all
* elements.
*
* @param object The object
* @throws IllegalStateException The Java object has changed and
* is no longer supported by this handler, or the handler is not
* compatiable with the Java object
*/
public void resetValue( Object object ) throws IllegalStateException, IllegalArgumentException
{
//
}
/**
* @deprecated No longer supported
*/
public void checkValidity( Object object ) throws ValidityException, IllegalStateException
{
// do nothing
}
}