package com.cosmocode.image.filtering;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.StringTokenizer;
import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
*
* @version $Id: SVGImageTool.java,v 1.2 2005/05/18 09:50:36 rademacher Exp $
*/
public class SVGImageTool {
public static final String cvsID = "$Id: SVGImageTool.java,v 1.2 2005/05/18 09:50:36 rademacher Exp $";
String _filters = "";
/**
* filter-syntax ist: <id-name>[.attribute]=wert
* @param filters filter-parameter. z.b. : formel=peter,formel.x=10
*/
public SVGImageTool ( String filters ) {
_filters = filters ;
}
public void process( InputStream in, OutputStream out ) throws Exception {
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
Document document = factory.createDocument(null, in);
Element rootdoc = document.getDocumentElement() ;
NodeList nl = rootdoc.getChildNodes() ;
for (int i=0;i<nl.getLength();i++) {
Node node = nl.item(i) ;
NamedNodeMap attributes = node.getAttributes();
for (int j=0;j<attributes.getLength();j++) {
Node n = attributes.item(j);
StringTokenizer st = new StringTokenizer(_filters, ",");
while ( st.hasMoreTokens() ) {
String tok = st.nextToken() ;
String val = tok.substring( tok.indexOf("=")+1 ) ;
val = java.net.URLDecoder.decode(val,"utf-8") ;
tok = tok.substring( 0, tok.indexOf("=") );
int p = tok.indexOf(".");
if ( p>=0 ) {
String attr = tok.substring(p+1);
tok = tok.substring(0,p);
if ( n.getNodeName().equals("id") && n.getNodeValue().equals( tok ) )
((Element)node).setAttribute(attr,val);
} else {
if ( n.getNodeName().equals("id") && n.getNodeValue().equals( tok ) )
node.getFirstChild().setNodeValue( val ) ;
}
}
}
}
JPEGTranscoder t = new JPEGTranscoder();
TranscoderInput input = new TranscoderInput( document );
TranscoderOutput output = new TranscoderOutput( out ) ;
t.transcode(input, output );
}
} // end class SVGImageTool
//////////////////////////////////////////////////////////////////////////////////
//
// $Log: SVGImageTool.java,v $
// Revision 1.2 2005/05/18 09:50:36 rademacher
// 0.5.1.0
//
// Revision 1.1 2005/05/13 12:32:45 rademacher
// 0.5.0.0
//
//
//