KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > classycle > renderer > XMLAtomicVertexRenderer


1 /*
2  * Copyright (c) 2003-2006, Franz-Josef Elmer, All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * - Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  * - Redistributions in binary form must reproduce the above copyright notice,
10  * this list of conditions and the following disclaimer in the documentation
11  * and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
14  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
15  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
22  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
23  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */

25 package classycle.renderer;
26
27 import java.text.MessageFormat JavaDoc;
28
29 import classycle.graph.AtomicVertex;
30 import classycle.graph.NameAttributes;
31 import classycle.graph.StrongComponent;
32
33 /**
34  * XML renderer of an {@link AtomicVertex} with
35  * {@link NameAttributes}.
36  *
37  * @author Franz-Josef Elmer
38  */

39 public abstract class XMLAtomicVertexRenderer implements AtomicVertexRenderer
40 {
41   /**
42    * Renderes the specified vertex. It is assumed that the vertex attributes
43    * are of the type {@link classycle.ClassAttributes}.
44    * @return the rendered vertex.
45    */

46   public String JavaDoc render(AtomicVertex vertex, StrongComponent cycle,
47                        int layerIndex)
48   {
49     StringBuffer JavaDoc result = new StringBuffer JavaDoc();
50     result.append(getVertexRenderer().render(vertex, cycle, layerIndex));
51     MessageFormat JavaDoc format = new MessageFormat JavaDoc(" <" + getRefElement()
52                                    + " name=\"{0}\"" + " type=\"{1}\"/>\n");
53     String JavaDoc[] values = new String JavaDoc[2];
54     for (int i = 0, n = vertex.getNumberOfIncomingArcs(); i < n; i++)
55     {
56       values[0] = ((NameAttributes) vertex.getTailVertex(i).getAttributes())
57                   .getName();
58       values[1] = "usedBy";
59       format.format(values, result, null);
60     }
61     for (int i = 0, n = vertex.getNumberOfOutgoingArcs(); i < n; i++)
62     {
63       values[0] = ((NameAttributes) vertex.getHeadVertex(i).getAttributes())
64                   .getName();
65       values[1] = ((AtomicVertex) vertex.getHeadVertex(i)).isGraphVertex()
66                                             ? "usesInternal" : "usesExternal";
67       format.format(values, result, null);
68     }
69     result.append(" </").append(getElement()).append(">\n");
70     return new String JavaDoc(result);
71   }
72   
73   protected abstract AtomicVertexRenderer getVertexRenderer();
74   
75   protected abstract String JavaDoc getElement();
76   
77   protected abstract String JavaDoc getRefElement();
78 } //class
Popular Tags