001package org.apache.commons.digester3.examples.plugins.pipeline; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one or more 005 * contributor license agreements. See the NOTICE file distributed with 006 * this work for additional information regarding copyright ownership. 007 * The ASF licenses this file to You under the Apache License, Version 2.0 008 * (the "License"); you may not use this file except in compliance with 009 * the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020import java.util.LinkedList; 021import java.util.Iterator; 022 023import org.apache.commons.digester3.Digester; 024import org.apache.commons.digester3.plugins.PluginCreateRule; 025 026/** 027 * An implementation of the Transform interface which is configured with 028 * a sequence of "subtransforms", and applies them one by one to the input 029 * data. 030 * <p> 031 * This demonstrates that a plugged-in class can itself define plugin-points 032 * for user-defined classes if it wishes. 033 */ 034public class CompoundTransform 035 implements Transform 036{ 037 038 private LinkedList<Transform> transforms = new LinkedList<Transform>(); 039 040 public void addTransform( Transform transform ) 041 { 042 transforms.add( transform ); 043 } 044 045 public String transform( String s ) 046 { 047 for ( Iterator<Transform> i = transforms.iterator(); i.hasNext(); ) 048 { 049 Transform t = i.next(); 050 s = t.transform( s ); 051 } 052 return s; 053 } 054 055 public static void addRules( Digester d, String patternPrefix ) 056 { 057 PluginCreateRule pcr = new PluginCreateRule( Transform.class ); 058 d.addRule( patternPrefix + "/subtransform", pcr ); 059 d.addSetNext( patternPrefix + "/subtransform", "addTransform" ); 060 } 061 062}