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 <fxbird1...@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 > <simonetrip...@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 <fxbird1...@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 >>> <simonetrip...@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 <fxbird1...@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-unsubscr...@commons.apache.org >>>>> For additional commands, e-mail: user-h...@commons.apache.org >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >>>> For additional commands, e-mail: user-h...@commons.apache.org >>>> >>> >>> >>> -- >>> Using Opera's revolutionary email client: http://www.opera.com/mail/ >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >>> For additional commands, e-mail: user-h...@commons.apache.org >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >> For additional commands, e-mail: user-h...@commons.apache.org >> > > > -- > Using Opera's revolutionary email client: http://www.opera.com/mail/ > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@commons.apache.org > For additional commands, e-mail: user-h...@commons.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org