1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package ch.elca.el4j.services.gui.swing.cookswing.binding;
18
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 import org.jdesktop.application.ApplicationContext;
23 import org.jdesktop.beansbinding.Property;
24 import org.jdesktop.swingbinding.JTableBinding;
25 import org.jdesktop.swingbinding.JTableBinding.ColumnBinding;
26 import org.w3c.dom.Element;
27
28 import com.silvermindsoftware.hitch.binding.PropertyUtil;
29
30 import ch.elca.el4j.services.gui.swing.GUIApplication;
31
32 import cookxml.core.DecodeEngine;
33 import cookxml.core.exception.CreatorException;
34
35
36
37
38
39
40
41
42
43 public class ColumnBindingCreator extends AbstractBindingCreator {
44
45
46
47 private static Logger s_logger = LoggerFactory.getLogger(ColumnBindingCreator.class);
48
49
50 protected static final String LABEL = "label";
51 protected static final String EDITABLE = "editable";
52 protected static final String CLASS = "class";
53
54
55 @SuppressWarnings("unchecked")
56 public Object create(String parentNS, String parentTag, Element elm,
57 Object parentObj, DecodeEngine decodeEngine) throws CreatorException {
58
59
60 JTableBinding tb = ((NoAddValueHolder<JTableBinding>)
61 parentObj).getObject();
62 Property prop = PropertyUtil.create(elm.getAttribute(PROPERTY));
63
64
65 ColumnBinding cb = tb.addColumnBinding(prop);
66
67
68 String columnName = elm.getAttribute(LABEL);
69 if (columnName.startsWith("@")) {
70 GUIApplication app = GUIApplication.getInstance();
71 ApplicationContext appContext = app.getContext();
72 columnName = appContext.getResourceMap(
73 decodeEngine.getVariable("this").getClass())
74 .getString(columnName.substring(1));
75 if (columnName == null) {
76
77 columnName = elm.getAttribute(LABEL).substring(1);
78 }
79 }
80 cb.setColumnName(columnName);
81
82
83 cb.setEditable(elm.getAttribute(EDITABLE).equalsIgnoreCase("true"));
84
85
86 try {
87 if (!elm.getAttribute(CLASS).equals("")) {
88 cb.setColumnClass(Class.forName(elm.getAttribute(CLASS)));
89 }
90 } catch (ClassNotFoundException e) {
91 s_logger.warn("Attribute '" + CLASS + "' of tag '"
92 + elm.getNodeName() + "' contains invalid class.");
93 }
94
95 return new NoAddValueHolder<ColumnBinding>(cb);
96 }
97 }