public TaskOutputEditorForm(OutputCollection outputs)
        {
            Text = "Task Outputs";
            InitializeComponent();
            this.outputs       = outputs ?? new OutputCollection();
            buttAdd.Visible    = true;
            buttDelete.Visible = true;
            if (outputs != null)
            {
                foreach (var o in outputs)
                {
                    cmboOutputs.Items.Add(o.Key);
                }
            }
            cmboVariables.Items.Add(new KeyValuePair <string, VariableObj>("(none)", null));
            if (Model.Workflow.Variables != null)
            {
                foreach (var variable in Model.Workflow.Variables.Where(v => !v.Key.StartsWith("_")))
                {
                    cmboVariables.Items.Add(variable);
                }
            }
            cmboType.DataSource = DataType.AllTypes;
            if (cmboOutputs.Items.Count > 0)
            {
                cmboOutputs.SelectedIndex = 0;
            }

            OutputChanged(null, EventArgs.Empty);
        }
Example #2
0
 public IOutputDevice CreateDevice(Guid deviceId, Guid moduleId, Guid moduleInstanceId, string name)
 {
     IHasOutputs<IntentOutput> outputs = new OutputCollection<IntentOutput>();
     IModuleDataRetriever dataRetriever = new ModuleInstanceDataRetriever(VixenSystem.ModuleStore.InstanceData);
     IOutputModuleConsumer<ISmartControllerModuleInstance> outputModuleConsumer =
         new OutputModuleConsumer<ISmartControllerModuleInstance>(moduleId, moduleInstanceId, dataRetriever);
     IOutputMediator<IntentOutput> outputMediator = new OutputMediator<IntentOutput>(outputs, outputModuleConsumer.Module);
     IHardware executionControl = new BasicOutputModuleExecutionControl(outputModuleConsumer.Module);
     return new SmartOutputController(deviceId, name, outputMediator, executionControl, outputModuleConsumer);
 }
Example #3
0
        public SmartFilterAdapter(
            InputCollectionWrapper <T> input,
            LinqContinuousCollection <T> output,
            Expression <Func <T, bool> > predicateExpr) :
            base(input,
                 output,
                 ExpressionPropertyAnalyzer.GetReferencedPropertyNames(predicateExpr)[typeof(T)])
        {
            _predicate = predicateExpr.Compile();

            foreach (T item in input.InnerAsList)
            {
                if (_predicate(item))
                {
                    OutputCollection.Add(item);
                }
            }
        }
Example #4
0
 public DataModel(MainWindow mainWindow)
 {
     MainWindow = mainWindow;
     ServerList = new ServerList();
     ServerSession = new ServerSession(this);
     ServerStatus = new ServerStatus(this);
     Database = new Database(this);
     QuickSearch = new QuickSearch(this);
     AdvancedSearch = new AdvancedSearch(this);
     DatabaseView = new DatabaseView(this);
     StreamsCollection = new StreamsCollection();
     SavedPlaylists = new SavedPlaylists(this);
     CurrentSong = new CurrentSong(this);
     Playlist = new Playlist(this);
     OutputCollection = new OutputCollection(this);
     CustomDateNormalizer = new DateNormalizer();
     CustomDateNormalizer.ReadFromSettings();
     YearNormalizer = new DateNormalizer(new string[] {"YYYY"});
 }
Example #5
0
 public DataModel(MainWindow mainWindow)
 {
     MainWindow           = mainWindow;
     NetworkLog           = null;
     ServerList           = new ServerList();
     ServerSession        = new ServerSession(this);
     ServerStatus         = new ServerStatus(this);
     Database             = new Database(this);
     QuickSearch          = new QuickSearch(this);
     AdvancedSearch       = new AdvancedSearch(this);
     DatabaseView         = new DatabaseView(this);
     StreamsCollection    = new StreamsCollection();
     SavedPlaylists       = new SavedPlaylists(this);
     CurrentSong          = new CurrentSong(this);
     Playlist             = new Playlist(this);
     OutputCollection     = new OutputCollection(this);
     CustomDateNormalizer = new DateNormalizer();
     CustomDateNormalizer.ReadFromSettings();
     YearNormalizer = new DateNormalizer(new string[] { "YYYY" });
 }
Example #6
0
        /// <summary>
        /// Gets the Output Collection for this class
        /// </summary>
        /// <param name="alphabetize">If set to <c>true</c> alphabetize.</param>
        public void GetOutputCollection(bool alphabetize)
        {
            if (alphabetize)
            {
                this.OutputCollection = StringHelper.UnboxParenthesis(this.InputString).OrderBy(o => o).ToList();
            }

            string dash = string.Empty;

            while (OutputCollection.Where(o => o.Contains("(")).Any())
            {
                dash = dash + "-";
                string straggler = OutputCollection.FirstOrDefault(o => o.Contains("("));
                int    index     = OutputCollection.FindIndex(o => o.Contains("("));
                if (straggler != null)
                {
                    string keeper     = StringHelper.GetLeader(straggler);
                    string collection = StringHelper.GetNestedString(straggler);
                    OutputCollection[index] = keeper;
                    GetNestedArray(index, collection, dash, alphabetize);
                }
            }
        }
Example #7
0
        private IEnumerable<Output> DoInject(
            string assemblyFile,
            string typeName,
            string methodName,
            string strongNameKeyPair,
            string[] assemblySearchDirs)
        {
            OutputCollection outputCollection = new OutputCollection();
            try
            {
                if (String.IsNullOrWhiteSpace(assemblyFile))
                {
                    outputCollection.Add(OutputImportance.Error, "Must specify a valid assembly.");
                    return outputCollection;
                }

                if (String.IsNullOrWhiteSpace(typeName))
                    typeName = "ModuleInitializer";
                if (String.IsNullOrWhiteSpace(methodName))
                    methodName = "Initialize";

                StrongNameKeyPair snkpair;
                if (!String.IsNullOrWhiteSpace(strongNameKeyPair))
                {
                    if (!File.Exists(strongNameKeyPair))
                    {
                        outputCollection.Add(
                            OutputImportance.Error,
                            "The '{0}' strong name keypair was not found.",
                            strongNameKeyPair);
                        return outputCollection;
                    }

                    // Accessing public key requires UnmanagedCode security permission.
                    try
                    {
                        SecurityPermission sp = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
                        sp.Demand();
                    }
                    catch (Exception e)
                    {
                        outputCollection.Add(
                            OutputImportance.Error,
                            "Could not instrument '{0}' as cannot resign assembly, UnmanagedCode security permission denied.",
                            strongNameKeyPair,
                            e.Message);
                        return outputCollection;
                    }

                    try
                    {
                        /*
                         * Turns out that if we get the strong name key pair directly using the StrongNameKeyPair(string filename)
                         * constructor overload, then retrieving the public key fails due to file permissions.
                         * Opening the filestream ourselves with read access, and reading the snk that way works, and allows
                         * us to successfully resign (who knew?).
                         */
                        using (FileStream fs = new FileStream(strongNameKeyPair, FileMode.Open, FileAccess.Read))
                            snkpair = new StrongNameKeyPair(fs);

                        // Ensure we can access public key - this will be done by mono later so check works now.
                        // ReSharper disable once UnusedVariable
                        byte[] publicKey = snkpair.PublicKey;
                    }
                    catch (Exception e)
                    {
                        outputCollection.Add(
                            OutputImportance.Error,
                            "Error occurred whilst accessing public key from '{0}' strong name keypair. {1}",
                            strongNameKeyPair,
                            e.Message);
                        return outputCollection;
                    }
                }
                else
                    // No resigning necessary.
                    snkpair = null;

                if (!File.Exists(assemblyFile))
                {
                    outputCollection.Add(OutputImportance.Error, "The '{0}' assembly was not found.", assemblyFile);
                    return outputCollection;
                }

                // Look for PDB file.
                string pdbFile = Path.ChangeExtension(assemblyFile, ".pdb");

                // Create resolver for assemblies
                DefaultAssemblyResolver asmResolver = new DefaultAssemblyResolver();

                // Add the search directories to the resolver
                string assemblyDir = Path.GetDirectoryName(Path.GetFullPath(assemblyFile));
                asmResolver.AddSearchDirectory(Path.GetFullPath(assemblyDir));
                foreach (string dir in assemblySearchDirs.Select(Path.GetFullPath).Distinct())
                    if (!string.Equals(dir, assemblyDir))
                        asmResolver.AddSearchDirectory(dir);

                // Read the assembly definition
                ReaderParameters readParams = new ReaderParameters(ReadingMode.Immediate);
                readParams.AssemblyResolver = asmResolver;
                bool hasPdb = false;
                if (File.Exists(pdbFile))
                {
                    readParams.ReadSymbols = true;
                    readParams.SymbolReaderProvider = new PdbReaderProvider();
                    hasPdb = true;
                }
                AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(assemblyFile, readParams);
                if (assembly == null)
                {
                    outputCollection.Add(
                        OutputImportance.Error,
                        "Failed to load assembly definition for '{0}'.",
                        assemblyFile);
                    return outputCollection;
                }

                // Find the main module.
                ModuleDefinition module = assembly.MainModule;
                if (module == null)
                {
                    outputCollection.Add(
                        OutputImportance.Error,
                        "Failed to load main module definition from assembly '{0}'.",
                        assemblyFile);
                    return outputCollection;
                }

                if (module.Types == null)
                {
                    outputCollection.Add(
                        OutputImportance.Error,
                        "Failed to load main module types from assembly '{0}'.",
                        assemblyFile);
                    return outputCollection;
                }

                // Find the <Module> type definition
                // ReSharper disable once PossibleNullReferenceException
                TypeDefinition moduleType = module.Types.SingleOrDefault(t => t.Name == "<Module>");
                if (moduleType == null)
                {
                    outputCollection.Add(
                        OutputImportance.Error,
                        "Could not find type '<Module>' in assembly '{0}'.",
                        assemblyFile);
                    return outputCollection;
                }

                // Find void type
                // ReSharper disable once PossibleNullReferenceException
                TypeReference voidRef = module.TypeSystem.Void;
                if (voidRef == null)
                {
                    outputCollection.Add(
                        OutputImportance.Error,
                        "Could not find type 'void' in assembly '{0}'.",
                        assemblyFile);
                    return outputCollection;
                }

                // Find the type definition
                // ReSharper disable once PossibleNullReferenceException
                TypeDefinition typeDefinition = module.Types.SingleOrDefault(t => t.Name == typeName);

                if (typeDefinition == null)
                {
                    outputCollection.Add(
                        OutputImportance.Warning,
                        "Could not find type '{0}' in assembly '{1}'.",
                        typeName,
                        assemblyFile);
                    return outputCollection;
                }

                // Find the method
                MethodDefinition callee = typeDefinition.Methods != null
                    ? typeDefinition.Methods.FirstOrDefault(
                    // ReSharper disable PossibleNullReferenceException
                        m => m.Name == methodName && m.Parameters.Count == 0)
                    // ReSharper restore PossibleNullReferenceException
                    : null;

                if (callee == null)
                {
                    outputCollection.Add(
                        OutputImportance.Warning,
                        "Could not find method '{0}' with no parameters in type '{1}' in assembly '{2}'.",
                        methodName,
                        typeName,
                        assemblyFile);
                    return outputCollection;
                }

                if (callee.IsPrivate)
                {
                    outputCollection.Add(
                        OutputImportance.Error,
                        "Method '{0}' in type '{1}' in assembly '{2}' cannot be private as it can't be accessed by the Module Initializer.",
                        methodName,
                        typeName,
                        assemblyFile);
                    return outputCollection;
                }

                if (!callee.IsStatic)
                {
                    outputCollection.Add(
                        OutputImportance.Error,
                        "Method '{0}' in type '{1}' in assembly '{2}' cannot be an instance method as it can't be instantiated by the Module Initializer.",
                        methodName,
                        typeName,
                        assemblyFile);
                    return outputCollection;
                }


                outputCollection.Add(
                    OutputImportance.MessageHigh,
                    "Method '{0}' in type '{1}' in assembly '{2}' will be called during Module initialization.",
                    methodName,
                    typeName,
                    assemblyFile);

                // Create the module initializer.
                MethodDefinition cctor = new MethodDefinition(
                    ".cctor",
                    MethodAttributes.Static
                    | MethodAttributes.SpecialName
                    | MethodAttributes.RTSpecialName,
                    voidRef);
                // ReSharper disable PossibleNullReferenceException
                ILProcessor il = cctor.Body.GetILProcessor();
                il.Append(il.Create(OpCodes.Call, callee));
                il.Append(il.Create(OpCodes.Ret));
                moduleType.Methods.Add(cctor);
                // ReSharper restore PossibleNullReferenceException

                WriterParameters writeParams = new WriterParameters();
                if (hasPdb)
                {
                    writeParams.WriteSymbols = true;
                    writeParams.SymbolWriterProvider = new PdbWriterProvider();
                }
                if (snkpair != null)
                {
                    writeParams.StrongNameKeyPair = snkpair;
                    outputCollection.Add(
                        OutputImportance.MessageHigh,
                        "Assembly '{0}' is being resigned by '{1}'.",
                        assemblyFile,
                        strongNameKeyPair);
                }
                else
                {
                    outputCollection.Add(
                        OutputImportance.MessageHigh,
                        "Assembly '{0}' will not be resigned.",
                        assemblyFile);
                }

                assembly.Write(assemblyFile, writeParams);
                return outputCollection;
            }
            catch (Exception ex)
            {
                outputCollection.Add(OutputImportance.Error, "An unexpected error occurred. {0}", ex.Message);
                return outputCollection;
            }
        }