Пример #1
0
        /// <summary>
        /// Builds a domain consisting of the IDs of every job in the database that
        /// has not already been closed.
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildNonClosedJobIdDomain(IJTXDatabase3 wmxDb)
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            // Set up a query filter to return only those jobs that are not closed
            IQueryFilter queryFilter = new QueryFilterClass();

            queryFilter.WhereClause =
                ESRI.ArcGIS.JTX.Utilities.Constants.FIELD_STAGE + " <> '" +
                ((int)jtxJobStage.jtxJobStageClosed).ToString() + "'";

            IJTXJobSet nonClosedJobs = wmxDb.JobManager.GetJobsByQuery(queryFilter);

            // Iterate through this job list, sorting the IDs
            SortedList <int, string> sortedJobIds = new SortedList <int, string>();

            for (int i = 0; i < nonClosedJobs.Count; i++)
            {
                IJTXJob3 job = nonClosedJobs.get_Item(i) as IJTXJob3;
                sortedJobIds[job.ID] = null;
            }

            // Build a GP domain from the sorted job IDs.
            foreach (int id in sortedJobIds.Keys)
            {
                IGPValue tempGpVal = new GPLongClass();
                tempGpVal.SetAsText(id.ToString());
                domain.AddCode(tempGpVal, id.ToString());
            }

            return(domain as IGPDomain);
        }
Пример #2
0
        /// <summary>
        /// Builds a domain of the priority strings in the system
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildPriorityDomain(IJTXDatabase3 wmxDb)
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            // Sort the types first
            IJTXPrioritySet          allValues    = wmxDb.ConfigurationManager.Priorities;
            SortedList <int, string> sortedValues = new SortedList <int, string>();

            for (int i = 0; i < allValues.Count; i++)
            {
                IJTXPriority temp = allValues.get_Item(i);
                sortedValues.Add(temp.Value, temp.Name);
            }

            // Since the highest priority elements are those with the largest number,
            // reverse the order of the list so that these priorities show up first
            IEnumerable <string> valueList = sortedValues.Values.Reverse();

            // Add the sorted types to the domain
            foreach (string value in valueList)
            {
                IGPValue tempGpVal = new GPStringClass();
                tempGpVal.SetAsText(value);
                domain.AddCode(tempGpVal, value);
            }

            return(domain as IGPDomain);
        }
Пример #3
0
        /// <summary>
        /// Helper function to set up a GP tool parameter so that the workflow manager
        /// database can be chosen.
        /// </summary>
        /// <returns>A parameter for selecting the target WMX DB</returns>
        protected IGPParameter3 BuildWmxDbParameter()
        {
            IGPParameterEdit    paramEdit = null;
            IGPCodedValueDomain cvDomain  = new GPCodedValueDomainClass();

            // When we first build out the parameter list, ensure that we indicate
            // what the current Workflow Manager database is
            m_wmxDbAlias = string.Empty;
            IsWorkflowManagerDatabaseSet();

            // Parameter allowing specification of the Workflow Manager database
            IGPString strVal = new GPStringClass();

            strVal.Value = m_wmxDbAlias;
            paramEdit    = BuildParameter(
                esriGPParameterDirection.esriGPParameterDirectionInput,
                esriGPParameterType.esriGPParameterTypeOptional,
                Properties.Resources.DESC_COM_WMX_DATABASE,
                C_PARAM_WMX_DATABASE_ALIAS,
                (strVal as IGPValue).DataType,
                strVal as IGPValue);

            IJTXDatabaseConnectionManager connMgr = new JTXDatabaseConnectionManagerClass();

            foreach (string alias in connMgr.DatabaseNames)
            {
                cvDomain.AddStringCode(alias, alias);
            }
            paramEdit.Domain = cvDomain as IGPDomain;

            return(paramEdit as IGPParameter3);
        }
        /// <summary>
        /// Builds a domain consisting of the Workflow Manager privileges
        /// </summary>
        /// <returns>A coded value domain of strings</returns>
        private IGPDomain BuildPrivilegesDomain()
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            // Sort the types first
            SortedList <string, string> sortedValues = new SortedList <string, string>();
            IJTXPrivilegeSet            privileges   = this.WmxDatabase.ConfigurationManager.Privileges;

            for (int i = 0; i < privileges.Count; i++)
            {
                IJTXPrivilege2 priv = privileges.get_Item(i) as IJTXPrivilege2;
                sortedValues.Add(priv.Name, null);
            }

            // Add the "all privileges" option to the list
            sortedValues.Add(C_OPT_ALL_PRIVILEGES, null);

            // Add the sorted types to the domain
            foreach (string value in sortedValues.Keys)
            {
                IGPValue tempGpVal = new GPStringClass();
                tempGpVal.SetAsText(value);
                domain.AddCode(tempGpVal, value);
            }

            return(domain as IGPDomain);
        }
Пример #5
0
        /// <summary>
        /// Builds a domain consisting of all the usernames in the system
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <param name="extraValues">An array of string values to be added to the list</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildUsersDomain(IJTXDatabase3 wmxDb, string[] extraValues)
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            // Sort the types first
            IJTXUserSet allValues = wmxDb.ConfigurationManager.Users;
            SortedList <string, string> sortedValues = new SortedList <string, string>();

            for (int i = 0; i < allValues.Count; i++)
            {
                sortedValues.Add(allValues.get_Item(i).UserName, null);
            }

            // Add the extra values, if any
            if (extraValues != null)
            {
                foreach (string s in extraValues)
                {
                    sortedValues.Add(s, null);
                }
            }

            // Add the sorted types to the domain
            foreach (string value in sortedValues.Keys)
            {
                IGPValue tempGpVal = new GPStringClass();
                tempGpVal.SetAsText(value);
                domain.AddCode(tempGpVal, value);
            }

            return(domain as IGPDomain);
        }
Пример #6
0
        /// <summary>
        ///     Creates the a coded value domain an assigns it to the parameter.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="name">
        ///     The name is the language-independent name for the parameter (not localized) and must not contain
        ///     spaces and must be unique within a function.
        /// </param>
        /// <param name="displayName">
        ///     The display name is the localized name (as it appears in the dialog) and is contained in
        ///     resource string.
        /// </param>
        /// <param name="parameterType">Type of the parameter.</param>
        /// <param name="parameterDirection">The parameter direction.</param>
        /// <param name="values">The values (strings) for the domain.</param>
        /// <param name="names">The names (strings) for the domain.</param>
        /// <param name="dataType">Type of the data.</param>
        /// <returns>
        ///     Returns a <see cref="IGPParameterEdit3" /> representing the parameter.
        /// </returns>
        /// <exception cref="System.ArgumentNullException">
        ///     values
        ///     or
        ///     names
        /// </exception>
        /// <exception cref="System.ArgumentOutOfRangeException">
        ///     values;The values and names arrays must contain the same number of
        ///     elements.
        /// </exception>
        public static IGPParameterEdit3 CreateParameter(this IGPFunction source, string name, string displayName, esriGPParameterType parameterType, esriGPParameterDirection parameterDirection, object[] values, object[] names, IGPDataType dataType)
        {
            if (values == null)
            {
                throw new ArgumentNullException("values");
            }

            if (names == null)
            {
                throw new ArgumentNullException("names");
            }

            if (values.Length != names.Length)
            {
                throw new ArgumentOutOfRangeException("values", "The values and names arrays must contain the same number of elements.");
            }

            IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();

            for (int i = 0; i < values.Length; i++)
            {
                codedValueDomain.AddStringCode(values[i].ToString(), names[i].ToString());
            }

            var parameter = source.CreateParameter(name, displayName, parameterType, parameterDirection, dataType);

            parameter.Domain = codedValueDomain as IGPDomain;
            return(parameter);
        }
Пример #7
0
        /// <summary>
        ///     Gets the coded value domain using fields from the specified <paramref name="table" />
        /// </summary>
        /// <param name="table">The table.</param>
        /// <returns>
        ///     Returns a <see cref="IGPDomain" /> representing the coded value domain.
        /// </returns>
        protected IGPDomain GetFields(IObjectClass table)
        {
            IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();

            foreach (var o in table.Fields.AsEnumerable())
            {
                codedValueDomain.AddStringCode(o.Name, o.Name);
            }

            return((IGPDomain)codedValueDomain);
        }
Пример #8
0
        /// <summary>
        /// Gets the coded value domain.
        /// </summary>
        /// <param name="names">The names.</param>
        /// <param name="values">The values.</param>
        /// <returns>
        /// Returns a <see cref="IGPDomain" /> representing the coded value domain.
        /// </returns>
        protected IGPDomain CreateDomain(string[] names, string[] values)
        {
            IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();

            for (int i = 0; i < values.Length; i++)
            {
                codedValueDomain.AddStringCode(values[i], names[i]);
            }

            return((IGPDomain)codedValueDomain);
        }
Пример #9
0
        /// <summary>
        /// Set up a coded value domain with the supported geometric operations for area
        /// evaluators
        /// </summary>
        /// <returns></returns>
        private IGPDomain BuildChangeConditionsDomain()
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            foreach (string s in m_optChangeConditions.Keys)
            {
                domain.AddStringCode(s, s);
            }

            return(domain as IGPDomain);
        }
Пример #10
0
        /// <summary>
        /// Gets the components from the registry that satisfy the predicate and selector.
        /// </summary>
        /// <typeparam name="TValue">The type of the value.</typeparam>
        /// <param name="components">The components.</param>
        /// <returns>
        /// Returns a <see cref="IGPDomain" /> representing the coded value domain.
        /// </returns>
        protected IGPDomain CreateDomain <TValue>(IEnumerable <GPAutoValue <TValue> > components)
        {
            IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();

            foreach (var o in components)
            {
                codedValueDomain.AddCode(o, o.Name);
            }

            return((IGPDomain)codedValueDomain);
        }
Пример #11
0
        /// <summary>
        /// Set up a coded value domain with the supported geometric operations for area
        /// evaluators
        /// </summary>
        /// <returns></returns>
        private IGPDomain BuildGeometricOperationsDomain()
        {
            IGPCodedValueDomain geomOpDomain = new GPCodedValueDomainClass();

            foreach (string s in m_geometricOperations.Keys)
            {
                geomOpDomain.AddStringCode(s, s);
            }

            return(geomOpDomain as IGPDomain);
        }
Пример #12
0
        /// <summary>
        ///     Creates the variant domain by instantiating the objects from the <see cref="IUID" /> an placing them into a
        ///     <see cref="IGPString" /> value for the domain.
        /// </summary>
        /// <typeparam name="TValue">The type of the value.</typeparam>
        /// <param name="uids">The uids that will be created.</param>
        /// <returns>
        ///     Returns a <see cref="IGPDomain" /> representing the coded value domain.
        /// </returns>
        protected IGPDomain CreateDomain <TValue>(IEnumerable <IUID> uids)
        {
            IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();

            foreach (var uid in uids)
            {
                GPAutoValue <TValue> value = new GPAutoValue <TValue>(uid);
                codedValueDomain.AddCode(value, value.Name);
            }

            return((IGPDomain)codedValueDomain);
        }
Пример #13
0
        /// <summary>
        ///     Gets the components from the registry that satisfy the predicate and selector.
        /// </summary>
        /// <typeparam name="TValue">The type of the value.</typeparam>
        /// <param name="components">The components.</param>
        /// <param name="predicate">The predicate.</param>
        /// <returns>
        ///     Returns a <see cref="IGPDomain" /> representing the coded value domain.
        /// </returns>
        protected IGPDomain CreateDomain <TValue>(IEnumerable <GPAutoValue <TValue> > components, Func <TValue, bool> predicate)
        {
            IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();

            foreach (var o in components)
            {
                if (o.Value != null && predicate(o.Value))
                {
                    codedValueDomain.AddCode(o, o.Name);
                }
            }

            return((IGPDomain)codedValueDomain);
        }
Пример #14
0
        /// <summary>
        /// Builds a domain consisting of the IDs for every job in the database.
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildJobIdDomain(IJTXDatabase3 wmxDb)
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            int[] allJobs = wmxDb.JobManager.GetAllJobIDs();
            System.Array.Sort(allJobs);
            foreach (int job in allJobs)
            {
                IGPValue tempGpVal = new GPLongClass();
                tempGpVal.SetAsText(job.ToString());
                domain.AddCode(tempGpVal, job.ToString());
            }

            return(domain as IGPDomain);
        }
Пример #15
0
        /// <summary>
        /// Builds a domain of the version names for a workspace
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <param name="workspaceName">The human-readable name of the workspace whose versions to look up</param>
        /// <param name="extraValues">An array of string values to be added to the list</param>
        /// <returns>A coded value domain of strings</returns>
        public static IGPDomain BuildVersionsDomain(IJTXDatabase3 wmxDb, string workspaceName, string[] extraValues)
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            try
            {
                // Get all of the public versions connected to this workspace
                string               workspaceId        = Common.WmauHelperFunctions.LookupWorkspaceId(wmxDb, workspaceName);
                IWorkspace           workspace          = wmxDb.GetDataWorkspace(workspaceId, null);
                IVersionedWorkspace3 versionedWorkspace = workspace as IVersionedWorkspace3;
                IEnumVersionInfo     allValues          = versionedWorkspace.Versions;

                // Sort the types first
                SortedList <string, string> sortedValues = new SortedList <string, string>();
                IVersionInfo version;
                while ((version = allValues.Next()) != null)
                {
                    sortedValues.Add(version.VersionName, null);
                }

                // Add the extra values, if any
                if (extraValues != null)
                {
                    foreach (string s in extraValues)
                    {
                        sortedValues.Add(s, null);
                    }
                }

                // Add the sorted types to the domain
                foreach (string value in sortedValues.Keys)
                {
                    IGPValue tempGpVal = new GPStringClass();
                    tempGpVal.SetAsText(value);
                    domain.AddCode(tempGpVal, value);
                }
            }
            catch (System.Runtime.InteropServices.COMException comEx)
            {
                // If we run into an exception, send word up the chain
                throw new WmauException(WmauErrorCodes.C_VERSION_LOOKUP_ERROR, comEx);
            }

            return(domain as IGPDomain);
        }
Пример #16
0
        /// <summary>
        ///     Gets the coded value domain that contains all of the subtypes for the table.
        /// </summary>
        /// <param name="table">The table.</param>
        /// <returns>
        ///     Returns a <see cref="IGPDomain" /> representing the coded value domain.
        /// </returns>
        protected IGPDomain GetSubtypes(IObjectClass table)
        {
            // Create a domain of all the subtypes.
            IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();

            codedValueDomain.AddStringCode("-1", "All");

            ISubtypes subtypes = (ISubtypes)table;

            if (subtypes.HasSubtype)
            {
                foreach (var o in subtypes.Subtypes.AsEnumerable())
                {
                    codedValueDomain.AddStringCode(o.Key.ToString(CultureInfo.InvariantCulture), o.Value);
                }
            }

            return(codedValueDomain as IGPDomain);
        }
Пример #17
0
        /// <summary>
        /// Builds a domain consisting of the available job queries in the system.
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildJobQueryDomain(IJTXDatabase3 wmxDb)
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            IJTXConfiguration3    configMgr = wmxDb.ConfigurationManager as IJTXConfiguration3;
            IJTXJobQueryContainer publicQueriesContainer = configMgr.GetPublicQueryContainer();

            // Sort the queries first
            SortedList <string, string> sortedValues = new SortedList <string, string>();

            WmauGpDomainBuilder.AddQueriesFromContainer(publicQueriesContainer, string.Empty, sortedValues);

            // Add the sorted types to the domain
            foreach (string value in sortedValues.Keys)
            {
                domain.AddStringCode(value, value);
            }

            return(domain as IGPDomain);
        }
Пример #18
0
        /// <summary>
        ///     Pre validates the given set of values.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <param name="environmentManager">Provides access to all the current environments and settings of the current client.</param>
        /// <param name="utilities">
        ///     The utilities object that provides access to the properties and methods of a geoprocessing
        ///     objects.
        /// </param>
        protected override void UpdateParameters(Dictionary <string, IGPParameter> parameters, IGPEnvironmentManager environmentManager, IGPUtilities2 utilities)
        {
            // Retrieve the input parameter value.
            IGPValue table = utilities.UnpackGPValue(parameters["in_table"]);

            if (!table.IsEmpty())
            {
                // Create the domain based on the fields on the table.
                IObjectClass oclass = utilities.OpenTable(table);
                if (oclass != null)
                {
                    IFields fields = oclass.Fields;
                    if (fields != null)
                    {
                        IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();
                        foreach (var o in fields.AsEnumerable())
                        {
                            codedValueDomain.AddStringCode(o.Name, o.Name);
                        }

                        IGPParameterEdit3 derivedFields = (IGPParameterEdit3)parameters["in_field"];
                        derivedFields.Domain = (IGPDomain)codedValueDomain;
                    }

                    IGPValue field = utilities.UnpackGPValue(parameters["in_field"]);
                    if (!field.IsEmpty())
                    {
                        int index = oclass.FindField(field.GetAsText());

                        IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();
                        foreach (var o in oclass.GetFieldModelNames(oclass.Fields.Field[index]))
                        {
                            codedValueDomain.AddStringCode(o, o);
                        }

                        IGPParameterEdit3 derivedParameter = (IGPParameterEdit3)parameters["in_field_model_names"];
                        derivedParameter.Domain = (IGPDomain)codedValueDomain;
                    }
                }
            }
        }
Пример #19
0
        /// <summary>
        /// Builds a domain containing the names of all the map documents embedded
        /// in the database
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildMapDocumentDomain(IJTXDatabase3 wmxDb)
        {
            IGPCodedValueDomain         mxdNames         = new GPCodedValueDomainClass();
            SortedList <string, string> mapDocumentNames = new SortedList <string, string>();

            IJTXConfiguration3 configMgr = wmxDb.ConfigurationManager as IJTXConfiguration3;
            IJTXMapSet         maps      = configMgr.JTXMaps;

            for (int i = 0; i < maps.Count; i++)
            {
                IJTXMap map = maps.get_Item(i);
                mapDocumentNames.Add(map.Name, null);
            }

            foreach (string mapDocName in mapDocumentNames.Keys)
            {
                mxdNames.AddStringCode(mapDocName, mapDocName);
            }

            return(mxdNames as IGPDomain);
        }
Пример #20
0
        /// <summary>
        /// Builds a domain containing the names of all the task assistant
        /// workbooks embedded in the database
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildTamWorkbookDomain(IJTXDatabase3 wmxDb)
        {
            IGPCodedValueDomain         tamNames       = new GPCodedValueDomainClass();
            SortedList <string, string> sortedTamNames = new SortedList <string, string>();

            IJTXConfiguration3 configMgr = wmxDb.ConfigurationManager as IJTXConfiguration3;
            IJTXTaskAssistantWorkflowRecordSet tamWorkbooks = configMgr.TaskAssistantWorkflowRecords;

            for (int i = 0; i < tamWorkbooks.Count; i++)
            {
                IJTXTaskAssistantWorkflowRecord tamWorkbook = tamWorkbooks.get_Item(i);
                sortedTamNames.Add(tamWorkbook.Alias, null);
            }

            foreach (string tamName in sortedTamNames.Keys)
            {
                tamNames.AddStringCode(tamName, tamName);
            }

            return(tamNames as IGPDomain);
        }
Пример #21
0
        /// <summary>
        /// Builds a domain of the data workspace names in the system
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <param name="extraValues">An array of string values to be added to the list</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildWorkspaceDomain(IJTXDatabase3 wmxDb, string[] extraValues)
        {
            IGPCodedValueDomain         domain       = new GPCodedValueDomainClass();
            SortedList <string, string> sortedValues = new SortedList <string, string>();

            // Workflow Manager intentionally caches the data workspaces in the system.  To ensure
            // that we have the most current list of data workspaces, invalidate this cache
            // before attempting to retrieve the list from the system.
            wmxDb.InvalidateDataWorkspaceNames();

            // Sort the types first
            IJTXDataWorkspaceNameSet allValues = wmxDb.GetDataWorkspaceNames(null);

            for (int i = 0; i < allValues.Count; i++)
            {
                IJTXDataWorkspaceName ws = allValues.get_Item(i);
                sortedValues.Add(ws.Name, null);
            }

            // Add the extra values, if any
            if (extraValues != null)
            {
                foreach (string s in extraValues)
                {
                    sortedValues.Add(s, null);
                }
            }

            // Add the sorted types to the domain

            foreach (string value in sortedValues.Keys)
            {
                IGPValue tempGpVal = new GPStringClass();
                tempGpVal.SetAsText(value);
                domain.AddCode(tempGpVal, value);
            }

            return(domain as IGPDomain);
        }
Пример #22
0
        /// <summary>
        ///     Pre validates the given set of values.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <param name="environmentManager">Provides access to all the current environments and settings of the current client.</param>
        /// <param name="utilities">
        ///     The utilities object that provides access to the properties and methods of a geoprocessing
        ///     objects.
        /// </param>
        protected override void UpdateParameters(Dictionary <string, IGPParameter> parameters, IGPEnvironmentManager environmentManager, IGPUtilities2 utilities)
        {
            // Retrieve the input parameter value.
            IGPValue value = utilities.UnpackGPValue(parameters["in_table"]);

            if (!value.IsEmpty())
            {
                // Create the domain based on the fields on the table.
                IObjectClass table = utilities.OpenTable(value);
                if (table != null)
                {
                    IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();

                    foreach (var modelName in table.GetClassModelNames())
                    {
                        codedValueDomain.AddStringCode(modelName, modelName);
                    }

                    IGPParameterEdit3 derivedFields = (IGPParameterEdit3)parameters["in_class_model_names"];
                    derivedFields.Domain = (IGPDomain)codedValueDomain;
                }
            }
        }
Пример #23
0
        /// <summary>
        ///     Pre validates the given set of values.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <param name="environmentManager">Provides access to all the current environments and settings of the current client.</param>
        /// <param name="utilities">
        ///     The utilities object that provides access to the properties and methods of a geoprocessing
        ///     objects.
        /// </param>
        protected override void UpdateParameters(Dictionary<string, IGPParameter> parameters, IGPEnvironmentManager environmentManager, IGPUtilities2 utilities)
        {
            // Retrieve the input parameter value.
            IGPValue value = utilities.UnpackGPValue(parameters["in_table"]);
            if (!value.IsEmpty())
            {
                // Create the domain based on the fields on the table.
                IDETable table = value as IDETable;
                if (table != null)
                {
                    IFields fields = table.Fields;
                    if (fields != null)
                    {
                        IGPCodedValueDomain codedValueDomain = new GPCodedValueDomainClass();
                        foreach (var field in fields.AsEnumerable())
                            codedValueDomain.AddStringCode(field.Name, field.Name);

                        IGPParameterEdit3 derivedFields = (IGPParameterEdit3) parameters["in_fields"];
                        derivedFields.Domain = (IGPDomain) codedValueDomain;
                    }
                }
            }
        }
Пример #24
0
        /// <summary>
        /// Builds a domain from the names of the job types in the system
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildJobTypeDomain(IJTXDatabase3 wmxDb)
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            // Sort the types first
            IJTXJobTypeSet allValues = wmxDb.ConfigurationManager.JobTypes;
            SortedList <string, string> sortedValues = new SortedList <string, string>();

            for (int i = 0; i < allValues.Count; i++)
            {
                sortedValues.Add(allValues.get_Item(i).Name, null);
            }

            // Add the sorted types to the domain
            foreach (string value in sortedValues.Keys)
            {
                IGPValue tempGpVal = new GPStringClass();
                tempGpVal.SetAsText(value);
                domain.AddCode(tempGpVal, value);
            }

            return(domain as IGPDomain);
        }
Пример #25
0
        /// <summary>
        /// Set up a coded value domain containing the names of all the spatial notifications
        /// (a.k.a. "change rules") currently in the database.
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildChangeRulesDomain(IJTXDatabase3 wmxDb)
        {
            IGPCodedValueDomain         domain       = new GPCodedValueDomainClass();
            SortedList <string, string> sortedValues = new SortedList <string, string>();

            IJTXChangeRuleSet allChangeRules = wmxDb.SpatialNotificationManager.ChangeRules;

            // Sort the types first
            for (int i = 0; i < allChangeRules.Count; i++)
            {
                IJTXChangeRule tempRule = allChangeRules.get_Item(i);
                sortedValues.Add(tempRule.Name, null);
            }

            // Add the sorted types to the domain
            foreach (string value in sortedValues.Keys)
            {
                IGPValue tempGpVal = new GPStringClass();
                tempGpVal.SetAsText(value);
                domain.AddCode(tempGpVal, value);
            }

            return(domain as IGPDomain);
        }
        public void UpdateParameters(ESRI.ArcGIS.esriSystem.IArray paramvalues, ESRI.ArcGIS.Geoprocessing.IGPEnvironmentManager pEnvMgr)
        {
            try
            {
                IGPUtilities3 gpUtilities3 = new GPUtilitiesClass();

                IGPParameter inputOSMParameter = paramvalues.get_Element(in_osmFeatureClassNumber) as IGPParameter;
                IGPValue inputOSMGPValue = gpUtilities3.UnpackGPValue(inputOSMParameter);

                if (inputOSMGPValue.IsEmpty() == false)
                {
                    if (inputOSMParameter.Altered == true)
                    {

                        IGPParameter attributeCollectionParameter = paramvalues.get_Element(in_attributeSelectorNumber) as IGPParameter;
                        IGPValue attributeCollectionGPValue = gpUtilities3.UnpackGPValue(attributeCollectionParameter);

                        if (inputOSMParameter.HasBeenValidated == false && ((IGPMultiValue)attributeCollectionGPValue).Count == 0)
                        {
                            IFeatureClass osmFeatureClass = null;
                            ITable osmInputTable = null;
                            IQueryFilter osmQueryFilter = null;

                            try
                            {
                                gpUtilities3.DecodeFeatureLayer(inputOSMGPValue, out osmFeatureClass, out osmQueryFilter);
                                osmInputTable = osmFeatureClass as ITable;
                            }
                            catch { }

                            try
                            {
                                if (osmInputTable == null)
                                {
                                    gpUtilities3.DecodeTableView(inputOSMGPValue, out osmInputTable, out osmQueryFilter);
                                }
                            }
                            catch { }

                            if (osmInputTable == null)
                            {
                                return;
                            }

                            using (ComReleaser comReleaser = new ComReleaser())
                            {
                                ICursor osmCursor = osmInputTable.Search(osmQueryFilter, true);
                                comReleaser.ManageLifetime(osmCursor);

                                IRow osmRow = osmCursor.NextRow();
                                List<string> potentialOSMFields = new List<string>();

                                if (osmRow != null)
                                {
                                    IFields osmFields = osmRow.Fields;

                                    for (int fieldIndex = 0; fieldIndex < osmFields.FieldCount; fieldIndex++)
                                    {
                                        if (osmFields.get_Field(fieldIndex).Name.Substring(0, 4).Equals("osm_"))
                                        {
                                            potentialOSMFields.Add(osmFields.get_Field(fieldIndex).Name);
                                        }
                                    }
                                }

                                if (potentialOSMFields.Count == 0)
                                {
                                    return;
                                }

                                IGPCodedValueDomain osmTagKeyCodedValues = new GPCodedValueDomainClass();
                                foreach (string tagOSMField in potentialOSMFields)
                                {
                                    osmTagKeyCodedValues.AddStringCode(tagOSMField, tagOSMField);
                                }

                                ((IGPParameterEdit)attributeCollectionParameter).Domain = (IGPDomain)osmTagKeyCodedValues;

                            }
                        }
                    }
                }
            }
            catch { }
        }
        public void UpdateParameters(ESRI.ArcGIS.esriSystem.IArray paramvalues, ESRI.ArcGIS.Geoprocessing.IGPEnvironmentManager pEnvMgr)
        {
            try
            {
                IGPUtilities3 gpUtilities3 = new GPUtilitiesClass();

                IGPParameter inputOSMParameter = paramvalues.get_Element(in_osmFeatureClassNumber) as IGPParameter;
                IGPValue     inputOSMGPValue   = gpUtilities3.UnpackGPValue(inputOSMParameter);

                if (inputOSMGPValue.IsEmpty() == false)
                {
                    if (inputOSMParameter.Altered == true)
                    {
                        IGPParameter attributeCollectionParameter = paramvalues.get_Element(in_attributeSelectorNumber) as IGPParameter;
                        IGPValue     attributeCollectionGPValue   = gpUtilities3.UnpackGPValue(attributeCollectionParameter);

                        if (inputOSMParameter.HasBeenValidated == false && ((IGPMultiValue)attributeCollectionGPValue).Count == 0)
                        {
                            IFeatureClass osmFeatureClass = null;
                            ITable        osmInputTable   = null;
                            IQueryFilter  osmQueryFilter  = null;

                            try
                            {
                                gpUtilities3.DecodeFeatureLayer(inputOSMGPValue, out osmFeatureClass, out osmQueryFilter);
                                osmInputTable = osmFeatureClass as ITable;
                            }
                            catch { }

                            try
                            {
                                if (osmInputTable == null)
                                {
                                    gpUtilities3.DecodeTableView(inputOSMGPValue, out osmInputTable, out osmQueryFilter);
                                }
                            }
                            catch { }

                            if (osmInputTable == null)
                            {
                                return;
                            }

                            using (ComReleaser comReleaser = new ComReleaser())
                            {
                                ICursor osmCursor = osmInputTable.Search(osmQueryFilter, true);
                                comReleaser.ManageLifetime(osmCursor);

                                IRow          osmRow             = osmCursor.NextRow();
                                List <string> potentialOSMFields = new List <string>();

                                if (osmRow != null)
                                {
                                    IFields osmFields = osmRow.Fields;

                                    for (int fieldIndex = 0; fieldIndex < osmFields.FieldCount; fieldIndex++)
                                    {
                                        if (osmFields.get_Field(fieldIndex).Name.Substring(0, 4).Equals("osm_"))
                                        {
                                            potentialOSMFields.Add(osmFields.get_Field(fieldIndex).Name);
                                        }
                                    }
                                }

                                if (potentialOSMFields.Count == 0)
                                {
                                    return;
                                }

                                IGPCodedValueDomain osmTagKeyCodedValues = new GPCodedValueDomainClass();
                                foreach (string tagOSMField in potentialOSMFields)
                                {
                                    osmTagKeyCodedValues.AddStringCode(tagOSMField, tagOSMField);
                                }

                                ((IGPParameterEdit)attributeCollectionParameter).Domain = (IGPDomain)osmTagKeyCodedValues;
                            }
                        }
                    }
                }
            }
            catch { }
        }
        /// <summary>
        /// Pre validates the given set of values.
        /// This is where you populate derived parameters based on input, among other things.
        /// </summary>
        /// <param name="paramValues"></param>
        /// <param name="pEnvMgr"></param>
        public override void UpdateParameters(IArray paramValues, IGPEnvironmentManager pEnvMgr)
        {
            try
            {
                UpdateParametersCommon(paramValues, pEnvMgr);
            }
            catch (WmxDefaultDbNotSetException)
            {
                // If the default DB wasn't set, stop executing
                return;
            }
            catch (NullReferenceException)
            {
                // If one of the parameters was null, stop executing
                return;
            }

            // Get the parameters as a map for easier access
            WmauParameterMap  paramMap          = new WmauParameterMap(paramValues);
            IGPParameter3     jobTypeParam      = paramMap.GetParam(C_PARAM_JOB_TYPE);
            IGPParameterEdit3 jobTypeParamEdit  = paramMap.GetParamEdit(C_PARAM_JOB_TYPE);
            IGPParameter3     dataWorkspace     = paramMap.GetParam(C_PARAM_DATA_WORKSPACE);
            IGPParameterEdit3 dataWorkspaceEdit = paramMap.GetParamEdit(C_PARAM_DATA_WORKSPACE);
            IGPParameter3     parentVersion     = paramMap.GetParam(C_PARAM_PARENT_VERSION);
            IGPParameterEdit3 parentVersionEdit = paramMap.GetParamEdit(C_PARAM_PARENT_VERSION);

            // Set the domains for any parameters that need them
            if (jobTypeParam.Domain == null)
            {
                jobTypeParamEdit.Domain = Common.WmauGpDomainBuilder.BuildJobTypeDomain(this.WmxDatabase);
            }
            if (dataWorkspace.Domain == null)
            {
                dataWorkspaceEdit.Domain = Common.WmauGpDomainBuilder.BuildWorkspaceDomain(
                    this.WmxDatabase,
                    new string[] { C_OPT_NONE });
            }

            // Only update the domain for the parent version field if it hasn't yet been
            // populated, or if the value of the data workspace parameter has changed
            string newDataWorkspace = dataWorkspace.Value.GetAsText();

            if (parentVersion.Domain == null ||
                !m_dataWorkspaceName.Equals(newDataWorkspace))
            {
                IGPDomain    versionDomain = null;
                string       newJobType    = jobTypeParam.Value.GetAsText();
                IJTXJobType3 jobType       = this.WmxDatabase.ConfigurationManager.GetJobType(newJobType) as IJTXJobType3;

                if (newDataWorkspace.Equals(C_OPT_NONE) ||
                    newDataWorkspace.Equals(string.Empty))
                {
                    // Case 1: the only acceptable option for the parent version is "none".
                    IGPCodedValueDomain cvDomain = new GPCodedValueDomainClass();
                    cvDomain.AddStringCode(C_OPT_NONE, C_OPT_NONE);
                    versionDomain = cvDomain as IGPDomain;
                }
                else
                {
                    // Case 2: we need to retrieve the version list for an existing
                    // data workspace
                    try
                    {
                        versionDomain = Common.WmauGpDomainBuilder.BuildVersionsDomain(
                            this.WmxDatabase, newDataWorkspace, new string[] { C_OPT_NONE });
                    }
                    catch (WmauException)
                    {
                        // Use the "null" as an error value; we'll check for this later
                        versionDomain = null;
                    }
                }
                parentVersionEdit.Domain = versionDomain;
            }
        }
Пример #29
0
        /// <summary>
        /// Builds a domain consisting of the names of the system groups to which a
        /// user can assign a job.
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <param name="username">The name of the user to be tested</param>
        /// <param name="extraValues">An array of string values to be added to the list</param>
        /// <returns>A coded value domain as an IGPDomain</returns>
        public static IGPDomain BuildAssignableGroupsDomain(IJTXDatabase3 wmxDb, string username, string[] extraValues)
        {
            IGPCodedValueDomain domain = new GPCodedValueDomainClass();

            string[] eligibleGroups = null;

            // Only proceed if the user exists in the Workflow Manager database
            IJTXUser3 user = wmxDb.ConfigurationManager.GetUser(username) as IJTXUser3;

            if (user == null)
            {
                return(domain as IGPDomain);
            }

            // The groups to which this user can assign jobs are based on several
            // different permissions.  Check these permissions, in order from least
            // restrictive to most restrictive.
            if (user.HasNamedPrivilege(ESRI.ArcGIS.JTX.Utilities.Constants.PRIV_ASSIGN_ANY_JOB))
            {
                int numGroups = wmxDb.ConfigurationManager.UserGroups.Count;
                eligibleGroups = new string[numGroups];
                for (int i = 0; i < numGroups; i++)
                {
                    eligibleGroups[i] = wmxDb.ConfigurationManager.UserGroups.get_Item(i).Name;
                }
            }
            else if (user.HasNamedPrivilege(ESRI.ArcGIS.JTX.Utilities.Constants.PRIV_GROUP_JOB_ASSIGN))
            {
                eligibleGroups = new string[user.Groups.Count];
                for (int i = 0; i < user.Groups.Count; i++)
                {
                    eligibleGroups[i] = user.Groups.get_Item(i).Name;
                }
            }
            else
            {
                eligibleGroups = new string[0];
            }

            // Sort the types first
            SortedList <string, string> sortedValues = new SortedList <string, string>();

            for (int i = 0; i < eligibleGroups.Length; i++)
            {
                sortedValues.Add(eligibleGroups[i], null);
            }

            // Add the extra values, if any
            if (extraValues != null)
            {
                foreach (string s in extraValues)
                {
                    sortedValues.Add(s, null);
                }
            }

            // Add the sorted types to the domain
            foreach (string value in sortedValues.Keys)
            {
                IGPValue tempGpVal = new GPStringClass();
                tempGpVal.SetAsText(value);
                domain.AddCode(tempGpVal, value);
            }

            return(domain as IGPDomain);
        }
Пример #30
0
        /// <summary>
        /// Builds a domain containing the usernames of the users to whom a
        /// user can assign jobs.
        /// </summary>
        /// <param name="wmxDb">A reference to the active Workflow Manager database</param>
        /// <param name="username">The name of the user to be tested</param>
        /// <param name="extraValues">An array of string values to be added to the list</param>
        /// <returns>A coded value domain of strings</returns>
        public static IGPDomain BuildAssignableUsersDomain(IJTXDatabase3 wmxDb, string username, string[] extraValues)
        {
            IGPCodedValueDomain domain = null;

            // Only proceed if the user exists in the Workflow Manager database
            IJTXUser3 user = wmxDb.ConfigurationManager.GetUser(username) as IJTXUser3;

            if (user == null)
            {
                return(domain as IGPDomain);
            }

            // Case 1: If the user can assign the job to anyone, then
            // just use the "all users" list
            if (user.HasNamedPrivilege(ESRI.ArcGIS.JTX.Utilities.Constants.PRIV_ASSIGN_ANY_JOB))
            {
                domain = Common.WmauGpDomainBuilder.BuildUsersDomain(wmxDb, extraValues) as IGPCodedValueDomain;
            }
            else
            {
                domain = new GPCodedValueDomainClass();
                string[] eligibleUsers = null;

                // Case 2: The user can assign jobs to anyone within any of their groups
                if (user.HasNamedPrivilege(ESRI.ArcGIS.JTX.Utilities.Constants.PRIV_GROUP_JOB_ASSIGN))
                {
                    HashSet <string> usernames = new HashSet <string>();
                    IJTXUserGroupSet groups    = user.Groups;

                    for (int i = 0; i < groups.Count; i++)
                    {
                        IJTXUserGroup group = groups.get_Item(i);
                        for (int j = 0; j < group.Users.Count; j++)
                        {
                            usernames.Add(group.Users.get_Item(j).UserName);
                        }
                    }

                    eligibleUsers = usernames.ToArray();
                }
                // Case 3: The user can assign jobs to themselves
                else if (user.HasNamedPrivilege(ESRI.ArcGIS.JTX.Utilities.Constants.PRIV_INDIVIDUAL_JOB_ASSIGN))
                {
                    eligibleUsers = new string[] { username };
                }
                // Case 4: The user can't assign jobs to anyone
                else
                {
                    eligibleUsers = new string[0];
                }

                // Sort the types first
                SortedList <string, string> sortedValues = new SortedList <string, string>();
                for (int i = 0; i < eligibleUsers.Length; i++)
                {
                    sortedValues.Add(eligibleUsers[i], null);
                }

                // Add the extra values, if any
                if (extraValues != null)
                {
                    foreach (string s in extraValues)
                    {
                        sortedValues.Add(s, null);
                    }
                }

                // Add the sorted types to the domain
                foreach (string value in sortedValues.Keys)
                {
                    IGPValue tempGpVal = new GPStringClass();
                    tempGpVal.SetAsText(value);
                    domain.AddCode(tempGpVal, value);
                }
            }

            return(domain as IGPDomain);
        }