001 /* 002 * Copyright 2009 - 2009 JEuclid, http://jeuclid.sf.net 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 /* $Id: TestSuiteProcessor.java,v c85f3d42bf55 2009/09/01 10:34:30 max $ */ 018 019 package net.sourceforge.jeuclid.testsuite; 020 021 import javax.xml.transform.Result; 022 import javax.xml.transform.Source; 023 import javax.xml.transform.Transformer; 024 import javax.xml.transform.TransformerConfigurationException; 025 import javax.xml.transform.TransformerFactory; 026 import javax.xml.transform.dom.DOMResult; 027 import javax.xml.transform.dom.DOMSource; 028 import javax.xml.transform.stream.StreamSource; 029 030 import net.sourceforge.jeuclid.DOMBuilder; 031 import net.sourceforge.jeuclid.MutableLayoutContext; 032 import net.sourceforge.jeuclid.context.LayoutContextImpl; 033 import net.sourceforge.jeuclid.context.Parameter; 034 import net.sourceforge.jeuclid.converter.Processor; 035 036 import org.apache.commons.logging.Log; 037 import org.apache.commons.logging.LogFactory; 038 import org.w3c.dom.Node; 039 040 /** 041 * Process the actual TestSuite. 042 * 043 * @version $Revision: c85f3d42bf55 $ 044 */ 045 public final class TestSuiteProcessor { 046 047 private static final float DISPLAY_SIZE = 16.0f; 048 049 private static final Processor MML2SVGPROCESSOR = Processor.getInstance(); 050 /** 051 * Logger for this class 052 */ 053 private static final Log LOGGER = LogFactory.getLog(Processor.class); 054 055 private final Transformer modificationTransformer; 056 057 private final MutableLayoutContext context; 058 059 private static final class SingletonHolder { 060 private static final TestSuiteProcessor INSTANCE = new TestSuiteProcessor(); 061 062 private SingletonHolder() { 063 } 064 } 065 066 private TestSuiteProcessor() { 067 this.context = new LayoutContextImpl(LayoutContextImpl 068 .getDefaultLayoutContext()); 069 this.context.setParameter(Parameter.MATHSIZE, 070 TestSuiteProcessor.DISPLAY_SIZE); 071 Transformer t; 072 try { 073 t = TransformerFactory.newInstance().newTemplates( 074 new StreamSource(DOMBuilder.class 075 .getResourceAsStream("/support/ModifySuite3.xsl"))) 076 .newTransformer(); 077 } catch (final TransformerConfigurationException e) { 078 t = null; 079 } 080 this.modificationTransformer = t; 081 } 082 083 /** 084 * Retrieve the TestSuiteProcessor singleton object. 085 * 086 * @return the TestSuiteProcessor. 087 */ 088 public static TestSuiteProcessor getInstance() { 089 return TestSuiteProcessor.SingletonHolder.INSTANCE; 090 } 091 092 /** 093 * Process Source testsuite xhtml file to xhtml. 094 * 095 * @param inputSource 096 * InputSource 097 * @param result 098 * Result 099 * @param apply3Mod 100 * if true apply modifications specific to testsuite3 101 * @return true if something was written to result. 102 */ 103 public boolean process(final Source inputSource, final Result result, 104 final boolean apply3Mod) { 105 boolean processed; 106 final DOMResult intermediate = new javax.xml.transform.dom.DOMResult(); 107 try { 108 if (apply3Mod && (this.modificationTransformer != null)) { 109 TestSuiteProcessor.MML2SVGPROCESSOR.process(inputSource, 110 intermediate); 111 final Node head = intermediate.getNode(); 112 this.modificationTransformer.transform(new DOMSource(head), 113 result); 114 } else { 115 TestSuiteProcessor.MML2SVGPROCESSOR 116 .process(inputSource, result); 117 } 118 processed = true; 119 // CHECKSTYLE:OFF Here, catching all exceptions is intentional. 120 } catch (final Exception e) { 121 // CHECKSTYLE:ON 122 TestSuiteProcessor.LOGGER.warn(e.getMessage(), e); 123 processed = false; 124 } 125 return processed; 126 } 127 128 }