俊星的BLOG

          COMMON DIGESTER之我的PLUGIN

          Common Digester附帶了一個插件機制,可以實現很好的地址,下面是我的一個簡單實現:
          1、業務接口:
          public interface Transform {
              
          public String transform(String s);
          }

          2、業務接口的實現類:
          public class CaseTransformer implements Transform {
              
          private boolean upper;

              
          public void setCase(String s) {
                  upper 
          = "upper".equalsIgnoreCase(s.trim());
              }


              
          public String transform(String s) {
                  
          if (s == null{
                      
          return "";
                  }

                  
          return upper ? s.toUpperCase() : s.toLowerCase();
              }


          }


          3、插件創建規則:
          package mydigest;

          import org.xml.sax.Attributes;

          public class MyPluginCreateRule extends MyRule {
              
          private Class<?> baseClass;
              
          public static final String DEFT_PLUGIN_CLASS_ATTR = "plugin-class";

              
          public MyPluginCreateRule(Class<?> clazz) {
                  baseClass 
          = clazz;
              }


              
          /** 開始處理 */
              
          public void begin(String namespace, String name, Attributes attributes) throws Exception {
                  String value 
          = attributes.getValue(DEFT_PLUGIN_CLASS_ATTR);
                  Class
          <?> clazz = dig.getClassLoader().loadClass(value);
                  Object instance 
          = clazz.newInstance();
                  
          if (baseClass.isAssignableFrom(clazz)) {
                      dig.push(instance);
                  }

              }


              
          /** 處理結束 */
              
          public void end(String namespace, String name) throws Exception {
                  dig.pop();
              }


          }


          4、配置文件upperconfig.xml:

          <piple>
              
          <src file="input.txt"/>
              
          <transform plugin-class="mydigest.CaseTransformer" case="upper"/>
              
          <dest file="output.txt"/>
          </piple>

          5、測試:
          package mydigest;

          import java.io.BufferedReader;
          import java.io.File;
          import java.io.FileReader;
          import java.io.FileWriter;
          import java.io.IOException;

          public class Piple {
              
          private String src;
              
          private Transform transformer;
              
          private String dest;

              
          public static void main(String[] args) {
                  String file 
          = "upperconfig.xml";
                  MyDigester dig 
          = new MyDigester();
                  dig.addObjectCreate(
          "piple", Piple.class);
                  
          // 源文件
                  dig.addCallMethod("piple/src""setSrc"1);
                  dig.addCallParam(
          "piple/src"0"file");
                  
          // 添加插件
                  MyPluginCreateRule pcr = new MyPluginCreateRule(Transform.class);
                  dig.addRule(
          "piple/transform", pcr);
                  dig.addSetProperties(
          "piple/transform");
                  dig.addSetNext(
          "piple/transform""setTransform");
                  
                  
          // 目標文件
                  dig.addCallMethod("piple/dest""setDest"1);
                  dig.addCallParam(
          "piple/dest"0"file");
                  
          try {
                      Piple piple 
          = (Piple) dig.parse(new File(file));
                      piple.exec();
                  }
           catch (Exception e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

              }


              
          public void setSrc(String src) {
                  
          this.src = src;
              }


              
          public void setTransform(Transform transformer) {
                  
          this.transformer = transformer;
              }


              
          public void setDest(String dest) {
                  
          this.dest = dest;
              }


              
          public void exec() throws IOException {
                  BufferedReader reader 
          = new BufferedReader(new FileReader(src));
                  FileWriter writer 
          = new FileWriter(new File(dest));
                  String line 
          = reader.readLine();
                  
          while (line != null{
                      writer.write(
          this.transformer.transform(line) + '\n');
                      line 
          = reader.readLine();
                  }

                  writer.close();
                  reader.close();
                  System.out.println(
          "exec done!");
              }

          }


          inut.txt文件:
          Copyright
          Copyright  
          2004 O'Reilly Media, Inc.

          Printed in the United States of America.

          Published by O'Reilly MediaInc.
          , 1005 Gravenstein Highway North, Sebastopol, CA 95472.

          得到的output.xml文件:
          COPYRIGHT
          COPYRIGHT  
          2004 O'REILLY MEDIA, INC.

          PRINTED IN THE UNITED STATES OF AMERICA.

          PUBLISHED BY O'REILLY MEDIAINC.
          , 1005 GRAVENSTEIN HIGHWAY NORTH, SEBASTOPOL, CA 95472.

          posted on 2009-05-02 15:51 俊星 閱讀(199) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 神池县| 交口县| 金寨县| 政和县| 怀化市| 古交市| 左贡县| 满洲里市| 江门市| 山阳县| 资溪县| 蕉岭县| 榆社县| 迁西县| 达拉特旗| 涞水县| 三原县| 金阳县| 兰州市| 监利县| 全南县| 左权县| 镇安县| 高青县| 伊宁市| 灌阳县| 肃北| 青神县| 进贤县| 师宗县| 鄱阳县| 武宣县| 大连市| 栾川县| 石屏县| 华池县| 武乡县| 来安县| 监利县| 兴山县| 崇义县|