1 5 package xdoclet.modules.exolab.castor.ejb; 6 7 import java.util.ArrayList ; 8 import java.util.Collection ; 9 import java.util.Iterator ; 10 import java.util.List ; 11 import java.util.Properties ; 12 13 import org.apache.commons.logging.Log; 14 import xjavadoc.XClass; 15 import xdoclet.XDocletException; 16 import xdoclet.XDocletTagSupport; 17 import xdoclet.util.LogUtil; 18 19 25 public class CastorTagsHandler extends XDocletTagSupport 26 { 27 35 public void forAllClasses(String template, Properties attributes) throws XDocletException 36 { 37 Log log = LogUtil.getLog(CastorTagsHandler.class, "forAllClasses"); 38 Collection classes = getOrderedClasses(); 39 40 for (Iterator i = classes.iterator(); i.hasNext(); ) { 41 XClass currentClass = (XClass)i.next(); 42 43 setCurrentClass(currentClass); 44 log.debug("currentClass=" + currentClass); 45 generate(template); 46 } 47 } 48 49 private Collection getOrderedClasses() throws XDocletException 50 { 51 Log log = LogUtil.getLog(CastorTagsHandler.class, "getAllClasses"); 52 53 log.debug("ordering classes"); 54 55 List orderedClasses = new ArrayList (); 56 57 while (!gatherClasses(orderedClasses)) 58 ; 59 return orderedClasses; 60 } 61 62 private boolean gatherClasses(List orderedClasses) throws XDocletException 63 { 64 Log log = LogUtil.getLog(CastorTagsHandler.class, "gatherClasses"); 65 66 boolean addedAll = true; 67 68 for (Iterator i = (getXJavaDoc().getSourceClasses()).iterator(); i.hasNext(); ) { 69 XClass currentClass = (XClass)i.next(); 70 String depends = getTagValue(FOR_CLASS, currentClass.getDoc(), "depends", "", "", null, false, false); 71 72 if (depends == null) { 73 orderedClasses.add(currentClass); 74 log.debug("Adding " + currentClass); 75 } 76 else { 77 boolean addedClass = checkOrderedClasses(orderedClasses, depends, currentClass); 78 79 log.debug("Added " + currentClass + " with depends='" + depends + "' because " + depends + " already added."); 80 addedAll = addedAll && addedClass; 81 } 82 } 83 return addedAll; 84 } 85 86 private boolean checkOrderedClasses(List orderedClasses, String depends, XClass currentClass) 87 { 88 Log log = LogUtil.getLog(CastorTagsHandler.class, "checkOrderedClasses"); 89 90 for (Iterator iterator = orderedClasses.iterator(); iterator.hasNext(); ) { 91 XClass xClass = (XClass) iterator.next(); 92 93 if (xClass.getName().equals(depends)) { 94 orderedClasses.add(currentClass); 95 log.debug("Found " + depends); 96 return true; 97 } 98 } 99 log.debug("Couldn't find " + depends); 100 return false; 101 } 102 103 } 104 | Popular Tags |