/*
* Copyright 2000-2001,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jetspeed.services.psmlmanager.db;
//standard java stuff
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.IOException;
// Jetspeed classes
import org.apache.jetspeed.om.profile.Portlets;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
//castor support
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.ValidationException;
/**
* This is a utility class used for database PSML implementation.
*
* @author <a href="mailto:adambalk@cisco.com">Atul Dambalkar</a>
* @version $Id: DBUtils.java,v 1.7 2004/02/23 03:32:19 jford Exp $
*/
public class DBUtils
{
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(DBUtils.class.getName());
/** Deserialize a PSML structure read from bytes array using Castor
* XML unmarshaller
*
* @param portletBytes Bytes array to load the PSML from
* @return PSML structure Portlets object
*/
public static Portlets bytesToPortlets(byte[] portletBytes, Mapping mapping)
{
Reader reader = new StringReader(new String(portletBytes));
try
{
Unmarshaller unmarshaller = new Unmarshaller((Mapping)mapping);
return (Portlets)unmarshaller.unmarshal(reader);
// return Portlets.unmarshal(reader);
}
catch (MarshalException e)
{
logger.error("PSMLManager: Could not unmarshal the inputstream ", e);
}
catch (MappingException e)
{
logger.error("PSMLManager: Could not unmarshal the inputstream ", e);
}
catch (ValidationException e)
{
logger.error("PSMLManager: document is not valid", e);
}
finally
{
try {
reader.close();
}
catch (IOException e)
{
logger.error("", e);
}
}
return null; // control shouldn't arrive here
}
/** Serialize a PSML structure using string writer with Castor XML
* marshaller, put it in bytes array and return it.
*
* @param portlets the structure to convert to bytes array
* @return Bytes array object for portles
*/
public static byte[] portletsToBytes(Portlets portlets, Mapping mapping)
{
if (portlets == null)
{
String message = "PSMLManager: Must specify portlets";
logger.error( message );
throw new IllegalArgumentException( message );
}
StringWriter writer = new StringWriter();
try
{
// portlets.marshal(writer);
Marshaller marshaller = new Marshaller(writer);
marshaller.setMapping(mapping);
marshaller.marshal(portlets);
if (logger.isDebugEnabled())
logger.debug("Portlets: " + writer.toString());
/**** Platform's default character encoding will be used ****/
return writer.toString().getBytes();
}
catch (MarshalException e)
{
logger.error("PSMLManager: Could not marshal the stringwriter ", e);
}
catch (IOException e)
{
logger.error("PSMLManager: Could not marshal the stringwriter ", e);
}
catch (MappingException e)
{
logger.error("PSMLManager: Could not marshal the stringwriter ", e);
}
catch (ValidationException e)
{
logger.error("PSMLManager: document is not valid", e);
}
finally
{
try
{
writer.close();
}
catch (IOException e)
{
logger.error("", e);
}
}
return null; // control shouldn't arrive here
}
}