KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > genimen > djeneric > tools > modeler > util > ModelDescriber


1 /*
2  * Copyright (c) 2001-2005 by Genimen BV (www.genimen.com) All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, is permitted provided that the following conditions are met: -
6  * Redistributions of source code must retain the above copyright notice, this
7  * list of conditions and the following disclaimer. - Redistributions in binary
8  * form must reproduce the above copyright notice, this list of conditions and
9  * the following disclaimer in the documentation and/or other materials
10  * provided with the distribution. - All advertising materials mentioning
11  * features or use of this software must display the following acknowledgment:
12  * "This product includes Djeneric." - Products derived from this software may
13  * not be called "Djeneric" nor may "Djeneric" appear in their names without
14  * prior written permission of Genimen BV. - Redistributions of any form
15  * whatsoever must retain the following acknowledgment: "This product includes
16  * Djeneric."
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL GENIMEN BV, DJENERIC.ORG, OR CONTRIBUTORS
22  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */

30 package com.genimen.djeneric.tools.modeler.util;
31
32 import com.genimen.djeneric.language.Messages;
33 import com.genimen.djeneric.repository.DjDomain;
34 import com.genimen.djeneric.repository.DjDomainValue;
35 import com.genimen.djeneric.repository.DjExtent;
36 import com.genimen.djeneric.repository.DjPersistenceManager;
37 import com.genimen.djeneric.repository.DjProperty;
38 import com.genimen.djeneric.repository.DjRelation;
39 import com.genimen.djeneric.util.DjString;
40
41 public class ModelDescriber
42 {
43   private String JavaDoc _description = null;
44
45   public ModelDescriber()
46   {
47   }
48
49   public void describe(DjPersistenceManager mgr)
50   {
51     DjExtent[] extents = mgr.getExtentsSorted();
52     StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
53
54     describeDomains(mgr.getDomains(), sb);
55
56     for (int i = 0; i < extents.length; i++)
57     {
58       describeExtent(extents[i], sb);
59     }
60     _description = sb.toString().trim();
61   }
62
63   public String JavaDoc getDescription()
64   {
65     return _description;
66   }
67
68   protected void describeExtent(DjExtent extent, StringBuffer JavaDoc sb)
69   {
70     String JavaDoc title = Messages.getString("ModelDescriber.Extent", extent.getName());
71     DjExtent se = extent.getSuper();
72     while (se != null)
73     {
74       title += "->" + se.getName();
75       se = se.getSuper();
76     }
77
78     sb.append("\n" + title + "\n" + DjString.appendToLength("-", "-", title.length()) + "\n");
79
80     DjProperty[] props = extent.getPropertiesSorted();
81     for (int i = 0; i < props.length; i++)
82     {
83       sb.append(" ");
84       sb.append(DjString.appendToLength(props[i].getName(), " ", 30));
85       sb.append(DjString.appendToLength(props[i].isRequired() ? Messages.getString("global.Req") : "", " ", 6));
86       sb.append(DjString.appendToLength(props[i].getTypeName(), " ", 20));
87       sb.append(DjString.appendToLength(props[i].getDescription(), " ", 20));
88       sb.append("\n");
89     }
90
91     DjRelation[] rels = extent.getDetailRelations();
92     for (int i = 0; i < rels.length; i++)
93     {
94       if (i == 0) sb.append("\n");
95
96       sb.append(" ");
97       if (rels[i].isDetailsContained()) sb.append(Messages.getString("ModelDescriber.RelationDescrContains", rels[i]
98           .getMasterExtent().getName(), rels[i].getDetailExtent().getNamePlural(), rels[i].getName()));
99       else sb.append(Messages.getString("ModelDescriber.RelationDescrReferences", rels[i].getMasterExtent().getName(),
100                                         rels[i].getDetailExtent().getNamePlural(), rels[i].getName()));
101       sb.append("\n");
102     }
103     sb.append("\n");
104   }
105
106   protected void describeDomains(DjDomain[] domains, StringBuffer JavaDoc sb)
107   {
108     String JavaDoc title = Messages.getString("ModelDescriber.Domains");
109     sb.append(title + "\n" + DjString.appendToLength("-", "-", title.length()) + "\n");
110     for (int i = 0; i < domains.length; i++)
111     {
112       sb.append(DjString.appendToLength(domains[i].getName(), " ", 40));
113       sb.append(DjString.appendToLength(domains[i].getNativeType(), " ", 20));
114
115       String JavaDoc lenSpec = String.valueOf(domains[i].getLength());
116
117       if (domains[i].getTypeCode() == DjDomain.BIGDECIMAL_TYPE)
118       {
119         lenSpec += "," + (domains[i].getDecimals() != 0 ? String.valueOf(domains[i].getDecimals()) : "0");
120       }
121
122       sb.append(DjString.appendToLength(lenSpec, " ", 7));
123       sb.append(DjString.appendToLength(domains[i].getFormatMask(), " ", 10));
124       sb.append("\n");
125
126       DjDomainValue[] values = domains[i].getValidValues();
127       for (int j = 0; j < values.length; j++)
128       {
129         String JavaDoc high = "";
130         String JavaDoc value = "";
131         if (values[j].getValue() != null) value = values[j].getValue().toString();
132         if (values[j].getHigh() != null) high = values[j].getHigh().toString();
133
134         sb.append(" " + DjString.appendToLength(value, " ", 18));
135         sb.append(DjString.appendToLength(high, " ", 20));
136         sb.append(values[j].getDescription());
137         sb.append("\n");
138       }
139
140     }
141   }
142 }
Popular Tags