Hello Simone:
  Just below in method setTable is woring.      

       d.addCallMethod(pattern, "setType", 1);
       d.addCallParam(pattern, 0, type);

   other part is ok.

Thanks.

Kurt



On Fri, 01 Apr 2011 21:05:08 +0800, Simone Tripodi <[email protected]> wrote:

Holy cow, Kurt!!! :D
can you be more precise and highlight which is the part that doesn't
work? For what I see, there's one assCallParam() set in your Digetser
and that's for the Handler
Simo

http://people.apache.org/~simonetripodi/
http://www.99soft.org/



2011/4/1 Kurt Xu <[email protected]>:

Hi all digester users & developers:

  Today I use addCallMethod but it doesn't work as before.

the xml is below:


<?xml version="1.0" encoding="UTF-8"?>

<Project name="project1">
   <Functionality description="add comment" url="">
       <Action class="com.mygame.action.UserAction" method="entry"/>
       <BasicInfo kpiCategoryId="K01002" contentType="thread"
statisticsType="处理日"/>
       <Class name="com.mygame.bo.UserBOImpl" method="entry">
           <TextTable type="insert" name="MOCO_CODICMT">
               <Handler
class="com.mytest.siamon.util.DefaultSiamonHandler"/>
               <Main>
                   <Constant column="DeviceType" value="pc"/>
                   <Mutable property="cmtno" argidx="0"
column="PrimaryKey1"/>
               </Main>
               <Sub>
                   <Mutable property="writeid" argidx="0"
column="WriterId"/>
                   <Mutable property="contents" argidx="0"
column="Content"/>
                   <Constant column="TestType" value="test"/>
               </Sub>
           </TextTable>
       </Class>
   </Functionality>
</Project>

there's a code about Mutable and Constant that they both can show up under
Main or Sub, the former represents a mutable property and the latter
represents a constant property in out business logic. But the question is
when TextTable element shows up, I want to set TableMap(XXXTable related
class, pojo)'s type as "txt" through addCallMethod. I research on official sample but it is not right in my code, it looks just the same as the sample.

related java file:

1)ClassItem.java
package com.siamon.model.config;

import java.util.ArrayList;
import java.util.List;

public class ClassItem {

       private String method;
       private String name;
   private List<TableMap> tableMapList=new ArrayList<TableMap>();

public ClassItem(String name, String method, List<TableMap> tableMapList)
{
       this.name = name;
       this.method = method;
       this.tableMapList = tableMapList;
   }


   public ClassItem() {
   }

   public String getMethod() {
       return method;
   }

   public void setMethod(String method) {
       this.method = method;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }


   public void addTableMap(TableMap tm){
       getTableMapList().add(tm);
   }

   public List<TableMap> getTableMapList() {
       return tableMapList;
   }
}

2)Project.java
package com.siamon.model;

import com.siamon.model.config.Functionality;

import java.util.ArrayList;
import java.util.List;

public class Project {
   private String name;
   private List<Functionality> functionalities=new
ArrayList<Functionality>();

   public void addFunctionality(Functionality func){
       functionalities.add(func);
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public List<Functionality> getFunctionalities() {
       return functionalities;
   }


}

3)ConstantProp.java
package com.siamon.model.config;

public class ConstantProp {
   private String column;
   private String value;

   public String getColumn() {
       return column;
   }

   public void setColumn(String column) {
       this.column = column;
   }

   public String getValue() {
       return value;
   }

   public void setValue(String value) {
       this.value = value;
   }

   @Override
   public String toString() {
       return "ConstantProp [ " +
               "column='" + column + '\'' +
               ", value='" + value + '\'' +
               " ] ";
   }
}

4)MutableProp.java
package com.siamon.model.config;

public class MutableProp {
   private String property;
   private int argIndex;
   private String column;
   private String value;

   public String getProperty() {
       return property;
   }

   public void setProperty(String property) {
       this.property = property;
   }

   public int getArgIndex() {
       return argIndex;
   }

   public void setArgIndex(int argIndex) {
       this.argIndex = argIndex;
   }

   public String getColumn() {
       return column;
   }

   public void setColumn(String column) {
       this.column = column;
   }

   public String getValue() {
       return value;
   }

   public void setValue(String value) {
       this.value = value;
   }

   @Override
   public String toString() {
       return "MutableProp [ " +
               "property='" + property + '\'' +
               ", argIndex=" + argIndex +
               ", column='" + column + '\'' +
               ", value='" + value + '\'' +
               " ] ";
   }
}

5)TableMap.java
package com.siamon.model.config;

import java.util.ArrayList;
import java.util.List;

public class TableMap {
   private String type;
private String handler="com.nhstcorp.siamon.util.DefaultSiamonHandler";
   private List<ConstantProp> constantPropList=new
ArrayList<ConstantProp>();
private List<MutableProp> mutablePropList=new ArrayList<MutableProp>();

   public String getType() {
       return type;
   }

   public void setType(String type) {
       this.type = type;
   }

   public List<MutableProp> getMutablePropList() {
       return mutablePropList;
   }

   public List<ConstantProp> getConstantPropList() {
       return constantPropList;
   }

   public void addMutableProp(MutableProp prop){
      getMutablePropList().add(prop);
   }

   public void addConstantProp(ConstantProp prop){
       getConstantPropList().add(prop);
   }

   public String getHandler() {
       return handler;
   }

   public void setHandler(String handler) {
       this.handler = handler;
   }
}

6)Functionality.java
package com.siamon.model.config;

import java.util.*;

public class Functionality {

       private String url;
   private String description;
   private String actionName;
   private String actionMethod;
   private String kpiCategoryId;
   private String contentType;
   private String statisticsType;
   private List<ClassItem> classItems=new ArrayList<ClassItem>();
   private String projectName;

   public Functionality(String projectName, String kpiCategoryId, String
contentType, String statisticsType) {
       this.projectName = projectName;
       this.kpiCategoryId = kpiCategoryId;
       this.contentType = contentType;
       this.statisticsType = statisticsType;
   }

   public Functionality() {
   }

   public String getUrl() {
       return url;
   }

   public void setUrl(String url) {
       this.url = url;
   }

   public String getDescription() {
       return description;
   }

   public void setDescription(String description) {
       this.description = description;
   }

   public String getActionName() {
       return actionName;
   }

   public void setActionName(String actionName) {
       this.actionName = actionName;
   }

   public String getActionMethod() {
       return actionMethod;
   }

   public void setActionMethod(String actionMethod) {
       this.actionMethod = actionMethod;
   }

   public String getKpiCategoryId() {
       return kpiCategoryId;
   }

   public void setKpiCategoryId(String kpiCategoryId) {
       this.kpiCategoryId = kpiCategoryId;
   }

   public String getContentType() {
       return contentType;
   }

   public void setContentType(String contentType) {
       this.contentType = contentType;
   }

   public String getStatisticsType() {
       return statisticsType;
   }

   public void setStatisticsType(String statisticsType) {
       this.statisticsType = statisticsType;
   }

   public List<ClassItem> getClassItems() {
       return classItems;
   }

   public void setClassItems(List<ClassItem> classItems) {
       this.classItems = classItems;
   }

   public String getProjectName() {
       return projectName;
   }

   public void setProjectName(String projectName) {
       this.projectName = projectName;
   }

   public ClassItem findClassItem(String clazz,String method){
       for (ClassItem ci:classItems){
if (ci.getName().equals(clazz) && ci.getMethod().equals(method)){
               return ci;
           }
       }

       return null;
   }

   public void addClassItem(ClassItem ci){
       getClassItems().add(ci);
   }
}


7)parser method
private Project parseProject2(URL url) throws IOException, SAXException {
       Digester d = new Digester();

       String pathFunc = "Project/Functionality";
       String pathClass = pathFunc + "/Class";


       d.addObjectCreate("Project", Project.class);
       d.addSetProperties("Project");

       d.addObjectCreate(pathFunc, Functionality.class);
       d.addSetNext(pathFunc, "addFunctionality");
       d.addSetProperties(pathFunc);
       d.addSetProperties(pathFunc + "/BasicInfo");

       d.addObjectCreate(pathClass, ClassItem.class);
       d.addSetNext(pathClass, "addClassItem");

       String pathTextTable = pathClass + "/TextTable";
       d.addSetProperties(pathClass);
       d.addObjectCreate(pathTextTable, TableMap.class);
       d.addSetNext(pathTextTable,"addTableMap");


       setTable(d, pathClass,"TextTable","txt");

       d.parse(url);
       Project project = (Project) d.getRoot();

       System.out.println();

       return project;
   }

  private void setTable(Digester d, String pathClass, String tableElem,
String type){
       String pattern=pathClass + "/"+tableElem;

       d.addObjectCreate(pattern+"/Main/Constant",ConstantProp.class);
       d.addSetNext(pattern+"/Main/Constant", "addConstantProp");
       d.addSetProperties(pattern+ "/Main/Constant");

       d.addObjectCreate(pattern+"/Main/Mutable",MutableProp.class);
       d.addSetNext(pattern + "/Main/Mutable", "addMutableProp");
       d.addSetProperties(pattern+ "/Main/Mutable");

       d.addObjectCreate(pattern+"/Sub/Constant",ConstantProp.class);
       d.addSetNext(pattern+"/Sub/Constant", "addConstantProp");
       d.addSetProperties(pattern+ "/Sub/Constant");

       d.addObjectCreate(pattern+"/Sub/Mutable",MutableProp.class);
       d.addSetNext(pattern + "/Sub/Mutable", "addMutableProp");
       d.addSetProperties(pattern+ "/Sub/Mutable");


       d.addSetProperties(pathClass + "/Handler", "class", "handler");
       d.addCallMethod(pattern, "setType", 1);
       d.addCallParam(pattern, 0, type);

       d.addSetProperties(pattern + "/Handler", "class", "handler");
   }

that's all source, the issue is the method setTable can't setType for a TableMap class successfully. It looks very normal, nothing seem wrong,but just doesn't work. I also attach the source to the email, don't know if it's
allowed.

  Thanks a lot
Kurt

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



--
Using Opera's revolutionary email client: http://www.opera.com/mail/


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to