%line | %branch | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
org.apache.commons.jelly.tags.swing.ConstraintTag |
|
|
1 | /* |
|
2 | * Copyright 2002-2004 The Apache Software Foundation |
|
3 | * |
|
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 | * you may not use this file except in compliance with the License. |
|
6 | * You may obtain a copy of the License at |
|
7 | * |
|
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
|
9 | * |
|
10 | * Unless required by applicable law or agreed to in writing, software |
|
11 | * distributed under the License is distributed on an "AS IS" BASIS, |
|
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 | * See the License for the specific language governing permissions and |
|
14 | * limitations under the License. |
|
15 | */ |
|
16 | package org.apache.commons.jelly.tags.swing; |
|
17 | ||
18 | import java.lang.reflect.InvocationTargetException; |
|
19 | ||
20 | import org.apache.commons.beanutils.BeanUtils; |
|
21 | import org.apache.commons.jelly.DynaBeanTagSupport; |
|
22 | import org.apache.commons.jelly.JellyException; |
|
23 | import org.apache.commons.jelly.JellyTagException; |
|
24 | import org.apache.commons.jelly.Tag; |
|
25 | import org.apache.commons.jelly.XMLOutput; |
|
26 | import org.apache.commons.jelly.impl.TagFactory; |
|
27 | import org.xml.sax.Attributes; |
|
28 | ||
29 | /** This class represents a layout-manager constraints as passed in |
|
30 | * the second argument of {@link Container#add(Component,Object)}. |
|
31 | * <p> |
|
32 | * In essence, it looks really like nothing else than a bean-class... |
|
33 | * with {@link #getConstraintObject}. |
|
34 | * Probably a shorter java-source is do-able. |
|
35 | * <p> |
|
36 | * TODO: this class should probably be extended with special treatment for dimensios |
|
37 | * using the converter package. |
|
38 | */ |
|
39 | public class ConstraintTag extends DynaBeanTagSupport { |
|
40 | ||
41 | /* TODO: make a gridbagconstraintTag class which supports an attribute "parent" |
|
42 | (or... startWith) which is another gridbagconstraintTag whose gridbagconstraint |
|
43 | is cloned then attributes are set |
|
44 | This tag should also support the attributes such as fill=BOTH |
|
45 | and anchor=NORTHEAST... |
|
46 | Wooops... need to define setters ?? let's see if BeanUtils does it on public vars |
|
47 | And... have an insets?? A child ? |
|
48 | */ |
|
49 | ||
50 | protected Factory factory; |
|
51 | 0 | protected String var = null; |
52 | 0 | protected Object bean = null; |
53 | ||
54 | public static class HereFactory extends BeanFactory implements TagFactory { |
|
55 | public HereFactory(Class c) { super(c); } |
|
56 | public Tag createTag(String name, Attributes attributes) { |
|
57 | return new ConstraintTag ( this ); |
|
58 | // still scratching my head about "this" usage... |
|
59 | } |
|
60 | } // class HereFactory |
|
61 | public static class ConstantFactory implements TagFactory, Factory { |
|
62 | public ConstantFactory(Object c) { this.constant = c;} |
|
63 | private Object constant; |
|
64 | public Object newInstance() { return constant; } |
|
65 | public Tag createTag(String name, Attributes attributes) throws JellyException { |
|
66 | return new ConstraintTag ( this ); |
|
67 | } |
|
68 | } // class ConstatnStringFactory |
|
69 | ||
70 | // we could be able to make factories that create their tags in parametrized |
|
71 | // subclasses of the tag depending on the name and attributes |
|
72 | // it would useful, for example, to make a cardLayout's <card name=""> |
|
73 | ||
74 | ||
75 | 0 | public ConstraintTag (Factory factory) { |
76 | 0 | this.factory = factory; |
77 | 0 | } |
78 | ||
79 | protected void createBean ( Factory factory ) throws InstantiationException { |
|
80 | 0 | bean = factory.newInstance(); |
81 | 0 | } |
82 | ||
83 | // --------------------------------------------- ATTRIBUTES |
|
84 | ||
85 | public void beforeSetAttributes ( ) throws JellyTagException { |
|
86 | try { |
|
87 | 0 | createBean(factory); |
88 | 0 | } catch (InstantiationException e) { |
89 | 0 | throw new JellyTagException(e.toString()); |
90 | 0 | } |
91 | 0 | } |
92 | ||
93 | ||
94 | public void setAttribute ( String name, Object value ) throws JellyTagException { |
|
95 | // no real need for DynaBeans or ? |
|
96 | 0 | if ( "var".equals(name) ) { |
97 | 0 | var = value.toString(); |
98 | } else { |
|
99 | ||
100 | try { |
|
101 | 0 | BeanUtils.setProperty( bean, name, value ); |
102 | 0 | } catch (IllegalAccessException e) { |
103 | 0 | throw new JellyTagException(e.toString()); |
104 | 0 | } catch (InvocationTargetException e) { |
105 | 0 | throw new JellyTagException(e.toString()); |
106 | 0 | } |
107 | ||
108 | } |
|
109 | 0 | } |
110 | // -------------------------------------------------- |
|
111 | /** Children invocation... just nothing... |
|
112 | */ |
|
113 | public void doTag ( XMLOutput output ) throws JellyTagException { |
|
114 | 0 | if ( var != null ) context.setVariable ( class="keyword">var, getBean() ); |
115 | 0 | invokeBody ( output ); |
116 | // nothing else to do... the getConstraintObject method should have been called. |
|
117 | 0 | } |
118 | ||
119 | // ---------------------------------------------- |
|
120 | public Object getBean() { |
|
121 | 0 | return bean; |
122 | } |
|
123 | ||
124 | /** Returns the attached constraint object. |
|
125 | */ |
|
126 | public Object getConstraintObject() { |
|
127 | 0 | return getBean(); |
128 | } |
|
129 | } // class ConstraintTag |
This report is generated by jcoverage, Maven and Maven JCoverage Plugin. |