/*! * Copyright 2010 - 2016 Pentaho Corporation. All rights reserved. * * 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 com.pentaho.repository.importexport; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.commons.io.IOUtils; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.logging.LogChannel; import org.pentaho.di.core.logging.LogChannelInterface; import org.pentaho.di.core.xml.XMLParserFactoryProducer; import org.pentaho.di.repository.Repository; import org.pentaho.di.repository.utils.IRepositoryFactory; import org.w3c.dom.Document; import org.xml.sax.SAXException; public class PDIImportUtil { private static IRepositoryFactory repositoryFactory = new IRepositoryFactory.CachingRepositoryFactory(); private static final LogChannelInterface log = new LogChannel( PDIImportUtil.class ); /** * Connects to the PDI repository * * @param repositoryName * @return * @throws KettleException */ public static Repository connectToRepository( String repositoryName ) throws KettleException { return repositoryFactory.connect( repositoryName ); } public static void setRepositoryFactory( IRepositoryFactory factory ) { repositoryFactory = factory; } public static Document loadXMLFrom( String xml ) throws SAXException, IOException { return loadXMLFrom( new ByteArrayInputStream( xml.getBytes() ) ); } /** * @return instance of {@link Document}, if xml is loaded successfully null in case any error occurred during loading */ public static Document loadXMLFrom( InputStream is ) { DocumentBuilderFactory factory; try { factory = XMLParserFactoryProducer.createSecureDocBuilderFactory(); } catch ( ParserConfigurationException e ) { log.logError( e.getLocalizedMessage() ); factory = DocumentBuilderFactory.newInstance(); } DocumentBuilder builder = null; Document doc = null; try { builder = factory.newDocumentBuilder(); } catch ( ParserConfigurationException ex ) { // ignore } try { File file = File.createTempFile( "tempFile", "temp" ); file.deleteOnExit(); FileOutputStream fous = new FileOutputStream( file ); IOUtils.copy( is, fous ); fous.flush(); fous.close(); doc = builder.parse( file ); } catch ( IOException | SAXException e ) { log.logError( e.getLocalizedMessage() ); } finally { try { is.close(); } catch ( IOException e ) { // nothing to do here } } return doc; } public static String asXml( Document document ) { try { Source source = new DOMSource( document.getParentNode() ); StringWriter stringWriter = new StringWriter(); Result result = new StreamResult( stringWriter ); TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); transformer.transform( source, result ); return stringWriter.getBuffer().toString(); } catch ( TransformerConfigurationException e ) { e.printStackTrace(); return null; } catch ( TransformerException e ) { e.printStackTrace(); return null; } } }