Changeset 1684


Ignore:
Timestamp:
Jun 21, 2010, 11:40:22 PM (11 years ago)
Author:
kopal
Message:
  • error messages or warning messages now lead to coloring of the plugins view (currently color stays then) - plugins with error messages will not be executed again in the current run of the chain
  • a plugin now will be executed if all mandatory connectors are set (regardless if other connectors have data)
  • corrected calls of plugin methods (Execute, PreExecution...) according to state diagram of https://www.cryptool.org/trac/CrypTool2/wiki/IPluginHints
  • bug fix in view: PluginContainerView now does not flash between icon and Presentation if it is resized
Location:
trunk/CrypPlugins/WorkspaceManager
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/Execution/ExecutionEngine.cs

    r1680 r1684  
    104104                //By using round-robin we give each protocol to another scheduler to gain
    105105                //a good average load balancing of the schedulers
     106                //we also initalize each plugin
    106107                int counter=0;
    107108                foreach (PluginModel pluginModel in workspaceModel.AllPluginModels)
    108109                {
     110                    pluginModel.Plugin.PreExecution();
    109111                    PluginProtocol pluginProtocol = new PluginProtocol(schedulers[counter], pluginModel,this);
    110112                    pluginModel.PluginProtocol = pluginProtocol;
     
    119121                        msg.PluginModel = pluginModel;
    120122                        pluginProtocol.BroadcastMessageReliably(msg);
    121 
    122123                    }
    123124                }
     
    131132        public void Stop()
    132133        {
     134            //First stop alle plugins
     135            foreach (PluginModel pluginModel in workspaceModel.AllPluginModels)
     136            {
     137                pluginModel.Plugin.Stop();
     138                pluginModel.Plugin.PostExecution();
     139            }           
     140
    133141            IsRunning = false;
    134             //First stop all Gears4Net Schedulers
     142            //Secondly stop all Gears4Net Schedulers
    135143            foreach (Scheduler scheduler in schedulers)
    136144            {
    137145                scheduler.Shutdown();
    138146            }
    139             //Secondly stop alle plugins
    140             foreach(PluginModel pluginModel in workspaceModel.AllPluginModels)
    141             {
    142                 pluginModel.Plugin.Stop();
    143             }           
     147             
    144148        }
    145149
     
    328332        private void HandleExecute(MessageExecution msg)
    329333        {
    330             msg.PluginModel.Plugin.PreExecution();
    331 
     334           
    332335            //executionEngine.GuiLogMessage("HandleExecute for \"" + msg.PluginModel.Name + "\"", NotificationLevel.Debug);
    333336            //Fill the plugins Inputs with data
     
    349352            }
    350353           
    351             msg.PluginModel.Plugin.Execute();
    352 
    353             msg.PluginModel.Plugin.PostExecution();
     354            msg.PluginModel.Plugin.Execute();           
    354355
    355356            if (this.executionEngine.BenchmarkPlugins)
  • trunk/CrypPlugins/WorkspaceManager/Model/PluginModel.cs

    r1681 r1684  
    4343        private IPlugin plugin;         
    4444        private int imageIndex = 0;
    45 
     45        private PluginModelState state = PluginModelState.Normal;
    4646        #endregion privates
     47
     48        /// <summary>
     49        /// State of the Plugin
     50        /// </summary>
     51       
     52        public PluginModelState State {
     53            get { return state; }
     54            set { state = value; }
     55        }
    4756
    4857        /// <summary>
     
    243252        /// </summary>
    244253        public void checkExecutable(ProtocolBase protocolBase)
    245         {                           
     254        {
     255            //We do not execute Plugins with Errors
     256            if (this.State == PluginModelState.Error)
     257            {
     258                return;
     259            }
     260
    246261            bool AtLeastOneInputSet = false;
    247262            //First test if every mandatory Connector has data
     
    249264            foreach (ConnectorModel connectorModel in this.InputConnectors)
    250265            {
    251                 if ((connectorModel.IsMandatory || connectorModel.InputConnection != null) && !connectorModel.HasData)
     266                if ((connectorModel.IsMandatory /*|| connectorModel.InputConnection != null*/) && !connectorModel.HasData)
    252267                {
    253268                    return;
     
    322337        }
    323338    }
     339
     340    public enum PluginModelState{
     341        Normal,
     342        Warning,
     343        Error
     344    }
    324345}
  • trunk/CrypPlugins/WorkspaceManager/Model/WorkspaceModel.cs

    r1681 r1684  
    213213        public void resetStates()
    214214        {
     215            foreach (PluginModel pluginModel in this.AllPluginModels)
     216            {
     217                pluginModel.State = PluginModelState.Normal;
     218            }
    215219            foreach (ConnectionModel connection in this.AllConnectionModels)
    216220            {
  • trunk/CrypPlugins/WorkspaceManager/View/Container/PluginContainerView.xaml.cs

    r1640 r1684  
    211211        public void update()
    212212        {
     213            //Color the view corresponding to warning or error state
     214            if (model.State == PluginModelState.Warning)
     215            {
     216                this.Window.Background = new SolidColorBrush(Colors.Yellow);
     217            }
     218            else if (model.State == PluginModelState.Error)
     219            {
     220                this.Window.Background = new SolidColorBrush(Colors.Red);
     221            }
     222            else
     223            {
     224                //todo: assign old color and appereance
     225            }
     226
    213227            ProgressBar.Value = model.PercentageFinished;
    214228            if (model.PluginPresentation == null)
     
    253267                PresentationPanel.Children.Add(model.PluginPresentation);
    254268            }
    255             else if(PresentationPanel.Children.Contains(model.PluginPresentation))
     269            else if(!PresentationPanel.Children.Contains(model.PluginPresentation))
    256270            {
    257271                PresentationPanel.Children.Clear();
  • trunk/CrypPlugins/WorkspaceManager/WorkspaceManager.cs

    r1681 r1684  
    3535using System.Threading;
    3636using System.Windows.Controls;
     37using System.Windows.Media;
    3738
    3839//Disable warnings for unused or unassigned fields and events:
     
    368369                {
    369370                    ExecutionEngine.GuiUpdateInterval = long.Parse(((WorkspaceManagerSettings)this.Settings).GuiUpdateInterval);
     371                    if (ExecutionEngine.GuiUpdateInterval <= 0)
     372                    {
     373                        GuiLogMessage("GuiUpdateInterval can not be <=0; Use GuiUpdateInterval = 1", NotificationLevel.Warning);
     374                        ExecutionEngine.GuiUpdateInterval = 1;
     375                    }
    370376                }
    371377                catch (Exception ex)
     
    503509        public void GuiLogNotificationOccured(IPlugin sender, GuiLogEventArgs args)
    504510        {
     511            //Check if the logging event is Warning or Error and set the State of the PluginModel to
     512            //the corresponding PluginModelState
     513            if (args.NotificationLevel == NotificationLevel.Warning)
     514            {               
     515                foreach (PluginModel pluginModel in this.WorkspaceModel.AllPluginModels)
     516                {
     517                    if (pluginModel.Plugin == sender)
     518                    {
     519                        pluginModel.State = PluginModelState.Warning;
     520                        pluginModel.GuiNeedsUpdate = true;
     521                    }
     522                }
     523            }
     524
     525            if (args.NotificationLevel == NotificationLevel.Error)
     526            {               
     527                foreach (PluginModel pluginModel in this.WorkspaceModel.AllPluginModels)
     528                {
     529                    if (pluginModel.Plugin == sender)
     530                    {
     531                        pluginModel.State = PluginModelState.Error;
     532                        pluginModel.GuiNeedsUpdate = true;
     533                    }
     534                }
     535            }
     536           
    505537            if (OnGuiLogNotificationOccured != null)
    506538                OnGuiLogNotificationOccured(sender, args);
Note: See TracChangeset for help on using the changeset viewer.