/* * org.xmlsmartdoc.goldenport * Copyright (C) 2000-2004 ASAMI, Tomoharu (asami@xmlSmartDoc.org) */ package org.xmlsmartdoc.goldenport.engine; import java.util.ArrayList; import java.util.List; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.xmlsmartdoc.goldenport.GoldenportContext; import org.xmlsmartdoc.goldenport.adapter.IAdapter; import org.xmlsmartdoc.goldenport.converter.IConverter; import org.xmlsmartdoc.goldenport.filter.IFilter; import org.xmlsmartdoc.goldenport.normalizer.INormalizer; import org.xmlsmartdoc.goldenport.config.GcAdapter; import org.xmlsmartdoc.goldenport.config.GcFilter; import org.xmlsmartdoc.goldenport.config.GcGoldenportConfig; import org.xmlsmartdoc.goldenport.config.GcNormalizer; import org.xmlsmartdoc.goldenport.config.GcProperty; import org.xmlsmartdoc.goldenport.config.GcSelecter; import org.xmlsmartdoc.goldenport.selecter.ISelecter; import org.xmlsmartdoc.goldenport.selecters.AllSelecter; import org.xmlsmartdoc.goldenport.selecters.ElementNameSelecter; import org.xmlsmartdoc.goldenport.selecters.OrSelecter; /** * PortConfig * * @since Apr. 7, 2004 * @version Apr. 12, 2004 * @author ASAMI, Tomoharu (asami@xmlSmartDoc.org) */ public class PortConfig { private GoldenportContext context_; private List systemFilters_ = new ArrayList(); private List systemAdapters_ = new ArrayList(); private List systemMacros_ = new ArrayList(); private List systemNormalizers_ = new ArrayList(); private List systemConvertors_ = new ArrayList(); private List userFilters_ = new ArrayList(); private List userAdapters_ = new ArrayList(); private List userMacros_ = new ArrayList(); private List userNormalizers_ = new ArrayList(); private List userConvertors_ = new ArrayList(); public PortConfig(GoldenportContext context) { context_ = context; } public void setSystemConfig(GcGoldenportConfig config) throws GoldenportException { if (config == null) { return; } try { GcFilter[] filters = config.getFilter(); for (int i = 0;i < filters.length;i++) { GcFilter filter = filters[i]; systemFilters_.add(makeFilter_(filter)); } GcAdapter[] adapters = config.getAdapter(); for (int i = 0;i < adapters.length;i++) { GcAdapter adapter = adapters[i]; systemAdapters_.add(makeAdapter_(adapter)); } GcNormalizer[] normalizers = config.getNormalizer(); for (int i = 0;i < normalizers.length;i++) { GcNormalizer normalizer = normalizers[i]; systemNormalizers_.add(makeNormalizer_(normalizer)); } // TODO converters } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { } } public void setUserConfig(GcGoldenportConfig config) throws GoldenportException { if (config == null) { return; } try { GcFilter[] filters = config.getFilter(); for (int i = 0;i < filters.length;i++) { GcFilter filter = filters[i]; userFilters_.add(makeFilter_(filter)); } GcAdapter[] adapters = config.getAdapter(); for (int i = 0;i < adapters.length;i++) { GcAdapter adapter = adapters[i]; userAdapters_.add(makeAdapter_(adapter)); } GcNormalizer[] normalizers = config.getNormalizer(); for (int i = 0;i < normalizers.length;i++) { GcNormalizer normalizer = normalizers[i]; userNormalizers_.add(makeNormalizer_(normalizer)); } // TODO converters } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { } } private IFilter makeFilter_(GcFilter gcFilter) throws ClassNotFoundException, InstantiationException, IllegalAccessException { IPort port = (IFilter)makePort_( gcFilter.getName(), gcFilter.getJavaClass(), gcFilter.getSelecter(), gcFilter.getProperty(), gcFilter.rGetElement() ); if (!(port instanceof IFilter)) { // TODO } return ((IFilter)port); } private IAdapter makeAdapter_(GcAdapter gcAdapter) throws ClassNotFoundException, InstantiationException, IllegalAccessException { IPort port = (IAdapter)makePort_( gcAdapter.getName(), gcAdapter.getJavaClass(), gcAdapter.getSelecter(), gcAdapter.getProperty(), gcAdapter.rGetElement() ); if (!(port instanceof IAdapter)) { // TODO } return ((IAdapter)port); } private INormalizer makeNormalizer_(GcNormalizer gcNormalizer) throws ClassNotFoundException, InstantiationException, IllegalAccessException { IPort port = (INormalizer)makePort_( gcNormalizer.getName(), gcNormalizer.getJavaClass(), gcNormalizer.getSelecter(), gcNormalizer.getProperty(), gcNormalizer.rGetElement() ); if (!(port instanceof INormalizer)) { // TODO } return ((INormalizer)port); } private IPort makePort_( String name, String javaClass, GcSelecter[] selecters, GcProperty[] properties, Element element ) throws ClassNotFoundException, InstantiationException, IllegalAccessException { Class clazz = context_.getClassLoader().loadClass(javaClass); Object object = clazz.newInstance(); if (!(object instanceof IPort)) { // TODO } IPort port = (IPort)object; if (selecters == null || selecters.length == 0) { if (port.getSelecter() == null) { port.setSelecter(AllSelecter.getSingleton()); } } else { port.setSelecter(makeSelecter_(selecters)); } for (int i = 0;i < properties.length;i++) { GcProperty property = properties[i]; port.setProperty(property.getName(), property.getValue()); } port.setup(element); return (port); } private ISelecter makeSelecter_(GcSelecter[] selecters) { ISelecter[] result = new ISelecter[selecters.length]; for (int i = 0;i < selecters.length;i++) { result[i] = makeSelecter_(selecters[i]); } if (selecters.length == 1) { return (result[0]); } else { return (new OrSelecter(result)); } } private ISelecter makeSelecter_(GcSelecter selecter) { String name = selecter.getName(); String ns = selecter.getNamespace(); return (new ElementNameSelecter(ns, name)); } public void addSystemMacro(Document macro) { systemMacros_.add(macro); } public void addUserMacro(Document macro) { userMacros_.add(macro); } public IFilter[] getSystemFilters() { IFilter[] result = new IFilter[systemFilters_.size()]; return ((IFilter[])systemFilters_.toArray(result)); } public IAdapter[] getSystemAdapters() { IAdapter[] result = new IAdapter[systemAdapters_.size()]; return ((IAdapter[])systemAdapters_.toArray(result)); } public INormalizer[] getSystemNormalizers() { INormalizer[] result = new INormalizer[systemNormalizers_.size()]; return ((INormalizer[])systemNormalizers_.toArray(result)); } public IConverter[] getSystemConverters() { IConverter[] result = new IConverter[systemConvertors_.size()]; return ((IConverter[])systemConvertors_.toArray(result)); } public IFilter[] getUserFilters() { IFilter[] result = new IFilter[userFilters_.size()]; return ((IFilter[])userFilters_.toArray(result)); } public IAdapter[] getUserAdapters() { IAdapter[] result = new IAdapter[userAdapters_.size()]; return ((IAdapter[])userAdapters_.toArray(result)); } public INormalizer[] getUserNormalizers() { INormalizer[] result = new INormalizer[userNormalizers_.size()]; return ((INormalizer[])userNormalizers_.toArray(result)); } public IConverter[] getUserConverters() { IConverter[] result = new IConverter[userConvertors_.size()]; return ((IConverter[])userConvertors_.toArray(result)); } public Node[] getMacros() { List list = new ArrayList(); Node[] result = new Node[list.size()]; return ((Node[])list.toArray(result)); } }