blob: 3475626413d0d5a32b1344b96ea96659054c6ca6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.update.internal.configurator;
import java.io.*;
import java.net.*;
import java.util.ResourceBundle;
import javax.xml.parsers.*;
import org.eclipse.osgi.util.NLS;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
/**
* A more complete feature parser. It adds the plugins listed to the feature.
*/
public class FullFeatureParser extends DefaultHandler implements IConfigurationConstants{
private SAXParser parser;
private FeatureEntry feature;
private URL url;
private boolean isDescription;
private StringBuffer description = new StringBuffer();
private final static SAXParserFactory parserFactory =
SAXParserFactory.newInstance();
/**
* Constructs a feature parser.
*/
public FullFeatureParser(FeatureEntry feature) {
super();
this.feature = feature;
try {
parserFactory.setNamespaceAware(true);
this.parser = parserFactory.newSAXParser();
} catch (ParserConfigurationException e) {
System.out.println(e);
} catch (SAXException e) {
System.out.println(e);
}
}
/**
*/
public void parse(){
InputStream in = null;
try {
if (feature.getSite() == null)
return;
this.url = new URL(feature.getSite().getResolvedURL(), feature.getURL() + FEATURE_XML);
in = url.openStream();
parser.parse(new InputSource(in), this);
} catch (SAXException e) {
} catch (IOException e) {
} finally {
if (in != null)
try {
in.close();
} catch (IOException e1) {
Utils.log(e1.getLocalizedMessage());
}
}
}
/**
* Handle start of element tags
* @see DefaultHandler#startElement(String, String, String, Attributes)
* @since 2.0
*/
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
Utils.debug("Start Element: uri:" + uri + " local Name:" + localName + " qName:" + qName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if ("plugin".equals(localName)) { //$NON-NLS-1$
processPlugin(attributes);
} else if ("description".equals(localName)){ //$NON-NLS-1$
isDescription = true;
} else if ("license".equals(localName)) { //$NON-NLS-1$
processLicense(attributes);
}
}
/*
* Process feature information
*/
private void processPlugin(Attributes attributes) {
// identifier and version
String id = attributes.getValue("id"); //$NON-NLS-1$
String ver = attributes.getValue("version"); //$NON-NLS-1$
if (id == null || id.trim().equals("") //$NON-NLS-1$
|| ver == null || ver.trim().equals("")) { //$NON-NLS-1$
System.out.println(NLS.bind(Messages.FeatureParser_IdOrVersionInvalid, (new String[] { id, ver})));
} else {
// String label = attributes.getValue("label"); //$NON-NLS-1$
// String provider = attributes.getValue("provider-name"); //$NON-NLS-1$
String nl = attributes.getValue("nl"); //$NON-NLS-1$
String os = attributes.getValue("os"); //$NON-NLS-1$
String ws = attributes.getValue("ws"); //$NON-NLS-1$
String arch = attributes.getValue("arch"); //$NON-NLS-1$
if (!Utils.isValidEnvironment(os, ws, arch,nl))
return;
PluginEntry plugin = new PluginEntry();
plugin.setPluginIdentifier(id);
plugin.setPluginVersion(ver);
feature.addPlugin(plugin);
Utils.
debug("End process DefaultFeature tag: id:" +id + " ver:" +ver + " url:" + feature.getURL()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
private void processLicense(Attributes attributes ){
feature.setLicenseURL(attributes.getValue("url")); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.xml.sax.ContentHandler#characters(char[], int, int)
*/
public void characters(char[] ch, int start, int length)
throws SAXException {
if (!isDescription)
return;
description.append(ch, start, length);
}
/* (non-Javadoc)
* @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
*/
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("description".equals(localName)) { //$NON-NLS-1$
isDescription = false;
String d = description.toString().trim();
ResourceBundle bundle = feature.getResourceBundle();
feature.setDescription(Utils.getResourceString(bundle, d));
}
}
}