1 28 29 package com.idaremedia.antx.feedback; 30 31 import java.util.StringTokenizer ; 32 33 import org.apache.tools.ant.BuildEvent; 34 import org.apache.tools.ant.Project; 35 36 import com.idaremedia.antx.AntX; 37 import com.idaremedia.antx.Iteration; 38 import com.idaremedia.antx.NoiseLevel; 39 import com.idaremedia.antx.apis.ProblemHandler; 40 import com.idaremedia.antx.helpers.Strings; 41 import com.idaremedia.antx.helpers.Tk; 42 import com.idaremedia.antx.ownhelpers.io.ErrOutHandle; 43 import com.idaremedia.antx.starters.BuildListenerSkeleton; 44 import com.idaremedia.apis.DiagnosticsEmitter; 45 46 72 73 public class EventEmitConduit extends BuildListenerSkeleton 74 { 75 78 public EventEmitConduit() 79 { 80 } 81 82 83 89 public void setProblemHandler(ProblemHandler errH) 90 { 91 m_errHandler = errH; 92 } 93 94 95 101 public ProblemHandler getProblemHandler() 102 { 103 if (m_errHandler!=null) { 104 return m_errHandler; 105 } 106 return Iteration.problemsHandler(); 107 } 108 109 110 116 public void setConfiguration(EmitConfiguration ec) 117 { 118 m_emitConfiguration = ec; 119 } 120 121 122 128 public EmitConfiguration getConfiguration() 129 { 130 if (m_emitConfiguration!=null) { 131 return m_emitConfiguration; 132 } 133 return EmitContext.getConfigurationNoNull(); 134 } 135 136 137 145 public void setGroupingMapper(GroupingMapper mapper) 146 { 147 if (mapper==null) { 148 m_mapper = getDefaultGroupingMapper(); 149 } else { 150 m_mapper = mapper; 151 } 152 } 153 154 155 161 public final GroupingMapper getGroupingMapper() 162 { 163 return m_mapper; 164 } 165 166 167 171 private int includeFrom(String is) 172 { 173 if (is.startsWith("task")) { 174 return MainField.INCLUDE_TASK; 175 } 176 if (is.startsWith("target")) { 177 return MainField.INCLUDE_TARGET; 178 } 179 if (is.startsWith("nested")) { 180 return MainField.INCLUDE_NESTED; 181 } 182 if (is.startsWith("project")){ 183 return MainField.INCLUDE_PROJECT; 184 } 185 return 0; 186 } 187 188 189 199 public void setIncludes(String filterstring) 200 { 201 if (filterstring==null) { 202 m_includesFilter = MainField.DEFAULT_FILTER; 203 m_filtersByName = Strings.DEFAULT; 204 } 205 else { 206 filterstring = Tk.lowercaseFrom(filterstring); 207 int i; 208 if (Strings.ALL.equals(filterstring)) { 209 i= MainField.INCLUDE_ALL; 210 } else if (Strings.DEFAULT.equals(filterstring)) { 211 i= MainField.DEFAULT_FILTER; 212 } else if (Strings.NONE.equals(filterstring)) { 213 i= 0; 214 } else { 215 if (filterstring.startsWith(Strings.ALL)) { 216 i= MainField.INCLUDE_ALL; 217 String minuslist = filterstring.substring(Strings.ALL.length()); 218 StringTokenizer st= new StringTokenizer (minuslist,"-"); 219 while (st.hasMoreTokens()) { 220 i &= ~includeFrom(st.nextToken()); 221 } 222 } else { 223 i= 0; 224 StringTokenizer st= new StringTokenizer (filterstring,","); 225 while (st.hasMoreTokens()) { 226 i |= includeFrom(st.nextToken()); 227 } 228 } 229 } 230 m_includesFilter = i; 231 m_filtersByName = filterstring; 232 } 233 } 234 235 236 240 public final String getIncludes() 241 { 242 return m_filtersByName; 243 } 244 245 246 253 public final void setIncludesFilter(int mask, String byName) 254 { 255 if (byName==null) { 256 throw new IllegalArgumentException (); 257 } 258 m_includesFilter = mask; 259 m_filtersByName = byName; 260 } 261 262 263 266 public final int getIncludesFilter() 267 { 268 return m_includesFilter; 269 } 270 271 272 273 277 private static final GroupingMapper sm_DefaultMapper = 278 new GroupingMapper(); 279 280 281 285 public static final GroupingMapper getDefaultGroupingMapper() 286 { 287 return sm_DefaultMapper; 288 } 289 290 291 295 303 public void messageLogged(BuildEvent e) 304 { 305 NoiseLevel nl = NoiseLevel.from(e); 306 if (m_suspendedLevel==0) { m_suspendedLevel++; 308 309 ErrOutHandle devnull= new ErrOutHandle(); 310 devnull.install(); 311 312 try { 313 if (nl!=null) { 314 IndicatorZone iz = IndicatorZone.from(nl); 315 GroupingMapper mapper = getGroupingMapper(); 316 EmitConfiguration ini = getConfiguration(); 317 318 String evtpath = mapper.pathFrom 319 (e, iz, getIncludesFilter(), ini.getGroupingPathSeparator()); 320 321 String msgpath = mapper.getLabel(MainField.MESSAGE,e,iz); 322 if (msgpath!=null) { 323 if (msgpath.startsWith(ini.getGroupingPathSeparator())) { 324 evtpath += msgpath; 325 } else { 326 evtpath += ini.getGroupingPathSeparator() + msgpath; 327 } 328 } 329 DiagnosticsEmitter route = ini.getCustomEmitter(evtpath); 330 Emit.broadcast(route, e.getMessage(), e.getException(), nl); 331 332 } else { 333 handleUnknownNoiseLevel(e); 334 } 335 } finally { 336 devnull.uninstall(false,true); 337 m_suspendedLevel--; 338 } 339 } 340 } 341 342 343 348 protected void handleUnknownNoiseLevel(BuildEvent e) 349 { 350 getProblemHandler().problem 351 (AntX.uistrs().get("emit.unknown.noiselevel",String.valueOf(e.getPriority())), 352 Project.MSG_WARN); } 354 355 356 private volatile int m_suspendedLevel; 357 private ProblemHandler m_errHandler; 358 private EmitConfiguration m_emitConfiguration; 359 private int m_includesFilter= MainField.DEFAULT_FILTER; 360 private String m_filtersByName= Strings.DEFAULT; 361 private GroupingMapper m_mapper = getDefaultGroupingMapper(); 362 } 363 364 365 | Popular Tags |