/*
* -------------------------------------------------------------------------
* $Id: Binding.java,v 1.6 2004/05/26 18:13:18 estewart Exp $
* -------------------------------------------------------------------------
* Copyright (c) 1999 Visual Numerics Inc. All Rights Reserved.
*
* This software is confidential information which is proprietary to
* and a trade secret of Visual Numerics, Inc. Use, duplication or
* disclosure is subject to the terms of an appropriate license
* agreement.
*
* VISUAL NUMERICS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
* SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. VISUAL
* NUMERICS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
* ITS DERIVATIVES.
*--------------------------------------------------------------------------
*/
package com.imsl.demo.gallery;
import java.io.IOException;
import java.util.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
/**
* Parse an XML description file of the demos
*
* @author brophy
* @created February 8, 2001
*/
public class Binding {
static private final String pathSeparator = System.getProperty("path.separator");
private List list;
/** Creates new Binding */
public Binding() throws org.xml.sax.SAXException, IOException, ParserConfigurationException {
InputSource source = new InputSource(getClass().getResourceAsStream("gallery.xml"));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();
//builder.setErrorHandler(this);
list = new ArrayList();
Document document = builder.parse(source);
parseElement((Element)document.getDocumentElement());
}
/**
* Parses an element and its children.
*/
void parseElement(Element element) {
int group = 0;
String main = null;
String title = null;
String page = null;
List classpath = null;
NamedNodeMap map = element.getAttributes();
int nMap = map.getLength();
for (int k = 0; k < nMap; k++) {
Node node = map.item(k);
String name = node.getNodeName();
String value = node.getNodeValue();
if (name == null) {
} else if (name.equals("group")) {
StringTokenizer st = new StringTokenizer(value,"|");
while (st.hasMoreElements()) {
String token = st.nextToken();
if (token.equals("MATH")) group |= Demo.GROUP_MATH;
if (token.equals("STAT")) group |= Demo.GROUP_STAT;
if (token.equals("FINANCE")) group |= Demo.GROUP_FINANCE;
if (token.equals("CHART")) group |= Demo.GROUP_CHART;
if (token.equals("QS")) group |= Demo.GROUP_QS;
}
} else if (name.equals("main")) {
main = value;
} else if (name.equals("title")) {
title = value;
} else if (name.equals("page")) {
page = value;
}
}
NodeList child = element.getChildNodes();
int nChild = child.getLength();
for (int k = 0; k < nChild; k++) {
Node node = child.item(k);
if (node.getNodeName().equals("classpath")) {
classpath = parseClasspath((Element)node);
} else if (node instanceof Element) {
parseElement((Element)node);
}
}
if (element.getNodeName().equals("demo")) {
list.add(new Demo(group, main, title, page, classpath));
}
}
private List parseClasspath(Element element) {
List list = new ArrayList();
NodeList child = element.getChildNodes();
int nChild = child.getLength();
for (int k = 0; k < nChild; k++) {
Node node = child.item(k);
if (node.getNodeName().equals("pathelement")) {
if (node instanceof Element) {
list.add(((Element)node).getAttribute("location"));
}
}
}
return list;
}
static public Demo[] getDemos() {
try {
return (Demo[])new Binding().list.toArray(new Demo[0]);
} catch (Exception e) {
e.printStackTrace();
return new Demo[0];
}
}
}