/**
* Process one coplet
*/
public void run() {
XMLSerializer compiler = null;
Element copletConf = (Element)this.loadedCoplet[1];
SourceParameters p = (SourceParameters)loadedCoplet[2];
try {
// Determine the resource to load
// If the coplet is customizable and has no customization info
// the customization resource is loaded, otherwise the resource
String resource = null;
boolean showCustomizePage = p.getParameterAsBoolean(PortalConstants.PARAMETER_CUSTOMIZE, false);
if (showCustomizePage) {
final String value = DOMUtil.getValueOf(copletConf, "customization/@uri", (String)null, this.processor);
if (value == null) {
this.logger.error("The coplet '"+this.copletID+"' is customizable but has no customization info.");
}
resource = value;
}
if (resource == null) {
resource = DOMUtil.getValueOf(copletConf, "resource/@uri", this.processor);
}
boolean handlesSizable = DOMUtil.getValueAsBooleanOf(copletConf, "configuration/handlesSizable", false, this.processor);
if (!handlesSizable && !p.getParameter("size", "max").equals("max")) {
// do nothing here
loadedCoplet[0] = new byte[0];
} else {
compiler = (XMLSerializer)this.manager.lookup(XMLSerializer.ROLE);
compiler.startDocument();
XMLConsumer nextConsumer = compiler;
NodeList transformations = DOMUtil.selectNodeList(copletConf,
"transformation/stylesheet", this.processor);
XSLTProcessor xslt = null;
ArrayList transformers = null;
ArrayList sources = null;
Request request = ObjectModelHelper.getRequest(this.objectModel);
XMLConsumer stylesheet =null;
try {
if (transformations != null && transformations.getLength() > 0) {
transformers = new ArrayList();
sources = new ArrayList();
nextConsumer = new IncludeXMLConsumer(nextConsumer);
for(int k = transformations.getLength()-1; k >=0; k--) {
xslt = (XSLTProcessor)this.manager.lookup(XSLTProcessor.ROLE);
transformers.add(xslt);
Source source = this.resolver.resolveURI(DOMUtil.getValueOfNode(transformations.item(k)));
sources.add(source);
TransformerHandler handler = xslt.getTransformerHandler(source);
final SAXResult result = new SAXResult(nextConsumer);
result.setLexicalHandler(nextConsumer);
handler.setResult(result);
nextConsumer = new ContentHandlerWrapper(handler, handler);
stylesheet = nextConsumer;
}
stylesheet.startDocument();
}
boolean includeFragment = true;
boolean handlesParameters = DOMUtil.getValueAsBooleanOf(copletConf, "configuration/handlesParameters", true, this.processor);
String size = p.getParameter("size", "max");
includeFragment = size.equals("max");
if (!includeFragment) {
if (this.logger.isWarnEnabled()) {
this.logger.warn("Minimized coplet '"+copletID+"' not handled correctly.");
}
}
if ( includeFragment ) {
if (this.logger.isDebugEnabled() ) {
this.logger.debug("portal: Loading coplet " + copletID);
}
// add the parameters to the request attributes
Map info = new HashMap(3);
SessionContextImpl.copletInfo.set(info);
info.put(PortalConstants.COPLETINFO_PARAMETERS, p);
info.put(PortalConstants.COPLETINFO_PORTALURI, request.getRequestURI());
info.put(PortalConstants.COPLETINFO_STATUSPROFILE, loadedCoplet[7]);
XMLConsumer xc = new IncludeXMLConsumer(nextConsumer);
Source source = null;
try {
source = SourceUtil.getSource(resource,
null,
(handlesParameters ? p : null),
resolver);
SourceUtil.toSAX(source, xc);
} finally {
resolver.release(source);
}
if (this.logger.isDebugEnabled()) {
this.logger.debug("portal: Loaded coplet " + copletID);
}
}
if ( stylesheet != null ) {
stylesheet.endDocument();
}
} finally {
SessionContextImpl.copletInfo.set(null);
if ( transformers != null ) {
for(int i=0; i < transformers.size(); i++) {
this.manager.release( (Component)transformers.get(i));
this.resolver.release( (Source)sources.get(i));
}
}
}
nextConsumer = null;
compiler.endDocument();
loadedCoplet[0] = compiler.getSAXFragment();
}
} catch (Exception local) {
// this exception is ignored and an error message is included
// later on when the coplet is processed
this.logger.error("Exception during processing of coplet: " + copletID, local);