001: /*
002: * Copyright (C) 2005 Jeff Tassin
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2.1 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018:
019: package com.jeta.swingbuilder.codegen.builder;
020:
021: import java.util.HashMap;
022: import java.util.Iterator;
023: import java.util.LinkedList;
024: import java.util.TreeSet;
025:
026: import javax.swing.Icon;
027:
028: import com.jeta.swingbuilder.gui.utils.FormDesignerUtils;
029: import com.jeta.swingbuilder.store.CodeModel;
030:
031: public class ClassDeclarationManager implements DeclarationManager {
032: private DeclarationHelper m_member_decls;
033:
034: private DeclarationHelper m_method_decls = new DeclarationHelper(
035: null);
036:
037: /**
038: * A set of import statements for this class (without the import keyword)
039: */
040: private TreeSet m_imports = new TreeSet();
041:
042: /**
043: * A list of MethodWriter objects
044: */
045: private LinkedList m_methods = new LinkedList();
046:
047: /**
048: * A list of member variables
049: */
050: private LinkedList m_fields = new LinkedList();
051:
052: private String m_class_name;
053:
054: private String m_package;
055:
056: private HashMap m_user_objects = new HashMap();
057:
058: private CodeModel m_code_model;
059:
060: public ClassDeclarationManager(CodeModel cgenmodel) {
061: m_code_model = cgenmodel;
062: m_class_name = cgenmodel.getClassName();
063: m_member_decls = new DeclarationHelper(cgenmodel
064: .getMemberPrefix());
065: }
066:
067: public void addImport(String importDef) {
068: if (importDef != null && importDef.indexOf(".") >= 0) {
069: m_imports.add(importDef);
070: }
071: }
072:
073: /**
074: *
075: */
076: public void addMethod(MethodWriter mw) {
077: m_method_decls.addVariable(mw.getMethodName());
078: m_methods.add(mw);
079: }
080:
081: public void addMemberVariable(Statement stmt) {
082: if (stmt != null)
083: m_fields.add(stmt);
084: }
085:
086: public void build(SourceBuilder builder) {
087: if (m_package.length() > 0) {
088:
089: if (m_package.indexOf("package") != 0) {
090: builder.print("package ");
091: }
092:
093: builder.print(m_package);
094: builder.println(";");
095: builder.println();
096: }
097:
098: Iterator iter = m_imports.iterator();
099: while (iter.hasNext()) {
100: builder.print("import ");
101: builder.print(iter.next().toString());
102: builder.println(";");
103: }
104: builder.println();
105: builder.println();
106:
107: builder.print("public class ");
108: builder.print(getClassName());
109: builder.print(" extends JPanel");
110:
111: builder.openBrace();
112: builder.println();
113: builder.indent();
114:
115: iter = m_fields.iterator();
116: while (iter.hasNext()) {
117: Statement stmt = (Statement) iter.next();
118: stmt.output(builder);
119: }
120:
121: iter = m_methods.iterator();
122: while (iter.hasNext()) {
123: builder.println();
124: MethodWriter mw = (MethodWriter) iter.next();
125: mw.build(builder);
126: builder.println();
127: }
128:
129: builder.dedent();
130:
131: builder.println();
132: builder.println();
133:
134: builder.closeBrace();
135: builder.println();
136: }
137:
138: public String createMemberVariable(Class compClass, String compName) {
139: return m_member_decls.createVariable(compClass, compName);
140: }
141:
142: public String createLocalVariable(Class compClass, String compName) {
143: assert (false);
144: return "";
145: }
146:
147: public String createMethodName(String name) {
148: String methodname = m_method_decls.createVariable(null, name);
149: return methodname;
150: }
151:
152: public String getClassName() {
153: return m_class_name;
154: }
155:
156: /**
157: * This returns the name of a method used for loading resources in a form
158: * such as Icons and strings.
159: */
160: public String getResourceMethod(Class resourceType) {
161: if (Icon.class == resourceType) {
162: return "loadImage";
163: } else
164: return null;
165: }
166:
167: public boolean isIncludeNonStandard() {
168: return m_code_model.isIncludeNonStandard();
169: }
170:
171: public void setPackage(String pkg) {
172: m_package = FormDesignerUtils.fastTrim(pkg);
173: }
174:
175: public Object get(String name) {
176: return m_user_objects.get(name);
177: }
178:
179: public void put(String name, Object obj) {
180: m_user_objects.put(name, obj);
181: }
182:
183: }
|