1 38 39 package org.apache.cocoon.faces.samples.components.components; 40 41 42 import javax.faces.component.UICommand; 43 import javax.faces.context.FacesContext; 44 import javax.faces.el.MethodBinding; 45 import javax.faces.event.AbortProcessingException; 46 import javax.faces.event.ActionEvent; 47 import javax.faces.event.ActionListener; 48 import javax.faces.event.FacesEvent; 49 import javax.faces.event.PhaseId; 50 51 60 61 public class MapComponent extends UICommand { 62 63 64 66 67 private String current = null; 68 69 private MethodBinding action = null; 70 private MethodBinding actionListener = null; 71 private boolean immediate = false; 72 private boolean immediateSet = false; 73 74 75 76 78 public MapComponent() { 79 super(); 80 addDefaultActionListener(getFacesContext()); 81 } 82 83 84 86 87 91 public String getCurrent() { 92 return (this.current); 93 } 94 95 96 103 public void setCurrent(String current) { 104 105 String previous = this.current; 106 this.current = current; 107 108 if ((previous == null) && (current == null)) { 110 return; 111 } else if ((previous != null) && (current != null) && 112 (previous.equals(current))) { 113 return; 114 } else { 115 this.queueEvent(new AreaSelectedEvent(this)); 116 } 117 118 } 119 120 121 124 public String getFamily() { 125 126 return ("Map"); 127 128 } 129 130 132 private static Class signature[] = {AreaSelectedEvent.class}; 133 134 135 152 public void broadcast(FacesEvent event) throws AbortProcessingException { 153 154 super.broadcast(event); 156 157 MethodBinding mb = getActionListener(); 159 if (mb != null) { 160 if ((isImmediate() && 161 event.getPhaseId().equals(PhaseId.APPLY_REQUEST_VALUES)) || 162 (!isImmediate() && 163 event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION))) { 164 FacesContext context = getFacesContext(); 165 mb.invoke(context, new Object []{event}); 166 } 167 } 168 169 } 170 171 172 178 179 public void queueEvent(FacesEvent e) { 180 if (e instanceof ActionEvent) { 181 if (isImmediate()) { 182 e.setPhaseId(PhaseId.APPLY_REQUEST_VALUES); 183 } else { 184 e.setPhaseId(PhaseId.INVOKE_APPLICATION); 185 } 186 } 187 super.queueEvent(e); 188 } 189 190 192 193 198 public Object saveState(FacesContext context) { 199 removeDefaultActionListener(context); 200 Object values[] = new Object [6]; 201 values[0] = super.saveState(context); 202 values[1] = current; 203 values[2] = saveAttachedState(context, action); 204 values[3] = saveAttachedState(context, actionListener); 205 values[4] = immediate ? Boolean.TRUE : Boolean.FALSE; 206 values[5] = immediateSet ? Boolean.TRUE : Boolean.FALSE; 207 addDefaultActionListener(context); 208 return (values); 209 } 210 211 212 220 public void restoreState(FacesContext context, Object state) { 221 removeDefaultActionListener(context); 222 Object values[] = (Object []) state; 223 super.restoreState(context, values[0]); 224 current = (String ) values[1]; 225 action = (MethodBinding) restoreAttachedState(context, values[2]); 226 actionListener = (MethodBinding) restoreAttachedState(context, 227 values[3]); 228 immediate = ((Boolean ) values[4]).booleanValue(); 229 immediateSet = ((Boolean ) values[5]).booleanValue(); 230 addDefaultActionListener(context); 231 } 232 233 235 private void addDefaultActionListener(FacesContext context) { 237 ActionListener listener = 238 context.getApplication().getActionListener(); 239 addActionListener(listener); 240 } 241 242 243 private void removeDefaultActionListener(FacesContext context) { 245 removeActionListener(context.getApplication().getActionListener()); 246 } 247 248 } 249 | Popular Tags |