Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ToolContentVersionFilter.java =================================================================== diff -u -r571a3efcd7c9416c7d2486d1b43ba7eefac433ee -r2cbf5d016c60af15b655e67c03e7b5171b1d6734 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ToolContentVersionFilter.java (.../ToolContentVersionFilter.java) (revision 571a3efcd7c9416c7d2486d1b43ba7eefac433ee) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ToolContentVersionFilter.java (.../ToolContentVersionFilter.java) (revision 2cbf5d016c60af15b655e67c03e7b5171b1d6734) @@ -19,140 +19,153 @@ import org.jdom.output.XMLOutputter; import com.thoughtworks.xstream.XStream; + /** - * Super class for all Import content Version Filter. The child class method must follow name conversion. + * Super class for all Import content Version Filter. The child class method must follow name conversion. *
    - *
  1. upXXXToXXX
  2. - *
  3. downXXXToXXX
  4. + *
  5. upXXXToXXX
  6. + *
  7. downXXXToXXX
  8. *
* * The XXX must be integer format, which is Tool version number. *

- * For more detail, in wiki. + * For more detail, in wiki. + * * @author Dapeng.Ni - * + * */ public class ToolContentVersionFilter { - private static final Logger log = Logger.getLogger(ToolContentVersionFilter.class); - - private List removedFieldList; - private List addedFieldList; + private static final Logger log = Logger.getLogger(ToolContentVersionFilter.class); - public ToolContentVersionFilter(){ - removedFieldList = new ArrayList(); - addedFieldList = new ArrayList(); + private List removedFieldList; + private List addedFieldList; + + public ToolContentVersionFilter() { + removedFieldList = new ArrayList(); + addedFieldList = new ArrayList(); + } + + // container class for removed class + class RemovedField { + public Class ownerClass; + public String fieldname; + + public RemovedField(Class ownerClass, String fieldname) { + this.ownerClass = ownerClass; + this.fieldname = fieldname; } - //container class for removed class - class RemovedField{ - public Class ownerClass; - public String fieldname; - public RemovedField(Class ownerClass, String fieldname) { - this.ownerClass = ownerClass; - this.fieldname = fieldname; - } + } + + // container class for added class + class AddedField { + public Class ownerClass; + public String fieldname; + public Object defaultValue; + + public AddedField(Class ownerClass2, String fieldname2, Object defaultValue2) { + ownerClass = ownerClass2; + fieldname = fieldname2; + defaultValue = defaultValue2; } -// container class for added class - class AddedField{ - public Class ownerClass; - public String fieldname; - public Object defaultValue; - public AddedField(Class ownerClass2, String fieldname2, Object defaultValue2) { - this.ownerClass = ownerClass2; - this.fieldname = fieldname2; - this.defaultValue = defaultValue2; - } - + + } + + /** + * When a field is removed to tool Hibernate POJO class, this method must be call in upXXXToYYY()/downXXXToYYY() + * methods. + * + * @param ownerClass + * @param fieldname + */ + public void removeField(Class ownerClass, String fieldname) { + removedFieldList.add(new RemovedField(ownerClass, fieldname)); + } + + /** + * When a field is added to tool Hibernate POJO class, this method is optional in upXXXToYYY()/downXXXToYYY() + * methods. It could set default value for this added fields. + * + * @param ownerClass + * @param fieldname + */ + public void addField(Class ownerClass, String fieldname, Object defaultValue) { + addedFieldList.add(new AddedField(ownerClass, fieldname, defaultValue)); + } + + /** + * Call by lams import tool service core. Do not use it in tool version filter class. + * + * @param toolFilePath + * @throws JDOMException + * @throws IOException + */ + public void transformXML(String toolFilePath) throws JDOMException, IOException { + File toolFile = new File(toolFilePath); + + SAXBuilder sax = new SAXBuilder(); + Document doc = sax.build(new FileInputStream(toolFile)); + Element root = doc.getRootElement(); + retrieveXML(root); + + toolFile.renameTo(new File(toolFilePath + "_oldver")); + + File newToolFile = new File(toolFilePath); + XMLOutputter output = new XMLOutputter(); + output.output(doc, new FileOutputStream(newToolFile)); + } + + private void retrieveXML(Element root) throws JDOMException { + // collect all removed fields in this class + List clzRemoveFlds = new ArrayList(); + for (RemovedField remove : removedFieldList) { + if (StringUtils.equals(root.getName(), remove.ownerClass.getName()) + || StringUtils.equals(root.getAttributeValue("class"), remove.ownerClass.getName())) { + clzRemoveFlds.add(remove.fieldname); + ToolContentVersionFilter.log.debug("Field " + remove.fieldname + " in class " + + remove.ownerClass.getName() + " is going to leave."); + } } - /** - * When a field is removed to tool Hibernate POJO class, this method must be call in - * upXXXToYYY()/downXXXToYYY() methods. - * - * @param ownerClass - * @param fieldname - */ - public void removeField(Class ownerClass, String fieldname){ - removedFieldList.add(new RemovedField(ownerClass,fieldname)); - } - - /** - * When a field is added to tool Hibernate POJO class, this method is optional in - * upXXXToYYY()/downXXXToYYY() methods. It could set default value for this added fields. - * - * @param ownerClass - * @param fieldname - */ - public void addField(Class ownerClass, String fieldname, Object defaultValue){ - addedFieldList.add(new AddedField(ownerClass, fieldname, defaultValue)); - } + // add all new fields for this class + for (AddedField added : addedFieldList) { + if (StringUtils.equals(root.getName(), added.ownerClass.getName())) { + Writer eleWriter = new StringWriter(); + XStream eleX = new XStream(); + eleX.toXML(added.defaultValue, eleWriter); - /** - * Call by lams import tool service core. Do not use it in tool version filter class. - * @param toolFilePath - * @throws JDOMException - * @throws IOException - */ - public void transformXML(String toolFilePath) throws JDOMException, IOException{ - File toolFile = new File(toolFilePath); - - SAXBuilder sax = new SAXBuilder(); - Document doc = sax.build(new FileInputStream(toolFile)); - Element root = doc.getRootElement(); - retrieveXML(root); - - toolFile.renameTo(new File(toolFilePath +"_oldver")); - - File newToolFile = new File(toolFilePath); - XMLOutputter output = new XMLOutputter(); - output.output(doc, new FileOutputStream(newToolFile)); + SAXBuilder eleBuilder = new SAXBuilder(); + Document eledoc = eleBuilder.build(new StringReader(eleWriter.toString())); + Element eleRoot = eledoc.getRootElement(); + eleRoot.setName(added.fieldname); + root.addContent(eleRoot); + + ToolContentVersionFilter.log.debug("Field " + added.fieldname + " in class " + + added.ownerClass.getName() + " is add by value " + added.defaultValue); + } } - - private void retrieveXML(Element root) throws JDOMException{ - //collect all removed fields in this class - List clzRemoveFlds = new ArrayList(); - for (RemovedField remove : removedFieldList) { - if(StringUtils.equals(root.getName(),remove.ownerClass.getName())){ - clzRemoveFlds.add(remove.fieldname); - log.debug("Field "+ remove.fieldname+" in class " + remove.ownerClass.getName() + " is going to leave."); - } - } - //add all new fields for this class - for (AddedField added : addedFieldList) { - if(StringUtils.equals(root.getName(),added.ownerClass.getName())){ - Writer eleWriter = new StringWriter(); - XStream eleX = new XStream(); - eleX.toXML(added.defaultValue,eleWriter); - - SAXBuilder eleBuilder = new SAXBuilder(); - Document eledoc = eleBuilder.build(new StringReader(eleWriter.toString())); - Element eleRoot = eledoc.getRootElement(); - eleRoot.setName(added.fieldname); - root.addContent(eleRoot); - - log.debug("Field "+ added.fieldname+" in class " + added.ownerClass.getName() + " is add by value " + added.defaultValue); - } - } - - //remove fields - List children = root.getChildren(); - for (Object child: children) { - if(child instanceof Element){ - Element ele = (Element)child; - //this node already removed, no necessary retrieve its children level - if(clzRemoveFlds.contains(ele.getName())){ - continue; - } - //recusive current node's children level. - retrieveXML(ele); - } - } - //retrieve all current node's children, if found some element is in removed list, then remove it. - for(String name:clzRemoveFlds){ - if(root.removeChild(name)) - log.debug("Field "+ name + " is removed."); - else - log.debug("Failed remove field "+ name + "."); - } + // remove fields + List children = root.getChildren(); + for (Object child : children) { + if (child instanceof Element) { + Element ele = (Element) child; + // this node already removed, no necessary retrieve its children level + if (clzRemoveFlds.contains(ele.getName())) { + continue; + } + // recusive current node's children level. + retrieveXML(ele); + } } + // retrieve all current node's children, if found some element is in removed list, then remove it. + for (String name : clzRemoveFlds) { + if (root.removeChild(name)) { + ToolContentVersionFilter.log.debug("Field " + name + " is removed."); + } else { + ToolContentVersionFilter.log.debug("Failed remove field " + name + "."); + } + } + + } }