001: package com.avaje.util.codegen;
002:
003: import java.text.SimpleDateFormat;
004: import java.util.ArrayList;
005: import java.util.Arrays;
006: import java.util.Date;
007: import java.util.HashSet;
008:
009: import com.avaje.lib.sql.TableInfo;
010: import com.avaje.lib.util.Dnode;
011:
012: public class GenerateInfo {
013:
014: /**
015: * Created for holding embeddedId bean information. Otherwise null.
016: */
017: GenerateInfo embeddedInfo;
018:
019: String nowString;
020:
021: String fullFileName;
022:
023: String beanClassName;
024: String beanPackage;
025:
026: TableInfo tableInfo;
027:
028: SourceCode beanSource;
029:
030: Dnode beanTree;
031:
032: HashSet imports = new HashSet();
033:
034: ArrayList removeList = new ArrayList();
035: ArrayList removeMethodList = new ArrayList();
036: ArrayList deployMethodList = new ArrayList();
037:
038: boolean withAnnotations;
039:
040: GenerateLog log;
041:
042: public GenerateInfo(GenerateLog log) {
043: this .log = log;
044:
045: SimpleDateFormat sdf = new SimpleDateFormat("HHmmss");
046: nowString = sdf.format(new Date());
047:
048: beanTree = new Dnode();
049: beanTree.setNodeName("ebean");
050: }
051:
052: /**
053: * Sort and set the imports to the beanTree.
054: * Do this at the end just prior to writing the bean.
055: */
056: public void setImports() {
057:
058: String[] imp = (String[]) imports.toArray(new String[imports
059: .size()]);
060: Arrays.sort(imp);
061:
062: beanTree.setAttribute("imports", imp);
063: }
064:
065: public GenerateLog getLog() {
066: return log;
067: }
068:
069: public GenerateInfo getEmbeddedId() {
070: return embeddedInfo;
071: }
072:
073: public GenerateInfo createEmbeddedId() {
074: embeddedInfo = new GenerateInfo(log);
075: embeddedInfo.setWithAnnotations(withAnnotations);
076: return embeddedInfo;
077: }
078:
079: public String toString() {
080: if (beanClassName == null) {
081: return tableInfo.getName();
082: } else {
083: return beanClassName;
084: }
085: }
086:
087: public String getFullFileName() {
088: return fullFileName;
089: }
090:
091: public void setFullFileName(String fullFileName) {
092: this .fullFileName = fullFileName;
093: }
094:
095: public void setWithAnnotations(boolean withAnnotations) {
096: this .withAnnotations = withAnnotations;
097: }
098:
099: public void addImportAnnotation(String annName) {
100: if (withAnnotations) {
101: addImport("javax.persistence." + annName.substring(1));
102: }
103: }
104:
105: public void addImport(String className) {
106: int lastPos = className.lastIndexOf('.');
107: if (lastPos > -1) {
108: String pkg = className.substring(0, lastPos);
109: if (pkg.equals(beanPackage)) {
110: // don't add the import for the same package
111: return;
112: }
113: }
114: imports.add(className);
115: }
116:
117: public String getClassName() {
118: return beanClassName;
119: }
120:
121: public String getPackage() {
122: return beanPackage;
123: }
124:
125: public void setPackageClass(String pkg, String className) {
126: this .beanPackage = pkg;
127: this .beanClassName = className;
128: beanTree.setAttribute("package", beanPackage);
129: beanTree.setAttribute("classname", className);
130: }
131:
132: public Dnode getBeanTree() {
133: return beanTree;
134: }
135:
136: public SourceCode getBeanSource() {
137: return beanSource;
138: }
139:
140: public void setBeanSource(SourceCode beanSource) {
141: this .beanSource = beanSource;
142: }
143:
144: public String getNowString() {
145: return nowString;
146: }
147:
148: public TableInfo getTableInfo() {
149: return tableInfo;
150: }
151:
152: public void setTableInfo(TableInfo tableInfo) {
153: this .tableInfo = tableInfo;
154: }
155:
156: public void addDeployedMethod(String methodName) {
157: deployMethodList.add(methodName);
158: }
159:
160: /**
161: * Return true if this method is included as a property getter or setter.
162: */
163: public boolean isDeployedMethod(String methodName) {
164: return deployMethodList.contains(methodName);
165: }
166:
167: public void removeProperty(String propName) {
168: removeList.add(propName);
169:
170: String initCapName = Character.toUpperCase(propName.charAt(0))
171: + propName.substring(1);
172: removeMethodList.add("get" + initCapName);
173: removeMethodList.add("is" + initCapName);
174: removeMethodList.add("set" + initCapName);
175: }
176:
177: /**
178: * Return true if this property should not be included from the bean.
179: * That is, it was deployed but has been removed.
180: */
181: public boolean isDeleteProperty(String propName) {
182: return removeList.contains(propName);
183: }
184:
185: /**
186: * Return true if this method should not be included from the bean.
187: * Aka related to a deleted property.
188: */
189: public boolean isDeleteMethod(String methodName) {
190: return removeMethodList.contains(methodName);
191: }
192: }
|