/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
package org.pentaho.di.core.svg;
import java.io.InputStream;
import org.apache.batik.anim.dom.SAXSVGDocumentFactory;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.Document;
/**
* Class for base SVG images processing.
*/
public class SvgSupport {
private static final String SVG_EXTENSION = ".svg";
private static final String PNG_EXTENSION = ".png";
private static final String PARSER = XMLResourceDescriptor.getXMLParserClassName();
private static final ThreadLocal<SAXSVGDocumentFactory> SVG_FACTORY_THREAD_LOCAL = new ThreadLocal<SAXSVGDocumentFactory>();
private static SAXSVGDocumentFactory createFactory() {
return new SAXSVGDocumentFactory( PARSER );
}
private static SAXSVGDocumentFactory getSvgFactory() {
SAXSVGDocumentFactory factory = SVG_FACTORY_THREAD_LOCAL.get();
if ( factory == null ) {
factory = createFactory();
SVG_FACTORY_THREAD_LOCAL.set( factory );
}
return factory;
}
public static boolean isSvgEnabled() {
return true;
}
/**
* Load SVG from file.
*/
public static SvgImage loadSvgImage( InputStream in ) throws Exception {
Document document = getSvgFactory().createDocument( null, in );
return new SvgImage( document );
}
/**
* Check by file name if image is SVG.
*/
public static boolean isSvgName( String name ) {
return name.toLowerCase().endsWith( SVG_EXTENSION );
}
/**
* Converts SVG file name to PNG.
*/
public static String toPngName( String name ) {
if ( isSvgName( name ) ) {
name = name.substring( 0, name.length() - 4 ) + PNG_EXTENSION;
}
return name;
}
/**
* Check by file name if image is PNG.
*/
public static boolean isPngName( String name ) {
return name.toLowerCase().endsWith( PNG_EXTENSION );
}
/**
* Converts PNG file name to SVG.
*/
public static String toSvgName( String name ) {
if ( isPngName( name ) ) {
name = name.substring( 0, name.length() - 4 ) + SVG_EXTENSION;
}
return name;
}
}