KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > xdoclet > modules > exolab > castor > ejb > CastorTagsHandler


1 /*
2  * Copyright (c) 2001, 2002 The XDoclet team
3  * All rights reserved.
4  */

5 package xdoclet.modules.exolab.castor.ejb;
6
7 import java.util.ArrayList JavaDoc;
8 import java.util.Collection JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.List JavaDoc;
11 import java.util.Properties JavaDoc;
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 /**
20  * @author <a HREF="mailto:dim@bigpond.net.au">Dmitri Colebatch</a>
21  * @created Aug 23, 2002
22  * @xdoclet.taghandler namespace="Castor"
23  * @version $Revision: 1.7 $
24  */

25 public class CastorTagsHandler extends XDocletTagSupport
26 {
27     /**
28      * Evaluates the body block for each class, in order.
29      *
30      * @param template The body of the block tag
31      * @param attributes The attributes of the template tag
32      * @exception XDocletException
33      * @doc.tag type="block"
34      */

35     public void forAllClasses(String JavaDoc template, Properties JavaDoc attributes) throws XDocletException
36     {
37         Log log = LogUtil.getLog(CastorTagsHandler.class, "forAllClasses");
38         Collection JavaDoc classes = getOrderedClasses();
39
40         for (Iterator JavaDoc 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 JavaDoc getOrderedClasses() throws XDocletException
50     {
51         Log log = LogUtil.getLog(CastorTagsHandler.class, "getAllClasses");
52
53         log.debug("ordering classes");
54
55         List JavaDoc orderedClasses = new ArrayList JavaDoc();
56
57         while (!gatherClasses(orderedClasses))
58             ;
59         return orderedClasses;
60     }
61
62     private boolean gatherClasses(List JavaDoc orderedClasses) throws XDocletException
63     {
64         Log log = LogUtil.getLog(CastorTagsHandler.class, "gatherClasses");
65
66         boolean addedAll = true;
67
68         for (Iterator JavaDoc i = (getXJavaDoc().getSourceClasses()).iterator(); i.hasNext(); ) {
69             XClass currentClass = (XClass)i.next();
70             String JavaDoc 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 JavaDoc orderedClasses, String JavaDoc depends, XClass currentClass)
87     {
88         Log log = LogUtil.getLog(CastorTagsHandler.class, "checkOrderedClasses");
89
90         for (Iterator JavaDoc 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