blob: 1136929704ef15394edcb2796cdbf08d5d951f06 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Chase Technology Ltd - http://www.chasetechnology.co.uk
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Doug Satchwell (Chase Technology Ltd) - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xsl.jaxp.launching.internal;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.xsl.jaxp.launching.IAttribute;
import org.eclipse.wst.xsl.jaxp.launching.IOutputProperty;
import org.eclipse.wst.xsl.jaxp.launching.IProcessorType;
import org.eclipse.wst.xsl.jaxp.launching.ITransformerFactory;
import org.eclipse.wst.xsl.jaxp.launching.JAXPRuntime;
public class ProcessorType implements IProcessorType
{
private static final String DESC_SUFFIX = ".DESC"; //$NON-NLS-1$
private static final String TYPE_SUFFIX = ".TYPE"; //$NON-NLS-1$
private final String id;
private final String name;
private final ITransformerFactory[] transformerFactories;
private final URL attributePropertiesURL;
private final URL outputPropertiesURL;
private IAttribute[] attributes;
private IOutputProperty[] outputProperties;
private Map<String, String> outputPropertyValues;
private Map<String, String> attributeValues;
public ProcessorType(String id, String name, URL attributePropertiesURL, URL outputPropertiesURL, Map<String, String> attributeValues, Map<String, String> outputPropertyValues, ITransformerFactory[] transformerFactories)
{
this.id = id;
this.name = name;
this.attributePropertiesURL = attributePropertiesURL;
this.outputPropertiesURL = outputPropertiesURL;
this.attributeValues = attributeValues;
this.transformerFactories = transformerFactories;
this.outputPropertyValues = outputPropertyValues;
}
public String getId()
{
return id;
}
public String getLabel()
{
return name;
}
public Map<String, String> getAttributeValues()
{
return attributeValues;
}
public IAttribute[] getAttributes()
{
if (attributes == null)
{
if (attributePropertiesURL != null)
attributes = loadAttributes();
else
attributes = new IAttribute[0];
}
return attributes;
}
public Map<String,String> getOutputPropertyValues()
{
return outputPropertyValues;
}
public boolean isJREDefault()
{
return JAXPRuntime.JRE_DEFAULT_PROCESSOR_TYPE_ID.equals(id);
}
public ITransformerFactory[] getTransformerFactories()
{
return transformerFactories;
}
public ITransformerFactory getDefaultTransformerFactory()
{
if (transformerFactories.length > 0)
return transformerFactories[0];
return null;
}
public IOutputProperty[] getOutputProperties()
{
if (outputProperties == null)
{
if (outputPropertiesURL != null)
outputProperties = loadOutputProperties();
else
outputProperties = new IOutputProperty[0];
}
return outputProperties;
}
private IOutputProperty[] loadOutputProperties()
{
BufferedInputStream is = null;
List<OutputProperty> outputs = new ArrayList<OutputProperty>();
Properties props = new Properties();
try
{
is = new BufferedInputStream(outputPropertiesURL.openStream());
props.load(is);
for (Object element : props.keySet())
{
String key = (String) element;
if (!key.endsWith(DESC_SUFFIX))
{
String name = key;
String uri = props.getProperty(key);
String desc = props.getProperty(key + DESC_SUFFIX);
if (uri != null && name != null && desc != null)
{
OutputProperty prop = new OutputProperty(uri.trim(), desc);
outputs.add(prop);
}
else
{
JAXPLaunchingPlugin.log(new CoreException(new Status(IStatus.WARNING, JAXPLaunchingPlugin.PLUGIN_ID, Messages.getString("ProcessorType.2") + outputPropertiesURL //$NON-NLS-1$
+ Messages.getString("ProcessorType.3") + key))); //$NON-NLS-1$
}
}
}
}
catch (IOException e)
{
JAXPLaunchingPlugin.log(e);
}
finally
{
if (is != null)
{
try
{
is.close();
}
catch (IOException e)
{
JAXPLaunchingPlugin.log(e);
}
}
}
return (IOutputProperty[]) outputs.toArray(new IOutputProperty[0]);
}
private IAttribute[] loadAttributes()
{
BufferedInputStream is = null;
List<Attribute> attributesList = new ArrayList<Attribute>();
try
{
is = new BufferedInputStream(attributePropertiesURL.openStream());
Properties props = new Properties();
props.load(is);
for (Object element : props.keySet())
{
String key = (String) element;
if (!key.endsWith(DESC_SUFFIX) && !key.endsWith(TYPE_SUFFIX))
{
String uri = props.getProperty(key);
String type = props.getProperty(key + TYPE_SUFFIX);
String desc = props.getProperty(key + DESC_SUFFIX);
if (uri != null && type != null && desc != null)
{
Attribute attribute = new Attribute(uri.trim(), type.trim(), desc);
attributesList.add(attribute);
}
else
{
JAXPLaunchingPlugin.log(new CoreException(new Status(IStatus.WARNING, JAXPLaunchingPlugin.PLUGIN_ID, Messages.getString("ProcessorType.4") + attributePropertiesURL //$NON-NLS-1$
+ Messages.getString("ProcessorType.5") + key))); //$NON-NLS-1$
}
}
}
}
catch (IOException e)
{
JAXPLaunchingPlugin.log(e);
}
finally
{
if (is != null)
{
try
{
is.close();
}
catch (IOException e)
{
JAXPLaunchingPlugin.log(e);
}
}
}
IAttribute[] attributes = (IAttribute[]) attributesList.toArray(new IAttribute[0]);
Arrays.sort(attributes);
return attributes;
}
}