internal ListenerInfo(String name, String details, SafeNameValueCollection objParams, IReflectInsightListener listener) { Id = RIUtils.GetStringHash(name); Name = name; Details = details; Params = objParams; Listener = listener; Disposed = false; }
static public ListenerInfo CreateListenerInfo(String listenerName, SafeNameValueCollection objParams) { if (listenerName == null) { throw new ArgumentNullException("listenerName"); } listenerName = listenerName.Trim(); // Ensure that Listener Name has no spaces. If so, raise exception if (listenerName.IndexOf(' ') > 0 || listenerName.Length == 0) { throw new ReflectInsightException(String.Format("'{0}' is not a proper listener name.", listenerName)); } ListenerInfo listener = null; IReflectInsightListener iListener = ListenerLoader.Get(listenerName); try { if (objParams == null) { objParams = new SafeNameValueCollection(); } listener = new ListenerInfo(listenerName, ReconstructDetailString(listenerName, objParams), objParams, iListener); } catch (Exception ex) { iListener.DisposeObject(); throw new ReflectInsightException(String.Format("Listener '{0}' caused an exception during the ReconstructDetailString section for method CreateListenerInfo() .", listenerName), ex); } // update % parameters if any try { iListener.UpdateParameterVariables(listener); } catch (Exception ex) { listener.DisposeObject(); throw new ReflectInsightException(String.Format("Listener '{0}' caused an exception during the UpdateParameterVariables() method.", listenerName), ex); } return(listener); }
private static String ReconstructDetailString(String objName, SafeNameValueCollection objParams) { StringBuilder rValue = new StringBuilder(objName.Trim()); if (objParams.Count > 0) { rValue.Append("[ "); foreach (String key in objParams.AllKeys) { rValue.AppendFormat("{0}={1}; ", key, objParams[key]); } rValue.Replace("; ", " ", rValue.Length - 2, 2); rValue.Append("]"); } return(rValue.ToString().Trim()); }
static private SafeNameValueCollection GetParameters(String details) { SafeNameValueCollection parameters = new SafeNameValueCollection(); String listenerName = EnsureNoSpacesForListenerName(details); Int32 length = details.Length; details = details.Replace(String.Format("{0}[", listenerName), String.Empty).Replace("]", String.Empty).Trim(); if (details.Length == length) { details = details.Replace(listenerName, String.Empty); } if (String.Compare(details, String.Empty, false) != 0) { String[] keyValuePairs = details.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (String pair in keyValuePairs) { String[] keyValues = pair.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); if (keyValues.Length != 2) { throw new ReflectInsightException("Listener parameters must follow the Key Value Pair model (i.e. param1=value1"); } if (keyValues[0].Trim().Contains(" ")) { throw new ReflectInsightException("Parameter names cannot contain spaces"); } parameters[keyValues[0].Trim()] = UnmaskSpecialSymbols(keyValues[1].Trim()); } } return(parameters); }