1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.jelly.tags.jface;
17
18 import org.apache.commons.jelly.JellyTagException;
19 import org.apache.commons.jelly.MissingAttributeException;
20 import org.apache.commons.jelly.TagSupport;
21 import org.apache.commons.jelly.XMLOutput;
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.eclipse.jface.viewers.ISelectionChangedListener;
25 import org.eclipse.jface.viewers.SelectionChangedEvent;
26 import org.eclipse.jface.viewers.Viewer;
27
28 /***
29 * This tag adds a listener for selection changes in this viewer.
30 *
31 * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster</a>
32 */
33 public class SelectionChangedListenerTag
34 extends TagSupport
35 implements ISelectionChangedListener {
36
37 /*** The Log to which logging calls will be made. */
38 private static final Log log =
39 LogFactory.getLog(SelectionChangedListenerTag.class);
40
41 private String var = "event";
42 private XMLOutput output;
43
44
45
46
47 public void doTag(XMLOutput output)
48 throws MissingAttributeException, JellyTagException {
49 if (var == null) {
50 throw new MissingAttributeException("var");
51 }
52
53 Viewer viewer = getParentViewer();
54 if (viewer == null) {
55 throw new JellyTagException("This tag must be nested within a viewer tag");
56 }
57
58 viewer.addSelectionChangedListener(this);
59 this.output = output;
60 }
61
62 public Viewer getParentViewer() {
63 ViewerTag tag = (ViewerTag) findAncestorWithClass(ViewerTag.class);
64 if (tag != null) {
65 return tag.getViewer();
66 }
67 return null;
68 }
69
70 /***
71 * @return String
72 */
73 public String getVar() {
74 return var;
75 }
76
77 /***
78 * Sets the var.
79 * @param var The var to set
80 */
81 public void setVar(String var) {
82 this.var = var;
83 }
84
85
86
87
88
89
90
91 public void selectionChanged(SelectionChangedEvent event) {
92 try {
93 context.setVariable(var, event);
94 invokeBody(output);
95 } catch (Exception e) {
96 log.error(
97 "Caught exception: " + e + " while processing event: " + event,
98 e);
99 }
100 }
101
102 }