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 <[email protected]> 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
> <[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]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]