- Timestamp:
- 06/08/10 16:26:35 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs
r3454 r3903 38 38 using HeuristicLab.PluginInfrastructure; 39 39 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 40 using HeuristicLab.Persistence.Auxiliary; 40 41 using HeuristicLab.Collections; 41 42 … … 43 44 44 45 [Item("ProgrammableOperator", "An operator that can be programmed for arbitrary needs.")] 45 [StorableClass] 46 [StorableClass] 46 47 public class ProgrammableOperator : Operator, IParameterizedNamedItem { 47 48 … … 79 80 protected Dictionary<Assembly, bool> Assemblies; 80 81 81 [Storable ]82 private List<string> _ persistedAssemblyNames{82 [Storable(Name="SelectedAssemblies")] 83 private List<string> _selectedAssemblyNames_persistence { 83 84 get { 84 return Assemblies. Keys.Select(a => a.FullName).ToList();85 return Assemblies.Where(a => a.Value).Select(a => a.Key.FullName).ToList(); 85 86 } 86 87 set { … … 115 116 116 117 public void SelectAssembly(Assembly a) { 117 if (a != null && Assemblies.ContainsKey(a) )118 if (a != null && Assemblies.ContainsKey(a) && !Assemblies[a]) { 118 119 Assemblies[a] = true; 120 } 119 121 } 120 122 121 123 public void UnselectAssembly(Assembly a) { 122 if (a != null && Assemblies.ContainsKey(a) )124 if (a != null && Assemblies.ContainsKey(a) && Assemblies[a]) { 123 125 Assemblies[a] = false; 126 } 124 127 } 125 128 126 129 public void SelectNamespace(string ns) { 127 130 namespaces.Add(ns); 131 OnSignatureChanged(); 128 132 } 129 133 130 134 public void UnselectNamespace(string ns) { 131 135 namespaces.Remove(ns); 136 OnSignatureChanged(); 132 137 } 133 138 … … 162 167 executeMethod = null; 163 168 ProgrammableOperator.StaticInitialize(); 164 Assemblies = defaultAssemblyDict ;165 Plugins = defaultPluginDict ;169 Assemblies = defaultAssemblyDict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 170 Plugins = defaultPluginDict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToList()); 166 171 namespaces = new HashSet<string>(DiscoverNamespaces()); 167 172 RegisterEvents(); … … 170 175 [StorableHook(HookType.AfterDeserialization)] 171 176 private void RegisterEvents() { 172 Parameters.ItemsAdded += OnSignatureChanged; 173 Parameters.ItemsRemoved += OnSignatureChanged; 174 Parameters.ItemsReplaced += OnSignatureChanged; 175 Parameters.CollectionReset += OnSignatureChanged; 176 } 177 178 protected void OnSignatureChanged(object sender, CollectionItemsChangedEventArgs<IParameter> args) { 179 if (SignatureChanged != null) 180 SignatureChanged(sender, EventArgs.Empty); 177 Parameters.ItemsAdded += Parameters_Changed; 178 Parameters.ItemsRemoved += Parameters_Changed; 179 Parameters.ItemsReplaced += Parameters_Changed; 180 Parameters.CollectionReset += Parameters_Changed; 181 } 182 183 private void Parameters_Changed(object sender, CollectionItemsChangedEventArgs<IParameter> args) { 184 OnSignatureChanged(); 185 } 186 187 protected void OnSignatureChanged() { 188 EventHandler handler = SignatureChanged; 189 if (handler != null) 190 handler(this, EventArgs.Empty); 181 191 } 182 192 183 193 private static void StaticInitialize() { 184 194 lock (initLock) { 185 if (defaultPluginDict != null || defaultAssemblyDict != null) return; 195 if (defaultPluginDict != null && defaultAssemblyDict != null) 196 return; 186 197 defaultAssemblyDict = DiscoverAssemblies(); 187 198 defaultPluginDict = GroupAssemblies(defaultAssemblyDict.Keys); … … 220 231 typeof(HeuristicLab.Core.Item).Assembly, 221 232 typeof(HeuristicLab.Data.IntValue).Assembly, 233 typeof(HeuristicLab.Parameters.ValueParameter<IItem>).Assembly, 234 typeof(HeuristicLab.Collections.ObservableList<IItem>).Assembly, 235 typeof(System.ComponentModel.INotifyPropertyChanged).Assembly, 236 222 237 }; 223 238 … … 248 263 protected static List<string> DiscoverNamespaces() { 249 264 return new List<string>() { 265 "HeuristicLab.Common", 266 "HeuristicLab.Core", 267 "HeuristicLab.Data", 268 "HeuristicLab.Parameters", 250 269 "System", 251 270 "System.Collections.Generic", … … 253 272 "System.Linq", 254 273 "System.Data.Linq", 255 "HeuristicLab.Common",256 "HeuristicLab.Core",257 "HeuristicLab.Data",258 274 }; 259 275 } … … 356 372 get { 357 373 var sb = new StringBuilder() 358 .Append("public static IOperation Execute(IOperator op, IExecutionContext context"); 374 .Append("public static IOperation Execute(") 375 .Append(TypeNameParser.Parse(typeof(IOperator).FullName).GetTypeNameInCode(namespaces)) 376 .Append(" op, ") 377 .Append(TypeNameParser.Parse(typeof(IExecutionContext).FullName).GetTypeNameInCode(namespaces)) 378 .Append(" context"); 359 379 foreach (IParameter param in Parameters) { 360 sb.Append(String.Format(", {0} {1}", param.DataType.Name, param.Name)); 380 sb.Append(String.Format(", {0} {1}", 381 TypeNameParser.Parse(param.GetType().FullName).GetTypeNameInCode(namespaces), 382 param.Name)); 361 383 } 362 384 return sb.Append(")").ToString(); … … 376 398 method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IExecutionContext), "context")); 377 399 foreach (var param in Parameters) 378 method.Parameters.Add(new CodeParameterDeclarationExpression(param. DataType, param.Name));400 method.Parameters.Add(new CodeParameterDeclarationExpression(param.GetType(), param.Name)); 379 401 string[] codeLines = lineSplitter.Split(code); 380 402 for (int i = 0; i < codeLines.Length; i++) { … … 399 421 400 422 var parameters = new List<object>() { this, ExecutionContext }; 401 parameters.AddRange(Parameters.Select(p => (object)p .ActualValue));423 parameters.AddRange(Parameters.Select(p => (object)p)); 402 424 return (IOperation)executeMethod.Invoke(null, parameters.ToArray()); 403 425 }
Note: See TracChangeset
for help on using the changeset viewer.