001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/portal/standard/csw/MetadataTransformer.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53177 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042: ---------------------------------------------------------------------------*/
043:
044: package org.deegree.portal.standard.csw;
045:
046: import java.io.FileInputStream;
047: import java.io.FileNotFoundException;
048: import java.io.IOException;
049: import java.io.InputStream;
050: import java.io.Reader;
051: import java.io.StringWriter;
052:
053: import javax.xml.transform.Transformer;
054: import javax.xml.transform.TransformerConfigurationException;
055: import javax.xml.transform.TransformerException;
056: import javax.xml.transform.TransformerFactory;
057: import javax.xml.transform.TransformerFactoryConfigurationError;
058: import javax.xml.transform.stream.StreamResult;
059: import javax.xml.transform.stream.StreamSource;
060:
061: import org.deegree.framework.log.ILogger;
062: import org.deegree.framework.log.LoggerFactory;
063: import org.deegree.i18n.Messages;
064: import org.deegree.portal.standard.context.control.ContextLoadListener;
065:
066: /**
067: * A <code>${type_name}</code> class.<br/>
068: * TODO class description
069: *
070: * @author <a href="mailto:mays@lat-lon.de">Judit Mays</a>
071: * @author last edited by: $Author: apoth $
072: *
073: * @version 2.0, $Revision: 9346 $, $Date: 2007-12-27 08:39:07 -0800 (Thu, 27 Dec 2007) $
074: *
075: * @since 2.0
076: */
077: public class MetadataTransformer {
078:
079: private static final ILogger LOG = LoggerFactory
080: .getLogger(ContextLoadListener.class);
081:
082: /**
083: * The <code>Transformer</code> object used in the transformation of a map context xml to
084: * html.
085: */
086: private Transformer transformer = null;
087:
088: /**
089: * Creates a new MetadataTransformer and initializes it with the given <code>file</code> (path
090: * and name).
091: *
092: * @param filePathName
093: * @throws FileNotFoundException,
094: * if filePathName does not point to an existing file.
095: */
096: public MetadataTransformer(String filePathName)
097: throws FileNotFoundException {
098: initTransformer(filePathName);
099: }
100:
101: /**
102: * @param filePathName
103: * @throws FileNotFoundException
104: */
105: private void initTransformer(String filePathName)
106: throws FileNotFoundException {
107:
108: InputStream xslInputStream = new FileInputStream(filePathName);
109:
110: try {
111: TransformerFactory tFactory = TransformerFactory
112: .newInstance();
113: transformer = tFactory.newTransformer(new StreamSource(
114: xslInputStream));
115: } catch (TransformerConfigurationException e) {
116: LOG.logError(e.getMessage());
117: } catch (TransformerFactoryConfigurationError e) {
118: LOG.logError(e.getMessage());
119: }
120: }
121:
122: /**
123: * Transforms the context pointed to by <code>context</code> into html using
124: * <code>xsltURL</code>
125: *
126: * @param metadataXml
127: * The <code>Reader</code> containing the xml document to be transformed.
128: * @param catalog
129: * The name of the catalog.
130: * @param serviceCatalogs
131: * @param hits
132: * The number of records matched for this catalog.
133: * @param startPosition
134: * The position to start displaying the matched records from.
135: * @param metaVersion
136: * The version of metadata to transform ( list, overview, detailed ).
137: * @return Returns result of transformation.
138: * @throws TransformerException
139: * @throws IOException
140: */
141: public String transformMetadata(Reader metadataXml, String catalog,
142: String[] serviceCatalogs, int hits, int startPosition,
143: String metaVersion) throws TransformerException,
144: IOException {
145:
146: if (transformer == null) {
147: throw new IOException(Messages
148: .getMessage("IGEO_STD_CSW_TRANSFORMER_ERROR"));
149: }
150:
151: StringWriter sw = new StringWriter();
152: StreamResult strmResult = new StreamResult(sw);
153: StreamSource xmlSrc = new StreamSource(metadataXml);
154:
155: // turn array of Strings into one comma-separated String
156: StringBuffer sb = new StringBuffer();
157: if (serviceCatalogs != null) {
158: for (int i = 0; i < serviceCatalogs.length; i++) {
159: sb.append(serviceCatalogs[i]);
160: if (i < serviceCatalogs.length - 1) {
161: sb.append(",");
162: }
163: }
164: }
165:
166: // setting global variables for xslt-scripts
167: transformer.setParameter("CATALOG", catalog);
168: transformer.setParameter("SERVICECATALOGS", sb.toString());
169: transformer.setParameter("HITS", new Integer(hits));
170: transformer
171: .setParameter("STARTPOS", new Integer(startPosition));
172: transformer.setParameter("METAVERSION", metaVersion);
173:
174: transformer.transform(xmlSrc, strmResult);
175: try {
176: sw.close();
177: } catch (IOException e) {
178: LOG.logError("Unable to close string writer.\n");
179: }
180:
181: return sw.toString();
182: }
183:
184: @Override
185: public String toString() {
186: return transformer.toString();
187: }
188:
189: }
|