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.properties;
020:
021: import java.awt.Color;
022: import java.lang.reflect.Method;
023: import java.util.Iterator;
024:
025: import javax.swing.border.BevelBorder;
026: import javax.swing.border.Border;
027: import javax.swing.border.EmptyBorder;
028: import javax.swing.border.EtchedBorder;
029: import javax.swing.border.LineBorder;
030: import javax.swing.border.TitledBorder;
031:
032: import com.jeta.forms.gui.beans.JETAPropertyDescriptor;
033: import com.jeta.forms.store.properties.BevelBorderProperty;
034: import com.jeta.forms.store.properties.BorderProperty;
035: import com.jeta.forms.store.properties.ColorProperty;
036: import com.jeta.forms.store.properties.CompoundBorderProperty;
037: import com.jeta.forms.store.properties.EmptyBorderProperty;
038: import com.jeta.forms.store.properties.EtchedBorderProperty;
039: import com.jeta.forms.store.properties.LineBorderProperty;
040: import com.jeta.forms.store.properties.TitledBorderProperty;
041: import com.jeta.swingbuilder.codegen.builder.BeanWriter;
042: import com.jeta.swingbuilder.codegen.builder.DeclarationManager;
043: import com.jeta.swingbuilder.codegen.builder.LocalVariableDeclaration;
044: import com.jeta.swingbuilder.codegen.builder.MethodStatement;
045: import com.jeta.swingbuilder.codegen.builder.PropertyWriter;
046: import com.jeta.swingbuilder.codegen.builder.StringExpression;
047: import com.jeta.swingbuilder.codegen.builder.VariableDeclaration;
048:
049: public class BorderPropertyBuilder implements PropertyWriter {
050:
051: /**
052: * PropertyWriter implementation
053: */
054: public void writeProperty(DeclarationManager declMgr,
055: BeanWriter writer, JETAPropertyDescriptor pd, Object value) {
056: try {
057: Method write = pd.getWriteMethod();
058: if (value instanceof BorderProperty) {
059: BorderProperty bp = (BorderProperty) value;
060: String methodname = "setBorder";
061: if (write != null)
062: methodname = write.getName();
063: MethodStatement ms = new MethodStatement(writer
064: .getBeanVariable(), methodname);
065: VariableDeclaration border_var = null;
066: if (bp instanceof CompoundBorderProperty) {
067: border_var = createCompoundBorder(declMgr, writer,
068: (CompoundBorderProperty) bp);
069: } else {
070: border_var = createBorder(declMgr, writer, bp);
071: }
072:
073: if (border_var != null) {
074: ms.addParameter(border_var.getVariable());
075: writer.addStatement(ms);
076: }
077: }
078: } catch (Exception e) {
079: e.printStackTrace();
080: }
081: }
082:
083: private VariableDeclaration createCompoundBorder(
084: DeclarationManager declMgr, BeanWriter writer,
085: CompoundBorderProperty cp) {
086: if (cp.size() == 0) {
087: return null;
088: } else if (cp.size() == 1) {
089: Iterator iter = cp.iterator();
090: VariableDeclaration last_border = createBorder(declMgr,
091: writer, (BorderProperty) iter.next());
092: return last_border;
093: } else if (cp.size() > 1) {
094: LocalVariableDeclaration last_border = null;
095: Iterator iter = cp.iterator();
096: while (iter.hasNext()) {
097: BorderProperty nested_border = (BorderProperty) iter
098: .next();
099: LocalVariableDeclaration border = createBorder(declMgr,
100: writer, nested_border);
101: if (last_border == null) {
102: last_border = border;
103: } else if (border != null) {
104: last_border = createBorderFactoryStatement(declMgr,
105: last_border, border);
106: writer.addStatement(last_border);
107: }
108: }
109: return last_border;
110: } else
111: return null;
112: }
113:
114: private LocalVariableDeclaration createBorderFactoryStatement(
115: DeclarationManager declMgr, VariableDeclaration outer,
116: VariableDeclaration inner) {
117: declMgr.addImport("javax.swing.BorderFactory");
118: LocalVariableDeclaration result = new LocalVariableDeclaration(
119: declMgr, Border.class, null,
120: "BorderFactory.createCompoundBorder");
121:
122: result.addParameter(outer.getVariable());
123: result.addParameter(inner.getVariable());
124: return result;
125: }
126:
127: private LocalVariableDeclaration createBorder(
128: DeclarationManager declMgr, BeanWriter writer,
129: BorderProperty bp) {
130: LocalVariableDeclaration border_var = null;
131:
132: if (bp instanceof BevelBorderProperty) {
133: declMgr.addImport("javax.swing.border.BevelBorder");
134: BevelBorderProperty bb = (BevelBorderProperty) bp;
135:
136: border_var = new LocalVariableDeclaration(declMgr,
137: BevelBorder.class);
138: if (bb.getBevelType() == BevelBorder.RAISED)
139: border_var.addParameter("BevelBorder.RAISED");
140: else
141: border_var.addParameter("BevelBorder.LOWERED");
142:
143: declMgr.addImport("java.awt.Color");
144:
145: BevelBorder bevelborder = new BevelBorder(bb.getBevelType());
146: Color c = bb.getHighlightOuterColor();
147: if (ColorProperty.DEFAULT_COLOR.equals(bb
148: .getHighlightOuterColorProperty().getColorKey()))
149: c = bevelborder.getHighlightOuterColor();
150: border_var.addParameter(ColorPropertyWriter
151: .createColorExpression(c));
152:
153: c = bb.getHighlightInnerColor();
154: if (ColorProperty.DEFAULT_COLOR.equals(bb
155: .getHighlightInnerColorProperty().getColorKey()))
156: c = bevelborder.getHighlightInnerColor();
157: border_var.addParameter(ColorPropertyWriter
158: .createColorExpression(c));
159:
160: c = bb.getShadowOuterColor();
161: if (ColorProperty.DEFAULT_COLOR.equals(bb
162: .getShadowOuterColorProperty().getColorKey()))
163: c = bevelborder.getShadowOuterColor();
164: border_var.addParameter(ColorPropertyWriter
165: .createColorExpression(c));
166:
167: c = bb.getShadowInnerColor();
168: if (ColorProperty.DEFAULT_COLOR.equals(bb
169: .getShadowInnerColorProperty().getColorKey()))
170: c = bevelborder.getShadowInnerColor();
171: border_var.addParameter(ColorPropertyWriter
172: .createColorExpression(c));
173:
174: } else if (bp instanceof EtchedBorderProperty) {
175: declMgr.addImport("javax.swing.border.EtchedBorder");
176: declMgr.addImport("java.awt.Color");
177:
178: EtchedBorderProperty eb = (EtchedBorderProperty) bp;
179: border_var = new LocalVariableDeclaration(declMgr,
180: EtchedBorder.class);
181: if (eb.getEtchType() == EtchedBorder.RAISED)
182: border_var.addParameter("EtchedBorder.RAISED");
183: else
184: border_var.addParameter("EtchedBorder.LOWERED");
185:
186: EtchedBorder eborder = new EtchedBorder(eb.getEtchType());
187: Color c = eb.getHighlightColor();
188: if (ColorProperty.DEFAULT_COLOR.equals(eb
189: .getHighlightColorProperty().getColorKey()))
190: c = eborder.getHighlightColor();
191: border_var.addParameter(ColorPropertyWriter
192: .createColorExpression(c));
193:
194: c = eb.getShadowColor();
195: if (ColorProperty.DEFAULT_COLOR.equals(eb
196: .getShadowColorProperty().getColorKey()))
197: c = eborder.getShadowColor();
198: border_var.addParameter(ColorPropertyWriter
199: .createColorExpression(c));
200:
201: } else if (bp instanceof TitledBorderProperty) {
202: TitledBorderProperty tb = (TitledBorderProperty) bp;
203: declMgr.addImport("javax.swing.border.TitledBorder");
204: declMgr.addImport("java.awt.Color");
205:
206: border_var = new LocalVariableDeclaration(declMgr,
207: TitledBorder.class);
208:
209: border_var.addParameter("null");
210: border_var
211: .addParameter(new StringExpression(tb.getTitle()));
212: border_var.addParameter("TitledBorder."
213: + BorderProperty.toJustificationString(tb
214: .getJustification()));
215: border_var
216: .addParameter("TitledBorder."
217: + BorderProperty.toPositionString(tb
218: .getPosition()));
219: border_var.addParameter("null");
220: border_var.addParameter(ColorPropertyWriter
221: .createColorExpression(tb.getTextColor()));
222: } else if (bp instanceof LineBorderProperty) {
223: declMgr.addImport("java.awt.Color");
224: declMgr.addImport("javax.swing.border.LineBorder");
225:
226: LineBorderProperty lp = (LineBorderProperty) bp;
227: border_var = new LocalVariableDeclaration(declMgr,
228: LineBorder.class);
229: border_var.addParameter(ColorPropertyWriter
230: .createColorExpression(lp.getLineColor()));
231: border_var.addParameter(lp.getLineThickness());
232: border_var.addParameter(lp.isCurved());
233: } else if (bp instanceof EmptyBorderProperty) {
234: declMgr.addImport("javax.swing.border.EmptyBorder");
235: EmptyBorderProperty eb = (EmptyBorderProperty) bp;
236: border_var = new LocalVariableDeclaration(declMgr,
237: EmptyBorder.class);
238: border_var.addParameter(eb.getTop());
239: border_var.addParameter(eb.getLeft());
240: border_var.addParameter(eb.getBottom());
241: border_var.addParameter(eb.getRight());
242: }
243:
244: writer.addStatement(border_var);
245: if (!(bp instanceof TitledBorderProperty)
246: && bp.isIncludeTitle()) {
247: border_var = addTitle(declMgr, bp, border_var);
248: writer.addStatement(border_var);
249: }
250: return border_var;
251: }
252:
253: private LocalVariableDeclaration addTitle(
254: DeclarationManager declMgr, BorderProperty bp,
255: LocalVariableDeclaration lvar) {
256: LocalVariableDeclaration border_var = null;
257: if (lvar != null) {
258: declMgr.addImport("javax.swing.BorderFactory");
259: declMgr.addImport("java.awt.Color");
260: declMgr.addImport("javax.swing.border.TitledBorder");
261:
262: border_var = new LocalVariableDeclaration(declMgr,
263: Border.class, null,
264: "BorderFactory.createTitledBorder");
265: border_var.addParameter(lvar.getVariable());
266: border_var
267: .addParameter(new StringExpression(bp.getTitle()));
268: border_var.addParameter("TitledBorder."
269: + BorderProperty.toJustificationString(bp
270: .getJustification()));
271: border_var
272: .addParameter("TitledBorder."
273: + BorderProperty.toPositionString(bp
274: .getPosition()));
275: border_var.addParameter("null");
276: border_var.addParameter(ColorPropertyWriter
277: .createColorExpression(bp.getTextColor()));
278: }
279: return border_var;
280: }
281: }
|