commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simone Tripodi <simonetrip...@apache.org>
Subject Re: [digester] why addCallMethod doesn't work?
Date Sat, 02 Apr 2011 08:12:39 GMT
Nice to know you fixed the issues ;)

About the Digetser3: if/when it will be released dependes also by you
users, if you don't have the need of it then it's hard to release
something nobody wants, so please give a try if you have spare time
(remember the you have to checkout and compile the code because is a
sandbox) and send your release request via ML :P

Have a nice day,
Simo

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



On Sat, Apr 2, 2011 at 4:05 AM, Kurt Xu <fxbird1978@163.com> wrote:
> Yes,addObjectParam is the point. I've wrongly used addCallParam. And using
> Regular Expression here to parse Constant and Mutable is very simple and
> clean.
>
> The alternative setTable method is  as following:
>
>
>        d.addSetProperties(pattern + "/Handler", "class", "handler");
>        d.addObjectCreate(pathClass+"/*/Constant",ConstantProp.class);
>        d.addSetNext(pathClass+"/*/Constant","addConstantProp");
>        d.addSetProperties(pathClass+"/*/Constant");
>
>        d.addObjectCreate(pathClass+"/*/Mutable",MutableProp.class);
>        d.addSetNext(pathClass+"/*/Mutable","addMutableProp");
>        d.addSetProperties(pathClass+"/*/Mutable");
>
>        d.addCallMethod(pattern, "setType", 1);
>        d.addObjectParam(pattern, 0, type);
>
>  First I think it won't work because of some other issue. Now I'm happy it's
> fine. Thanks Simone. For the coming Digester 3 , I hope it will be provided
> with a complete document that is  rich in examples. You know current
> document is not easy to understand, I see after using it for a while.
>
> Kurt
>
>
> On Fri, 01 Apr 2011 22:32:12 +0800, Simone Tripodi
> <simonetripodi@apache.org> wrote:
>
>> Not sure to understand the question, but try with
>>
>>       d.addCallMethod(pattern, "setType", 1);
>>       d.addCallParam(pattern, 0, "type");
>>
>> if you want to extract the type from the XML (note the "type" instead
>> of simply type)
>>
>> Otherwise,
>>
>>       d.addCallMethod(pattern, "setType", 1);
>>       d.addObjectParam(pattern, 0, type);
>>
>> if you need to set the type variable reference
>>
>> HTH,
>> Simo
>>
>> http://people.apache.org/~simonetripodi/
>> http://www.99soft.org/
>>
>>
>>
>> On Fri, Apr 1, 2011 at 3:53 PM, Kurt Xu <fxbird1978@163.com> wrote:
>>>
>>> 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
>>> <simonetripodi@apache.org> 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 <fxbird1978@163.com>:
>>>>>
>>>>> 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: user-unsubscribe@commons.apache.org
>>>>> For additional commands, e-mail: user-help@commons.apache.org
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>>>> For additional commands, e-mail: user-help@commons.apache.org
>>>>
>>>
>>>
>>> --
>>> Using Opera's revolutionary email client: http://www.opera.com/mail/
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: user-help@commons.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>
>
> --
> Using Opera's revolutionary email client: http://www.opera.com/mail/
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message