Esempio n. 1
0
        /// <summary>
        /// Helper function to create a new instance of the specified type of condition evaluator
        /// </summary>
        /// <param name="evalType"></param>
        /// <returns></returns>
        private IJTXConditionEvaluator CreateEvaluator(string evalType)
        {
            IJTXConditionEvaluator retVal = null;

            IJTXSpatialNotificationManager snManager     = this.WmxDatabase.SpatialNotificationManager;
            IJTXConditionEvaluatorNameSet  allEvaluators = snManager.ConditionEvaluators;

            // Find the type of evaluator specified
            for (int i = 0; i < allEvaluators.Count; i++)
            {
                IJTXConditionEvaluatorName tempEval = allEvaluators.get_Item(i);
                if (tempEval.Name.Equals(evalType))
                {
                    // Once found, create a new instance of this evaluator
                    retVal = snManager.CreateConditionEvaluator(tempEval);
                    break;
                }
            }

            return(retVal);
        }
Esempio n. 2
0
        /// <summary>
        /// Required by IGPFunction2 interface; this function is called when the GP tool is ready to be executed.
        /// </summary>
        /// <param name="paramValues"></param>
        /// <param name="trackCancel"></param>
        /// <param name="envMgr"></param>
        /// <param name="msgs"></param>
        public override void Execute(IArray paramValues, ITrackCancel trackCancel, IGPEnvironmentManager envMgr, IGPMessages msgs)
        {
            // Do some common error-checking
            base.Execute(paramValues, trackCancel, envMgr, msgs);

            try
            {
                // Ensure that the current user has admin access to the current Workflow Manager DB
                if (!CurrentUserIsWmxAdministrator())
                {
                    throw new WmauException(WmauErrorCodes.C_USER_NOT_ADMIN_ERROR);
                }

                IJTXSpatialNotificationManager snManager = this.WmxDatabase.SpatialNotificationManager;

                // Look up the change rule that we'll be modifying
                IJTXChangeRule2 changeRule = GetChangeRuleByName(m_spatialNotification) as IJTXChangeRule2;
                IJTXMultiDatasetConditionEvaluator datasetEvaluator = null;

                // Try to get an existing dataset evaluator if one exists.
                if (m_tryExistingEvaluator)
                {
                    IJTXConditionEvaluatorSet allEvaluators = changeRule.Evaluators;
                    for (int i = 0; i < allEvaluators.Count; i++)
                    {
                        IJTXConditionEvaluator tempEval = allEvaluators.get_Item(i);
                        if (tempEval.Name.Equals(C_TYPE_DATASET_EVALUATOR) && tempEval is IJTXMultiDatasetConditionEvaluator)
                        {
                            datasetEvaluator = tempEval as IJTXMultiDatasetConditionEvaluator;
                            break;
                        }
                    }
                }

                // If we don't have an evaluator at this point, then we need to create one
                if (datasetEvaluator == null)
                {
                    datasetEvaluator = CreateEvaluator(C_TYPE_DATASET_EVALUATOR) as IJTXMultiDatasetConditionEvaluator;
                    datasetEvaluator.DatasetConfigurations = new JTXDatasetConditionConfigurationSetClass();
                    changeRule.Evaluators.Add(datasetEvaluator as IJTXConditionEvaluator);
                }

                // Create a new dataset configuration
                IJTXDatasetConditionConfiguration datasetCondition = new JTXDatasetConditionConfigurationClass();
                datasetCondition.DatabaseID      = m_dataWorkspace;
                datasetCondition.DatasetName     = m_featureClass;
                datasetCondition.ChangeCondition = m_whenToMonitor;
                datasetCondition.WhereConditions = m_whereClauses;
                datasetCondition.ChangeFields    = m_monitorAllColumns ? "*" : m_columns.Replace(';', ',');
                datasetCondition.Name            = this.WmxDatabase.GetDataWorkspaceName(m_dataWorkspace).Name + "/" + m_featureClass;

                // Store the configuration in the dataset evaluator
                datasetEvaluator.DatasetConfigurations.Add(datasetCondition);
                changeRule.Store();

                // Set the output parameter
                WmauParameterMap  paramMap     = new WmauParameterMap(paramValues);
                IGPParameterEdit3 outParamEdit = paramMap.GetParamEdit(C_PARAM_OUT_SPATIAL_NOTIFICATION);
                IGPString         outParamStr  = new GPStringClass();
                outParamStr.Value  = m_spatialNotification;
                outParamEdit.Value = outParamStr as IGPValue;

                msgs.AddMessage(Properties.Resources.MSG_DONE);
            }
            catch (WmauException wmEx)
            {
                try
                {
                    msgs.AddError(wmEx.ErrorCodeAsInt, wmEx.Message);
                }
                catch
                {
                    // Catch anything else that possibly happens
                }
            }
            catch (Exception ex)
            {
                try
                {
                    WmauError error = new WmauError(WmauErrorCodes.C_ADD_DATASET_COND_ERROR);
                    msgs.AddError(error.ErrorCodeAsInt, error.Message + "; " + ex.Message);
                }
                catch
                {
                    // Catch anything else that possibly happens
                }
            }
            finally
            {
                // Release any COM objects here!
            }
        }