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
|