/* * Copyright 2000-2004 The Apache Software Foundation. * * 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.apache.jetspeed.services.transformer; // turbine stuff import java.io.Reader; import javax.servlet.ServletConfig; import org.apache.jetspeed.util.rewriter.ClipperRewriter; import org.apache.turbine.services.TurbineBaseService; import org.apache.turbine.util.Log; /** * Simple implementation of the TransformerService. * @author <a href="mailto:mmari@ce.unipr.it">Marco Mari</a> * @version $Id: JetspeedTransformerService.java,v 1.2 2004/02/23 03:39:10 jford Exp $* */ public class JetspeedTransformerService extends TurbineBaseService implements TransformerService { protected ClipperRewriter rewriter = null; String convertedString; /** * This is the early initialization method called by the * Turbine <code>Service</code> framework * @param conf The <code>ServletConfig</code> */ public void init(ServletConfig conf) { // controls if already initialized if (getInit()) { return; } rewriter = new ClipperRewriter(); setInit(true); } /** * Late init. Don't return control until early init says we're done. */ public void init() { while (!getInit()) { try { Thread.sleep(500); Log.info("JetspeedTransformerService: Waiting for init()..."); } catch (InterruptedException ie) { Log.error(ie); } } } /** * Finds an element in a web page * * @param htmlReader Reader for the html rewriter * @param url page address * @param element a part of the element to search */ public String findElement(Reader htmlReader, String url, String element) { // If not indicated, assume to find the first element return clipElementsNumber(htmlReader, url, element, null, 1); } /** * Clips the part of a web page between startElement and stopElement * * @param htmlReader Reader for the html rewriter * @param url page address * @param startElement the first element to clip * @param lastElement the last element to clip */ public String clipElements( Reader htmlReader, String url, String startElement, String stopElement) { // If not indicated, assume to find the first startElement return clipElementsNumber( htmlReader, url, startElement, stopElement, 1); } /** * Finds in an HTML page the "tagNumber" tag of type "element" * Example: element = "p", tagNumber = "3" * Page content: * <p>..</p> * <p>..</p> * <p>.. <---Finds this * * @param htmlReader Reader for the html rewriter * @param url page address * @param element the element to search * @param tagNumber the number of the element to search */ public String findElementNumber( Reader htmlReader, String url, String element, int tagNumber) { return clipElementsNumber(htmlReader, url, element, null, tagNumber); } /** * Clips a part of a web page, starting from the "tagNumber" "startElement" * Example: startElement = "p", tagNumber = "3", stopElement = "img" * Page content: * <p>..</p> * <p>..</p> * <p>.. <---Starts here * ........<img> <---Stops here * * @param htmlReader Reader for the html rewriter * @param url page address * @param startElement the first element to clip * @param stopElement the last element to clip * @param tagNumber the number of the first element to clip */ public String clipElementsNumber( Reader htmlReader, String url, String startElement, String stopElement, int tagNumber) { rewriter.setStartElement(startElement); rewriter.setStopElement(stopElement); rewriter.setStartElementNumber(tagNumber); try { convertedString = rewriter.rewrite(htmlReader, url); } catch (Exception e) { Log.info("Exception occurred:" + e.toString()); e.printStackTrace(); } return convertedString; } }