Example #1
0
    public virtual bool IsCompositeConditionMatched(CompositeCondition compositeCondition,
                                                    CompositeConditionWrapper compositeConditionWrapper,
                                                    AIBehavior behavior)
    {
        bool ret = false;

        switch (compositeCondition.Operator)
        {
        case LogicConjunction.None:
            ret = IsConditionEntityMatched(compositeCondition.Entity1, compositeConditionWrapper, behavior);
            break;

        case LogicConjunction.And:
            ret = IsConditionEntityMatched(compositeCondition.Entity1, compositeConditionWrapper, behavior);
            if (ret)
            {
                ret = IsConditionEntityMatched(compositeCondition.Entity2, compositeConditionWrapper, behavior);
            }
            break;

        case LogicConjunction.Or:
            ret = IsConditionEntityMatched(compositeCondition.Entity1, compositeConditionWrapper, behavior);
            if (ret == false)
            {
                ret = IsConditionEntityMatched(compositeCondition.Entity2, compositeConditionWrapper, behavior);
            }
            break;
        }
        return(ret);
    }
        public void TestGetRowWithFilterAndLogicOrAllNotHit()
        {
            CreateTestTableWith4PK();

            var pk = new PrimaryKey
            {
                { "PK0", new ColumnValue("a") },
                { "PK1", new ColumnValue("a") },
                { "PK2", new ColumnValue(10) },
                { "PK3", new ColumnValue(20) }
            };

            var attribute = new AttributeColumns
            {
                { "Col0", new ColumnValue(10) },
                { "Col1", new ColumnValue(2) },
                { "Col2", new ColumnValue(3) }
            };

            PutSingleRow(TestTableName, pk, attribute);

            var columnsToGet = new HashSet <string>();
            var filter1      = new RelationalCondition("Col0", CompareOperator.LESS_EQUAL, new ColumnValue(5));
            var filter2      = new RelationalCondition("Col1", CompareOperator.NOT_EQUAL, new ColumnValue(2));
            var filter       = new CompositeCondition(Aliyun.OTS.DataModel.LogicOperator.OR);

            filter.AddCondition(filter1);
            filter.AddCondition(filter2);

            CheckSingleRow(TestTableName, pk, attribute, new CapacityUnit(1, 0), columnsToGet, isEmpty: true, condition: filter);
        }
Example #3
0
        public void TestGetRowWithFilterAndLogicOrAllHit()
        {
            CreateTestTableWith4PK();

            var pk = new PrimaryKey();

            pk.Add("PK0", new ColumnValue("a"));
            pk.Add("PK1", new ColumnValue("a"));
            pk.Add("PK2", new ColumnValue(10));
            pk.Add("PK3", new ColumnValue(20));

            var attribute = new AttributeColumns();

            attribute.Add("Col0", new ColumnValue(10));
            attribute.Add("Col1", new ColumnValue(2));
            attribute.Add("Col2", new ColumnValue(3));

            PutSingleRow(TestTableName, pk, attribute);

            var columnsToGet = new HashSet <string>();
            var filter1      = new RelationalCondition("Col0", RelationalCondition.CompareOperator.GREATER_THAN, new ColumnValue(5));
            var filter2      = new RelationalCondition("Col1", RelationalCondition.CompareOperator.EQUAL, new ColumnValue(2));
            var filter       = new CompositeCondition(CompositeCondition.LogicOperator.OR);

            filter.AddCondition(filter1);
            filter.AddCondition(filter2);

            CheckSingleRow(TestTableName, pk, attribute, new CapacityUnit(1, 0), columnsToGet, condition: filter);
        }
Example #4
0
        private static int FindChoiceArtifactId(IRSAPIClient rsapiClient, int choiceType, string value)
        {
            int artifactId = 0;

            WholeNumberCondition choiceTypeCondition                = new WholeNumberCondition(ChoiceFieldNames.ChoiceTypeID, NumericConditionEnum.EqualTo, (int)choiceType);
            TextCondition        choiceNameCondition                = new TextCondition(ChoiceFieldNames.Name, TextConditionEnum.EqualTo, value);
            CompositeCondition   choiceCompositeCondition           = new CompositeCondition(choiceTypeCondition, CompositeConditionEnum.And, choiceNameCondition);
            Query <kCura.Relativity.Client.DTOs.Choice> choiceQuery = new Query <kCura.Relativity.Client.DTOs.Choice>(
                new List <FieldValue>
            {
                new FieldValue(ArtifactQueryFieldNames.ArtifactID)
            },
                choiceCompositeCondition,
                new List <Sort>());

            try
            {
                QueryResultSet <kCura.Relativity.Client.DTOs.Choice> choiceQueryResult = rsapiClient.Repositories.Choice.Query(choiceQuery);

                if (choiceQueryResult.Success && choiceQueryResult.Results.Count == 1)
                {
                    artifactId = choiceQueryResult.Results.FirstOrDefault().Artifact.ArtifactID;
                }
                else
                {
                    Console.WriteLine("The choice could not be found.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"An error occurred: {ex.Message}");
            }
            return(artifactId);
        }
        public void TestGetRowWithFilterAndLogicAndPartHit()
        {
            CreateTestTableWith4PK();

            var pk = new PrimaryKey
            {
                { "PK0", new ColumnValue("a") },
                { "PK1", new ColumnValue("a") },
                { "PK2", new ColumnValue(10) },
                { "PK3", new ColumnValue(20) }
            };

            var attribute = new AttributeColumns
            {
                { "Col0", new ColumnValue(10) },
                { "Col1", new ColumnValue(2) },
                { "Col2", new ColumnValue(3) }
            };

            PutSingleRow(TestTableName, pk, attribute);

            var columnsToGet = new HashSet <string>();
            var filter1      = new RelationalCondition("Col0", CompareOperator.GREATER_THAN, new ColumnValue(5));
            var filter2      = new RelationalCondition("Col1", CompareOperator.NOT_EQUAL, new ColumnValue(2));
            var filter       = new CompositeCondition(LogicOperator.AND);

            filter.AddCondition(filter1);
            filter.AddCondition(filter2);

            CheckSingleRow(TestTableName, pk, attribute, new CapacityUnit(1, 0), columnsToGet, true, filter);
        }
        private int FindChoiceArtifactId(int choiceType, string value)
        {
            int artifactId = 0;

            WholeNumberCondition choiceTypeCondition      = new WholeNumberCondition(ChoiceFieldNames.ChoiceTypeID, NumericConditionEnum.EqualTo, (int)choiceType);
            TextCondition        choiceNameCondition      = new TextCondition(ChoiceFieldNames.Name, TextConditionEnum.EqualTo, value);
            CompositeCondition   choiceCompositeCondition = new CompositeCondition(choiceTypeCondition, CompositeConditionEnum.And, choiceNameCondition);

            Query <DTOs.Choice> choiceQuery = new Query <DTOs.Choice>(new List <FieldValue>
            {
                new
                FieldValue(ArtifactQueryFieldNames.ArtifactID)
            }, choiceCompositeCondition, new List <Sort>());
            QueryResultSet <DTOs.Choice> choiceQueryResult;

            using (var client = _helper.GetServicesManager().CreateProxy <IRSAPIClient>(API.ExecutionIdentity.System))
            {
                client.APIOptions.WorkspaceID = -1;
                choiceQueryResult             = client.Repositories.Choice.Query(choiceQuery);
            }
            if (choiceQueryResult.Success && choiceQueryResult.Results.Count == 1)
            {
                artifactId = choiceQueryResult.Results.FirstOrDefault().Artifact.ArtifactID;
            }

            return(artifactId);
        }
Example #7
0
        public void TestCompositeCondition()
        {
            String tableName = "condition_update_test_table";

            CreateTable(tableName);

            bool success = PutRow(tableName, 3, "Col1", new ColumnValue("Value1"), null);

            Assert.IsTrue(success);

            success = UpdateRow(tableName, 3, "Col2", new ColumnValue("Value2"), null);
            Assert.IsTrue(success);

            // update with condition:
            // col1 == value2 OR col2 == value1
            CompositeCondition cond = new CompositeCondition(LogicOperator.OR);

            cond.AddCondition(new RelationalCondition(
                                  "Col1",
                                  CompareOperator.EQUAL,
                                  new ColumnValue("Value2")))
            .AddCondition(new RelationalCondition(
                              "Col2",
                              CompareOperator.EQUAL,
                              new ColumnValue("Value1")));
            success = UpdateRow(tableName, 3, "Col3", new ColumnValue("Value3"), cond);
            Assert.IsFalse(success);

            // update with condition
            // Not col1 == value2
            cond = new CompositeCondition(LogicOperator.NOT);
            cond.AddCondition(new RelationalCondition(
                                  "Col1",
                                  CompareOperator.EQUAL,
                                  new ColumnValue("Value2")));
            success = UpdateRow(tableName, 3, "Col3", new ColumnValue("Value3"), cond);
            Assert.IsTrue(success);

            // delete with condition
            // col1 == valueX  OR  (col2 == value2 AND col3 == value3)
            cond = new CompositeCondition(LogicOperator.OR);
            cond.AddCondition(new RelationalCondition(
                                  "Col1",
                                  CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")));
            CompositeCondition cond2 = new CompositeCondition(LogicOperator.AND);

            cond2.AddCondition(new RelationalCondition(
                                   "Col2",
                                   CompareOperator.EQUAL,
                                   new ColumnValue("Value2")))
            .AddCondition(new RelationalCondition(
                              "Col3",
                              CompareOperator.EQUAL,
                              new ColumnValue("Value3")));
            cond.AddCondition(cond2);
            success = DeleteRow(tableName, 3, cond);
            Assert.IsTrue(success);
        }
        public void ConditionUpdateExampleTest()
        {
            var    otsClient = OTSClient;
            String tableName = "condition_update_test_example";

            try
            {
                CreateTable(otsClient, tableName);

                PutRow(otsClient, tableName);
                GetRow(otsClient, tableName);

                // 设置update condition:年龄< 20岁
                // UpdateRow应该失败
                ColumnCondition cond = new RelationalCondition(COLUMN_AGE_NAME, RelationalCondition.CompareOperator.LESS_THAN, new ColumnValue(20));
                UpdateRow(otsClient, tableName, cond);

                //设置update condition: 年龄 >= 20岁 并且 地址是“中国A地“
                //UpdateRow应该成功
                cond = new CompositeCondition(CompositeCondition.LogicOperator.AND)
                       .AddCondition(new RelationalCondition(
                                         COLUMN_AGE_NAME, RelationalCondition.CompareOperator.GREATER_THAN,
                                         new ColumnValue(20)))
                       .AddCondition(new RelationalCondition(
                                         COLUMN_ADDRESS_NAME, RelationalCondition.CompareOperator.EQUAL,
                                         new ColumnValue("中国A地")));
                UpdateRow(otsClient, tableName, cond);
                GetRow(otsClient, tableName);

                DeleteRow(otsClient, tableName);
            }
            catch (OTSServerException e)
            {
                Console.WriteLine("服务失败:{0}", e.ErrorMessage);
                Console.WriteLine("Request ID:{0}", e.RequestID);
            }
            catch (OTSClientException e)
            {
                Console.WriteLine("OTSClientException:{0}", e.ErrorMessage);
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception:{0}", e.Message);
            }
            finally
            {
                try
                {
                    DeleteTable(otsClient, tableName);
                }catch (OTSServerException e)
                {
                    Console.WriteLine("删表失败:{0}", e.ErrorMessage);
                }
                catch (OTSClientException e)
                {
                    Console.WriteLine("删表请求失败:{0}", e.ErrorMessage);
                }
            }
        }
		/// <summary>
		/// Parses <see cref="XmlScript.ModPrerequisites"/>.
		/// </summary>
		/// <returns>The script's <see cref="XmlScript.ModPrerequisites"/>, based on the XML,
		/// or <c>null</c> if the XML doesn't describe any <see cref="XmlScript.ModPrerequisites"/>.</returns>
		protected override ICondition GetModPrerequisites()
		{
			CompositeCondition cpcCondition = new CompositeCondition(ConditionOperator.And);
			IEnumerable<XElement> xeeDependencies = Script.XPathSelectElements("moduleDependancies/*");
			foreach (XElement xelCondition in xeeDependencies)
				cpcCondition.Conditions.Add(LoadCondition(xelCondition));
			return cpcCondition;
		}
Example #10
0
    void EditConditionWrapper(CompositeConditionWrapper compositionConditionWrapper)
    {
        //Edit Atom condition
        EnableEditAtomCondition = EditorGUILayout.BeginToggleGroup("Edit atom condition", EnableEditAtomCondition);
        if (EnableEditAtomCondition)
        {
            if (GUILayout.Button("Add atom condition"))
            {
                AtomConditionData atomCondition = new AtomConditionData();
                compositionConditionWrapper.atomConditionDataArray = Util.AddToArray <AtomConditionData> (atomCondition, compositionConditionWrapper.atomConditionDataArray);
            }
            foreach (AtomConditionData atomCondition in compositionConditionWrapper.atomConditionDataArray)
            {
                this.aiEditor.EditAtomConditionData(atomCondition);
                if (GUILayout.Button("Delete atom condition:" + atomCondition.Id))
                {
                    compositionConditionWrapper.atomConditionDataArray =
                        Util.CloneExcept <AtomConditionData> (compositionConditionWrapper.atomConditionDataArray, atomCondition);
                }
                EditorGUILayout.Space();
                EditorGUILayout.Space();
            }
        }
        EditorGUILayout.EndToggleGroup();

        //Edit composite condition
        EnableEditCompositeCondition = EditorGUILayout.BeginToggleGroup("Edit composite condition", EnableEditCompositeCondition);
        if (EnableEditCompositeCondition)
        {
            if (GUILayout.Button("Add composite condition"))
            {
                CompositeCondition compositeCondition = new CompositeCondition();
                compositionConditionWrapper.CompositeConditionArray = Util.AddToArray <CompositeCondition> (compositeCondition, compositionConditionWrapper.CompositeConditionArray);
            }
            foreach (CompositeCondition compositeCondition in compositionConditionWrapper.CompositeConditionArray)
            {
                this.aiEditor.EditCompositeCondition(compositeCondition, compositionConditionWrapper);
                if (GUILayout.Button("Delete composite condition:" + compositeCondition.Id))
                {
                    compositionConditionWrapper.CompositeConditionArray =
                        Util.CloneExcept <CompositeCondition> (compositionConditionWrapper.CompositeConditionArray,
                                                               compositeCondition);
                }
                EditorGUILayout.Space();
                EditorGUILayout.Space();
            }
        }
        EditorGUILayout.EndToggleGroup();

        //Edit root composite condition
        EnableEditRootCompositeCondition = EditorGUILayout.BeginToggleGroup("Edit root composite condition", EnableEditRootCompositeCondition);
        if (EnableEditRootCompositeCondition)
        {
            this.aiEditor.EditCompositeCondition(compositionConditionWrapper.RootCompositeCondition, compositionConditionWrapper);
        }
        EditorGUILayout.EndToggleGroup();
    }
 private ByteString BuildCompositeCondition(CompositeCondition cc)
 {
     PB.CompositeCondition.Builder builder = PB.CompositeCondition.CreateBuilder();
     builder.SetCombinator(MakeLogicOperator(cc.Type));
     foreach (ColumnCondition c in cc.SubConditions)
     {
         builder.AddSubConditions(MakeColumnCondition(c));
     }
     return(builder.Build().ToByteString());
 }
 public Treenode(Type nodetype, Treenode father, Treenode oper1, Treenode oper2, CompositeCondition cCondition, ProjectionCollection projCollection)
 {
     NodeType = nodetype;
     Parent = father;
     Operand1 = oper1;
     Operand2 = oper2;
     Condition = cCondition;
     ProjectionColl = projCollection;
     IntData = new IntermediateData(0, 0, 0, 0);
 }
Example #13
0
        public bool Populate(CompositeCondition compositeCondition)
        {
            foreach (var conditionChecker in this.GetAllConditionCheckers().All)
            {
                conditionChecker.GetGuiController().LoadSettingsFromCondition(
                    compositeCondition.GetCondition(conditionChecker.ConditionTypeName));
            }

            return(true);
        }
        public bool SaveToCompositeCondition(CompositeCondition compositeCondition)
        {
            foreach (var conditionChecker in this.GetAllConditionCheckers().All)
            {
                conditionChecker.GetGuiController().SaveSettingsToCondition(
                    compositeCondition.GetCondition(conditionChecker.ConditionTypeName));
            }

            return true;
        }
Example #15
0
        public bool SaveToCompositeCondition(CompositeCondition compositeCondition)
        {
            foreach (var conditionChecker in this.GetAllConditionCheckers().All)
            {
                conditionChecker.GetGuiController().SaveSettingsToCondition(
                    compositeCondition.GetCondition(conditionChecker.ConditionTypeName));
            }

            return(true);
        }
        public bool Populate(CompositeCondition compositeCondition)
        {
            foreach (var conditionChecker in this.GetAllConditionCheckers().All)
            {
                conditionChecker.GetGuiController().LoadSettingsFromCondition(
                    compositeCondition.GetCondition(conditionChecker.ConditionTypeName));
            }

            return true;
        }
        protected virtual string GenerateCpl(ICondition p_cndCondition)
        {
            StringBuilder stbCPL = new StringBuilder();

            if (p_cndCondition is CompositeCondition)
            {
                CompositeCondition cpcCondition = (CompositeCondition)p_cndCondition;
                string             strOperator  = null;
                string             strPrefix    = null;
                string             strSuffix    = null;
                switch (cpcCondition.Operator)
                {
                case ConditionOperator.And:
                    strOperator = "AND";
                    break;

                case ConditionOperator.Or:
                    strOperator = "OR";
                    strPrefix   = "(";
                    strSuffix   = ")";
                    break;
                }
                stbCPL.Append(strPrefix);
                for (Int32 i = 0; i < cpcCondition.Conditions.Count; i++)
                {
                    stbCPL.Append(GenerateCpl(cpcCondition.Conditions[i]));
                    if (i < cpcCondition.Conditions.Count - 1)
                    {
                        stbCPL.AppendFormat(" {0} ", strOperator);
                    }
                }
                stbCPL.Append(strSuffix);
            }
            else if (p_cndCondition is FlagCondition)
            {
                FlagCondition flcCondition = (FlagCondition)p_cndCondition;
                stbCPL.AppendFormat("${0}$ = \"{1}\"", flcCondition.FlagName, flcCondition.Value);
            }
            else if (p_cndCondition is PluginCondition)
            {
                PluginCondition pncCondition = (PluginCondition)p_cndCondition;
                stbCPL.AppendFormat("\"{0}\" is {1}", pncCondition.PluginPath, pncCondition.State.ToString());
            }
            else if (p_cndCondition is GameVersionCondition)
            {
                GameVersionCondition gvcCondition = (GameVersionCondition)p_cndCondition;
                stbCPL.AppendFormat("gameVersion >= {0}", gvcCondition.MinimumVersion.ToString());
            }
            else if (p_cndCondition is ModManagerCondition)
            {
                ModManagerCondition mmcCondition = (ModManagerCondition)p_cndCondition;
                stbCPL.AppendFormat("managerVersion >= {0}", mmcCondition.MinimumVersion.ToString());
            }
            return(stbCPL.ToString());
        }
        protected virtual ICondition BuildCompositeCondition(ITree p_astCPL)
        {
            switch (p_astCPL.Type)
            {
            case CPLParser.AND:
                CompositeCondition cpcAndCondition = new CompositeCondition(ConditionOperator.And);
                for (Int32 i = 0; i < p_astCPL.ChildCount; i++)
                {
                    cpcAndCondition.Conditions.Add(BuildCompositeCondition(p_astCPL.GetChild(i)));
                }
                return(cpcAndCondition);

            case CPLParser.OR:
                CompositeCondition cpcOrCondition = new CompositeCondition(ConditionOperator.Or);
                for (Int32 i = 0; i < p_astCPL.ChildCount; i++)
                {
                    cpcOrCondition.Conditions.Add(BuildCompositeCondition(p_astCPL.GetChild(i)));
                }
                return(cpcOrCondition);

            case CPLParser.EQUALS:
                string        strFlagName  = p_astCPL.GetChild(0).Text.Trim('$');
                string        strFlagValue = p_astCPL.GetChild(1).Text.Trim('"');
                FlagCondition flcCondition = new FlagCondition(strFlagName, strFlagValue);
                return(flcCondition);

            case CPLParser.IS:
                string strPluginPath = p_astCPL.GetChild(0).Text.Trim('"');
                string strState      = p_astCPL.GetChild(1).Text.ToUpperInvariant();
                strState = strState[0] + strState.Remove(0, 1).ToLowerInvariant();
                PluginState     pnsState     = (PluginState)Enum.Parse(typeof(PluginState), strState);
                PluginCondition pncCondition = new PluginCondition(strPluginPath, pnsState);
                return(pncCondition);

            case CPLParser.ATLEAST:
                string strVersion = p_astCPL.GetChild(1).Text;
                if (!strVersion.Contains("."))
                {
                    strVersion += ".0";
                }
                Version verVersion = new Version(strVersion);
                switch (p_astCPL.GetChild(0).Type)
                {
                case CPLParser.GAME_VERSION:
                    return(new GameVersionCondition(verVersion));

                case CPLParser.MANAGER_VERSION:
                    return(new ModManagerCondition(verVersion));
                }
                throw new Exception("Unknown: " + p_astCPL.Text);

            default:
                throw new Exception("Unknown: " + p_astCPL.Text);
            }
        }
Example #19
0
        public static void GetRowWithFilter()
        {
            Console.WriteLine("Start get row with filter ...");
            PrepareTable();
            OTSClient otsClient = Config.GetClient();

            // 定义行的主键,必须与创建表时的TableMeta中定义的一致
            PrimaryKey primaryKey = new PrimaryKey
            {
                { "pk0", new ColumnValue(0) },
                { "pk1", new ColumnValue("abc") }
            };

            var rowQueryCriteria = new SingleRowQueryCriteria(TableName)
            {
                RowPrimaryKey = primaryKey
            };

            // 只返回col0的值等于5的行或者col1不等于ff的行
            var filter1 = new RelationalCondition("col0",
                                                  CompareOperator.EQUAL,
                                                  new ColumnValue(5));

            var filter2 = new RelationalCondition("col1", CompareOperator.NOT_EQUAL, new ColumnValue("ff"));

            var filter = new CompositeCondition(LogicOperator.OR);

            filter.AddCondition(filter1);
            filter.AddCondition(filter2);

            rowQueryCriteria.Filter = filter.ToFilter();
            rowQueryCriteria.AddColumnsToGet("col0");
            rowQueryCriteria.AddColumnsToGet("col1");

            GetRowRequest request = new GetRowRequest(rowQueryCriteria);

            // 查询
            GetRowResponse   response       = otsClient.GetRow(request);
            PrimaryKey       primaryKeyRead = response.PrimaryKey;
            AttributeColumns attributesRead = response.Attribute;

            Console.WriteLine("Primary key read: ");
            foreach (KeyValuePair <string, ColumnValue> entry in primaryKeyRead)
            {
                Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
            }

            Console.WriteLine("Attributes read: ");
            foreach (KeyValuePair <string, ColumnValue> entry in attributesRead)
            {
                Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
            }

            Console.WriteLine("Get row with filter succeed.");
        }
Example #20
0
        /// <summary>
        /// Parses <see cref="XmlScript.ModPrerequisites"/>.
        /// </summary>
        /// <returns>The script's <see cref="XmlScript.ModPrerequisites"/>, based on the XML,
        /// or <c>null</c> if the XML doesn't describe any <see cref="XmlScript.ModPrerequisites"/>.</returns>
        protected override ICondition GetModPrerequisites()
        {
            CompositeCondition     cpcCondition    = new CompositeCondition(ConditionOperator.And);
            IEnumerable <XElement> xeeDependencies = Script.XPathSelectElements("moduleDependencies/*");

            foreach (XElement xelCondition in xeeDependencies)
            {
                cpcCondition.Conditions.Add(LoadCondition(xelCondition));
            }
            return(cpcCondition);
        }
Example #21
0
    public CompositeCondition GetClone()
    {
        CompositeCondition clone = new CompositeCondition();

        clone.Id       = this.Id;
        clone.Operator = this.Operator;
        clone.Entity1  = new ConditionEntity();
        clone.Entity1.EntityReferenceId = this.Entity1.EntityReferenceId;
        clone.Entity1.EntityType        = this.Entity1.EntityType;
        return(clone);
    }
Example #22
0
        /// <summary>
        /// Reads the dependency information from the given node.
        /// </summary>
        /// <param name="p_xelCondition">The node from which to load the dependency information.</param>
        /// <returns>A <see cref="CompositeCondition"/> representing the dependency described in the given node.</returns>
        protected override ICondition LoadCondition(XElement p_xelCondition)
        {
            if (p_xelCondition == null)
            {
                return(null);
            }
            switch (p_xelCondition.GetSchemaInfo().SchemaType.Name)
            {
            case "compositeDependency":
                ConditionOperator      copOperator     = (ConditionOperator)Enum.Parse(typeof(ConditionOperator), p_xelCondition.Attribute("operator").Value);
                CompositeCondition     cpdCondition    = new CompositeCondition(copOperator);
                IEnumerable <XElement> xeeDependencies = p_xelCondition.Elements();
                foreach (XElement xelCondition in xeeDependencies)
                {
                    cpdCondition.Conditions.Add(LoadCondition(xelCondition));
                }
                return(cpdCondition);

            case "fileDependency":
                string      strCondition = p_xelCondition.Attribute("file").Value.ToLower();
                PluginState plsModState  = (PluginState)Enum.Parse(typeof(PluginState), p_xelCondition.Attribute("state").Value);
                return(new PluginCondition(strCondition, plsModState));

            case "flagDependency":
                string strFlagName = p_xelCondition.Attribute("flag").Value;
                string strValue    = p_xelCondition.Attribute("value").Value;
                return(new FlagCondition(strFlagName, strValue));

            case "moduleFileDependency":
                string strFileCondition = p_xelCondition.Attribute("file").Value.ToLower();
                return(new PluginCondition(strFileCondition, PluginState.Active));

            case "moduleVersionDependency":
                switch (p_xelCondition.Name.LocalName)
                {
                case "falloutDependency":
                    Version verMinFalloutVersion = ParseVersion(p_xelCondition.Attribute("version").Value);
                    return(new GameVersionCondition(verMinFalloutVersion));

                case "fommDependency":
                    Version verMinFommVersion = ParseVersion(p_xelCondition.Attribute("version").Value);
                    return(new ModManagerCondition(verMinFommVersion));

                default:
                    throw new ParserException("Invalid dependency node: " + p_xelCondition.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser.");
                }

            default:
                throw new ParserException("Invalid plugin condition node: " + p_xelCondition.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser.");
            }
        }
Example #23
0
 public virtual void EditCompositeCondition(CompositeCondition compositeCondition, CompositeConditionWrapper conditionWrapper)
 {
     EditorGUILayout.LabelField(" -------------- Composite condition:" + compositeCondition.Id + " ------------ ");
     compositeCondition.Id       = EditorGUILayout.TextField("Id:", compositeCondition.Id);
     compositeCondition.Operator = (LogicConjunction)EditorGUILayout.EnumPopup(new GUIContent("Operator ", ""), compositeCondition.Operator);
     if (compositeCondition.Operator == LogicConjunction.None)
     {
         EditCompositeConditionEntity("Entity 1:", compositeCondition.Entity1, conditionWrapper);
     }
     else
     {
         EditCompositeConditionEntity("Entity 1:", compositeCondition.Entity1, conditionWrapper);
         EditCompositeConditionEntity("Entity 2:", compositeCondition.Entity2, conditionWrapper);
     }
     EditorGUILayout.LabelField("Condition description:");
     EditorGUILayout.LabelField(GetCompositeConditionDescription(compositeCondition, conditionWrapper));
 }
Example #24
0
    public CompositeConditionWrapper GetClone()
    {
        CompositeConditionWrapper clone = new CompositeConditionWrapper();

        clone.RootCompositeCondition = this.RootCompositeCondition.GetClone();
        foreach (CompositeCondition compositeCondition in this.CompositeConditionArray)
        {
            CompositeCondition cloneCompositiobCondition = compositeCondition.GetClone();
            clone.CompositeConditionArray = Util.AddToArray <CompositeCondition>(cloneCompositiobCondition, clone.CompositeConditionArray);
        }
        foreach (AtomConditionData atomCondition in this.atomConditionDataArray)
        {
            AtomConditionData cloneAtomCondition = atomCondition.GetClone();
            clone.atomConditionDataArray = Util.AddToArray <AtomConditionData>(cloneAtomCondition, clone.atomConditionDataArray);
        }
        return(clone);
    }
Example #25
0
		protected virtual ICondition BuildCompositeCondition(ITree p_astCPL)
		{
			switch (p_astCPL.Type)
			{
				case CPLParser.AND:
					CompositeCondition cpcAndCondition = new CompositeCondition(ConditionOperator.And);
					for (Int32 i = 0; i < p_astCPL.ChildCount; i++)
						cpcAndCondition.Conditions.Add(BuildCompositeCondition(p_astCPL.GetChild(i)));
					return cpcAndCondition;
				case CPLParser.OR:
					CompositeCondition cpcOrCondition = new CompositeCondition(ConditionOperator.Or);
					for (Int32 i = 0; i < p_astCPL.ChildCount; i++)
						cpcOrCondition.Conditions.Add(BuildCompositeCondition(p_astCPL.GetChild(i)));
					return cpcOrCondition;
				case CPLParser.EQUALS:
					string strFlagName = p_astCPL.GetChild(0).Text.Trim('$');
					string strFlagValue = p_astCPL.GetChild(1).Text.Trim('"');
					FlagCondition flcCondition = new FlagCondition(strFlagName, strFlagValue);
					return flcCondition;
				case CPLParser.IS:
					string strPluginPath = p_astCPL.GetChild(0).Text.Trim('"');
					string strState = p_astCPL.GetChild(1).Text.ToUpperInvariant();
					strState = strState[0] + strState.Remove(0, 1).ToLowerInvariant();
					PluginState pnsState = (PluginState)Enum.Parse(typeof(PluginState), strState);
					PluginCondition pncCondition = new PluginCondition(strPluginPath, pnsState);
					return pncCondition;
				case CPLParser.ATLEAST:
					string strVersion = p_astCPL.GetChild(1).Text;
					if (!strVersion.Contains("."))
						strVersion += ".0";
					Version verVersion = new Version(strVersion);
					switch (p_astCPL.GetChild(0).Type)
					{
						case CPLParser.GAME_VERSION:
							return new GameVersionCondition(verVersion);
						case CPLParser.MANAGER_VERSION:
							return new ModManagerCondition(verVersion);
					}
					throw new Exception("Unknown: " + p_astCPL.Text);
				default:
					throw new Exception("Unknown: " + p_astCPL.Text);
			}
		}
Example #26
0
    private bool IsConditionEntityMatched(ConditionEntity conditionEntity,
                                          CompositeConditionWrapper compositeConditionWrapper,
                                          AIBehavior behavior)
    {
        bool ret = false;

        switch (conditionEntity.EntityType)
        {
        case ConditionEntityType.AtomCondition:
            AtomConditionData atomCondition = compositeConditionWrapper.AtomConditionDataDict[conditionEntity.EntityReferenceId];
            ret = CheckAtomCondition(atomCondition, behavior);
            break;

        case ConditionEntityType.ReferenceToComposite:
            CompositeCondition compositeCondition = compositeConditionWrapper.CompositeConditionDict[conditionEntity.EntityReferenceId];
            ret = IsCompositeConditionMatched(compositeCondition, compositeConditionWrapper, behavior);
            break;
        }
        return(ret);
    }
Example #27
0
        public static int FindChoiceArtifactId(IRSAPIClient proxy, int choiceType, string value)
        {
            int artifactId = 0;

            WholeNumberCondition choiceTypeCondition      = new WholeNumberCondition(ChoiceFieldNames.ChoiceTypeID, NumericConditionEnum.EqualTo, (int)choiceType);
            TextCondition        choiceNameCondition      = new TextCondition(ChoiceFieldNames.Name, TextConditionEnum.EqualTo, value);
            CompositeCondition   choiceCompositeCondition = new CompositeCondition(choiceTypeCondition, CompositeConditionEnum.And, choiceNameCondition);

            Query <Choice> choiceQuery = new Query <Choice>(new List <FieldValue>
            {
                new
                FieldValue(ArtifactQueryFieldNames.ArtifactID)
            }, choiceCompositeCondition, new List <Sort>());

            QueryResultSet <Choice> choiceQueryResult = proxy.Repositories.Choice.Query(choiceQuery);

            if (choiceQueryResult.Success && choiceQueryResult.Results.Count == 1)
            {
                artifactId = choiceQueryResult.Results.FirstOrDefault().Artifact.ArtifactID;
            }

            return(artifactId);
        }
Example #28
0
		/// <summary>
		/// Reads the condition from the given node.
		/// </summary>
		/// <param name="p_xelCondition">The node from which to load the condition.</param>
		/// <returns>An <see cref="ICondition"/> representing the condition described in the given node.</returns>
		protected override ICondition LoadCondition(XElement p_xelCondition)
		{
			if (p_xelCondition == null)
				return null;
			switch (p_xelCondition.GetSchemaInfo().SchemaType.Name)
			{
				case "compositeDependency":
					ConditionOperator copOperator = (ConditionOperator)Enum.Parse(typeof(ConditionOperator), p_xelCondition.Attribute("operator").Value);
					CompositeCondition cpdCondition = new CompositeCondition(copOperator);
					IEnumerable<XElement> xeeConditions = p_xelCondition.Elements();
					foreach (XElement xelCondition in xeeConditions)
						cpdCondition.Conditions.Add(LoadCondition(xelCondition));
					return cpdCondition;
				case "fileDependency":
					string strCondition = p_xelCondition.Attribute("file").Value.ToLower();
					PluginState plsModState = (PluginState)Enum.Parse(typeof(PluginState), p_xelCondition.Attribute("state").Value);
					return new PluginCondition(strCondition, plsModState);
				case "flagDependency":
					string strFlagName = p_xelCondition.Attribute("flag").Value;
					string strValue = p_xelCondition.Attribute("value").Value;
					return new FlagCondition(strFlagName, strValue);
				case "versionDependency":
					switch (p_xelCondition.Name.LocalName)
					{
						case "gameDependency":
							Version verMinFalloutVersion = ParseVersion(p_xelCondition.Attribute("version").Value);
							return new GameVersionCondition(verMinFalloutVersion);
						case "fommDependency":
							Version verMinFommVersion = ParseVersion(p_xelCondition.Attribute("version").Value);
							return new ModManagerCondition(verMinFommVersion);
						default:
							throw new ParserException("Invalid plugin condition node: " + p_xelCondition.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser.");
					}
				default:
					throw new ParserException("Invalid plugin condition node: " + p_xelCondition.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser.");
			}
		}
Example #29
0
        public void TestLimits()
        {
            String tableName = "condition_update_test_table";

            CreateTable(tableName);
            // column condition count <= 10
            CompositeCondition cond = new CompositeCondition(LogicOperator.OR);

            cond.AddCondition(new RelationalCondition(
                                  "ColX1", CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX2", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX3", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX4", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX5", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX6", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX7", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX8", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX9", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")));
            bool success = PutRow(tableName, 4, "Col1", new ColumnValue("Value1"), cond);

            Assert.IsTrue(success);

            cond.AddCondition(new RelationalCondition(
                                  "ColX10", CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")));
            success = PutRow(tableName, 4, "Col1", new ColumnValue("Value1"), cond);
            Assert.IsFalse(success);

            // invalid column name in column condition
            cond = new CompositeCondition(LogicOperator.AND);
            cond.AddCondition(new RelationalCondition(
                                  "#Col", CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX9", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")));
            success = PutRow(tableName, 4, "Col1", new ColumnValue("Value1"), cond);
            Assert.IsFalse(success);

            // invalid column value in column condition
            cond = new CompositeCondition(LogicOperator.AND);
            cond.AddCondition(new RelationalCondition(
                                  "ColX9", CompareOperator.EQUAL,
                                  new ColumnValue("ValueX")))
            .AddCondition(new RelationalCondition(
                              "ColX9", CompareOperator.EQUAL,
                              new ColumnValue("ValueX")));
            Assert.IsFalse(success);
        }
Example #30
0
    public void OnGUI()
    {
        if (compositionConditionWrapper == null || aiEditor == null) {
            EditorGUILayout.LabelField ("No condition wrapper or AIEditor!!");
            return;
        }

        if(GUILayout.Button("Save"))
        {
            EditorUtility.SetDirty (aiEditor.AI);
        }

        ScrollPos = EditorGUILayout.BeginScrollView(ScrollPos,false, true, null);

        //Edit Atom condition
        EnableEditAtomCondition = EditorGUILayout.BeginToggleGroup ("Edit atom condition", EnableEditAtomCondition);
        if (EnableEditAtomCondition) {
            if (GUILayout.Button ("Add atom condition")) {
                AtomConditionData atomCondition = new AtomConditionData ();
                compositionConditionWrapper.atomConditionDataArray = Util.AddToArray<AtomConditionData> (atomCondition, compositionConditionWrapper.atomConditionDataArray);
            }
            foreach (AtomConditionData atomCondition in compositionConditionWrapper.atomConditionDataArray) {
                this.aiEditor.EditAtomConditionData (atomCondition);
                if (GUILayout.Button ("Delete atom condition:" + atomCondition.Id)) {
                    compositionConditionWrapper.atomConditionDataArray =
                      Util.CloneExcept<AtomConditionData> (compositionConditionWrapper.atomConditionDataArray, atomCondition);
                }
                EditorGUILayout.Space ();
                EditorGUILayout.Space ();
            }
        }
        EditorGUILayout.EndToggleGroup ();

        //Edit composite condition
        EnableEditCompositeCondition = EditorGUILayout.BeginToggleGroup ("Edit composite condition", EnableEditCompositeCondition);
        if(EnableEditCompositeCondition)
        {
            if (GUILayout.Button ("Add composite condition")) {
                CompositeCondition compositeCondition = new CompositeCondition ();
                compositionConditionWrapper.CompositeConditionArray = Util.AddToArray<CompositeCondition> (compositeCondition, compositionConditionWrapper.CompositeConditionArray);
            }
            foreach (CompositeCondition compositeCondition in compositionConditionWrapper.CompositeConditionArray) {
                this.aiEditor.EditCompositeCondition (compositeCondition, compositionConditionWrapper);
                if (GUILayout.Button ("Delete composite condition:" + compositeCondition.Id)) {
                    compositionConditionWrapper.CompositeConditionArray =
                      Util.CloneExcept<CompositeCondition> (compositionConditionWrapper.CompositeConditionArray,
                                                            compositeCondition);
                }
                EditorGUILayout.Space ();
                EditorGUILayout.Space ();
            }
        }
        EditorGUILayout.EndToggleGroup();

        //Edit root composite condition
        EnableEditRootCompositeCondition = EditorGUILayout.BeginToggleGroup("Edit root composite condition", EnableEditRootCompositeCondition);
        if(EnableEditRootCompositeCondition)
        {
            this.aiEditor.EditCompositeCondition (compositionConditionWrapper.RootCompositeCondition, compositionConditionWrapper);
        }

        EditorGUILayout.EndScrollView();
    }
    void EditConditionWrapper(CompositeConditionWrapper compositionConditionWrapper)
    {
        //Edit Atom condition
        EnableEditAtomCondition = EditorGUILayout.BeginToggleGroup ("Edit atom condition", EnableEditAtomCondition);
        if (EnableEditAtomCondition) {
            if (GUILayout.Button ("Add atom condition")) {
                AtomConditionData atomCondition = new AtomConditionData ();
                compositionConditionWrapper.atomConditionDataArray = Util.AddToArray<AtomConditionData> (atomCondition, compositionConditionWrapper.atomConditionDataArray);
            }
            foreach (AtomConditionData atomCondition in compositionConditionWrapper.atomConditionDataArray) {
                this.aiEditor.EditAtomConditionData (atomCondition);
                if (GUILayout.Button ("Delete atom condition:" + atomCondition.Id)) {
                    compositionConditionWrapper.atomConditionDataArray =
                      Util.CloneExcept<AtomConditionData> (compositionConditionWrapper.atomConditionDataArray, atomCondition);
                }
                EditorGUILayout.Space ();
                EditorGUILayout.Space ();
            }
        }
        EditorGUILayout.EndToggleGroup ();

        //Edit composite condition
        EnableEditCompositeCondition = EditorGUILayout.BeginToggleGroup ("Edit composite condition", EnableEditCompositeCondition);
        if (EnableEditCompositeCondition) {
            if (GUILayout.Button ("Add composite condition")) {
                CompositeCondition compositeCondition = new CompositeCondition ();
                compositionConditionWrapper.CompositeConditionArray = Util.AddToArray<CompositeCondition> (compositeCondition, compositionConditionWrapper.CompositeConditionArray);
            }
            foreach (CompositeCondition compositeCondition in compositionConditionWrapper.CompositeConditionArray) {
                this.aiEditor.EditCompositeCondition (compositeCondition, compositionConditionWrapper);
                if (GUILayout.Button ("Delete composite condition:" + compositeCondition.Id)) {
                    compositionConditionWrapper.CompositeConditionArray =
                      Util.CloneExcept<CompositeCondition> (compositionConditionWrapper.CompositeConditionArray,
                                                            compositeCondition);
                }
                EditorGUILayout.Space ();
                EditorGUILayout.Space ();
            }
        }
        EditorGUILayout.EndToggleGroup ();

        //Edit root composite condition
        EnableEditRootCompositeCondition = EditorGUILayout.BeginToggleGroup ("Edit root composite condition", EnableEditRootCompositeCondition);
        if (EnableEditRootCompositeCondition) {
            this.aiEditor.EditCompositeCondition (compositionConditionWrapper.RootCompositeCondition, compositionConditionWrapper);
        }
        EditorGUILayout.EndToggleGroup ();
    }
Example #32
0
    public void OnGUI()
    {
        if (compositionConditionWrapper == null || aiEditor == null)
        {
            EditorGUILayout.LabelField("No condition wrapper or AIEditor!!");
            return;
        }

        if (GUILayout.Button("Save"))
        {
            EditorUtility.SetDirty(aiEditor.AI);
        }

        ScrollPos = EditorGUILayout.BeginScrollView(ScrollPos, false, true, null);

        //Edit Atom condition
        EnableEditAtomCondition = EditorGUILayout.BeginToggleGroup("Edit atom condition", EnableEditAtomCondition);
        if (EnableEditAtomCondition)
        {
            if (GUILayout.Button("Add atom condition"))
            {
                AtomConditionData atomCondition = new AtomConditionData();
                compositionConditionWrapper.atomConditionDataArray = Util.AddToArray <AtomConditionData> (atomCondition, compositionConditionWrapper.atomConditionDataArray);
            }
            foreach (AtomConditionData atomCondition in compositionConditionWrapper.atomConditionDataArray)
            {
                this.aiEditor.EditAtomConditionData(atomCondition);
                if (GUILayout.Button("Delete atom condition:" + atomCondition.Id))
                {
                    compositionConditionWrapper.atomConditionDataArray =
                        Util.CloneExcept <AtomConditionData> (compositionConditionWrapper.atomConditionDataArray, atomCondition);
                }
                EditorGUILayout.Space();
                EditorGUILayout.Space();
            }
        }
        EditorGUILayout.EndToggleGroup();

        //Edit composite condition
        EnableEditCompositeCondition = EditorGUILayout.BeginToggleGroup("Edit composite condition", EnableEditCompositeCondition);
        if (EnableEditCompositeCondition)
        {
            if (GUILayout.Button("Add composite condition"))
            {
                CompositeCondition compositeCondition = new CompositeCondition();
                compositionConditionWrapper.CompositeConditionArray = Util.AddToArray <CompositeCondition> (compositeCondition, compositionConditionWrapper.CompositeConditionArray);
            }
            foreach (CompositeCondition compositeCondition in compositionConditionWrapper.CompositeConditionArray)
            {
                this.aiEditor.EditCompositeCondition(compositeCondition, compositionConditionWrapper);
                if (GUILayout.Button("Delete composite condition:" + compositeCondition.Id))
                {
                    compositionConditionWrapper.CompositeConditionArray =
                        Util.CloneExcept <CompositeCondition> (compositionConditionWrapper.CompositeConditionArray,
                                                               compositeCondition);
                }
                EditorGUILayout.Space();
                EditorGUILayout.Space();
            }
        }
        EditorGUILayout.EndToggleGroup();

        //Edit root composite condition
        EnableEditRootCompositeCondition = EditorGUILayout.BeginToggleGroup("Edit root composite condition", EnableEditRootCompositeCondition);
        if (EnableEditRootCompositeCondition)
        {
            this.aiEditor.EditCompositeCondition(compositionConditionWrapper.RootCompositeCondition, compositionConditionWrapper);
        }

        EditorGUILayout.EndScrollView();
    }
 public CompositeConditionCommandArgs(CompositeCondition compositeCondition)
 {
     this.CompositeCondition = compositeCondition;
 }
        public static void ConditionUpdateRow()
        {
            Console.WriteLine("Start update row...");

            PrepareTable();
            var otsClient = Config.GetClient();

            // 定义行的主键,必须与创建表时的TableMeta中定义的一致
            var primaryKey = new PrimaryKey();

            primaryKey.Add("pk0", new ColumnValue(1));
            primaryKey.Add("pk1", new ColumnValue("abc"));

            // 定义要写入改行的属性列
            var attribute = new AttributeColumns();

            attribute.Add("col0", new ColumnValue(1));
            attribute.Add("col1", new ColumnValue("a"));
            attribute.Add("col2", new ColumnValue(true));

            var request = new PutRowRequest(tableName, new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);

            // 新创建一行数据
            try
            {
                otsClient.PutRow(request);

                Console.WriteLine("Put row succeeded.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Put row failed. error:{0}", ex.Message);
            }


            // 当col0不等于5,且col1等于'a'时,允许修改,否则不允许修改
            try
            {
                // 构造condition
                var cond1 = new RelationalCondition("col0",
                                                    CompareOperator.NOT_EQUAL,
                                                    new ColumnValue(5));
                var cond2 = new RelationalCondition("col1", CompareOperator.EQUAL,
                                                    new ColumnValue("a"));
                var columenCondition = new CompositeCondition(LogicOperator.AND);
                columenCondition.AddCondition(cond1);
                columenCondition.AddCondition(cond2);

                var condition = new Condition(RowExistenceExpectation.IGNORE);
                condition.ColumnCondition = columenCondition;

                // 构造更新请求
                var updateOfAttribute = new UpdateOfAttribute();
                updateOfAttribute.AddAttributeColumnToPut("col2", new ColumnValue(false));
                var updateRowRequest = new UpdateRowRequest(tableName, condition, primaryKey, updateOfAttribute);

                // 更新数据
                otsClient.UpdateRow(updateRowRequest);

                // 更新成功
                Console.WriteLine("Update row succeeded.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Update row failed. error:{0}", ex.Message);
            }
        }
Example #35
0
        /// <summary>
        /// Returns all of the fields for a given object type.
        /// Does not include system fields.
        /// </summary>
        /// <param name="objMgr"></param>
        /// <param name="workspaceId"></param>
        /// <param name="objectTypeId"></param>
        /// <returns></returns>
        public static async Task <List <Field> > GetAllFieldsForObject(
            IObjectManager objMgr,
            int workspaceId,
            int objectTypeId)
        {
            var objectTypeCondition = new WholeNumberCondition(
                "Object Type Artifact Type ID",
                NumericConditionEnum.EqualTo,
                objectTypeId);

            // we want to exclude system types
            var          textCondition          = new TextCondition("Name", TextConditionEnum.Like, "System");
            NotCondition excludeSystemCondition = textCondition.Negate();

            var condition = new CompositeCondition(
                objectTypeCondition,
                CompositeConditionEnum.And,
                excludeSystemCondition);

            var queryRequest = new QueryRequest
            {
                ObjectType = new ObjectTypeRef {
                    ArtifactTypeID = FIELD_OBJ_TYPE_ID
                },
                Condition = condition.ToQueryString(),
                Fields    = new List <FieldRef>
                {
                    //new FieldRef() { Name = "Name" },
                    new FieldRef {
                        Name = "Field Type"
                    }
                },
                IncludeIDWindow          = false,
                IncludeNameInQueryResult = true
            };

            int start = 0;

            // a document shouldn't have more than 1000 fields, I would hope
            const int LENGTH = 1000;

            var retVal = new List <Field>();

            QueryResult result = await objMgr.QueryAsync(workspaceId, queryRequest, start, LENGTH);

            foreach (RelativityObject field in result.Objects)
            {
                if (!field.FieldValuePairExists("Field Type"))
                {
                    continue;  // skip
                }
                // determine the field type
                string    fieldTypeName = field.FieldValues.First().Value.ToString();
                FieldType type;
                switch (fieldTypeName)
                {
                case FieldTypes.CURRENCY:
                    type = FieldType.Currency;
                    break;

                case FieldTypes.DATE:
                    type = FieldType.Date;
                    break;

                case FieldTypes.DECIMAL:
                    type = FieldType.Decimal;
                    break;

                case FieldTypes.FILE:
                    type = FieldType.File;
                    break;

                case FieldTypes.FIXED_LENGTH_TXT:
                    type = FieldType.FixedLengthText;
                    break;

                case FieldTypes.LONG_TXT:
                    type = FieldType.LongText;
                    break;

                case FieldTypes.MULTI_CHOICE:
                    type = FieldType.MultipleChoice;
                    break;

                case FieldTypes.MULTI_OBJECT:
                    type = FieldType.MultipleObject;
                    break;

                case FieldTypes.SINGLE_CHOICE:
                    type = FieldType.SingleChoice;
                    break;

                case FieldTypes.SINGLE_OBJECT:
                    type = FieldType.SingleObject;
                    break;

                case FieldTypes.USER:
                    type = FieldType.User;
                    break;

                case FieldTypes.WHOLE_NUMBER:
                    type = FieldType.WholeNumber;
                    break;

                case FieldTypes.YES_NO:
                    type = FieldType.YesNo;
                    break;

                default:
                    type = FieldType.Empty;
                    break;
                }

                var fieldToAdd = new Field
                {
                    ArtifactID = field.ArtifactID,
                    FieldType  = type,
                    Name       = field.Name
                };
                retVal.Add(fieldToAdd);
            }

            return(retVal);
        }
Example #36
0
 public CompositeConditionCommandArgs(CompositeCondition compositeCondition)
 {
     this.CompositeCondition = compositeCondition;
 }
Example #37
0
 public CompositeCondition GetClone()
 {
     CompositeCondition clone = new CompositeCondition();
     clone.Id = this.Id;
     clone.Operator = this.Operator;
     clone.Entity1 = new ConditionEntity();
     clone.Entity1.EntityReferenceId = this.Entity1.EntityReferenceId;
     clone.Entity1.EntityType = this.Entity1.EntityType;
     return clone;
 }
Example #38
0
    public virtual bool IsCompositeConditionMatched(CompositeCondition compositeCondition,
		                                            CompositeConditionWrapper compositeConditionWrapper,
		                                            AIBehavior behavior)
    {
        bool ret = false;
        switch(compositeCondition.Operator)
        {
        case LogicConjunction.None:
            ret = IsConditionEntityMatched(compositeCondition.Entity1,compositeConditionWrapper,behavior);
            break;
        case LogicConjunction.And:
            ret = IsConditionEntityMatched(compositeCondition.Entity1,compositeConditionWrapper,behavior);
            if(ret)
                ret = IsConditionEntityMatched(compositeCondition.Entity2,compositeConditionWrapper,behavior);
            break;
        case LogicConjunction.Or:
            ret = IsConditionEntityMatched(compositeCondition.Entity1,compositeConditionWrapper,behavior);
            if(ret == false)
                ret = IsConditionEntityMatched(compositeCondition.Entity2,compositeConditionWrapper,behavior);
            break;
        }
        return ret;
    }
Example #39
0
    /// <summary>
    /// Composites the condition to string description.
    /// </summary>
    public string GetCompositeConditionDescription(CompositeCondition compositeCondition,
                                                   CompositeConditionWrapper compositeConditionWrapper)
    {
        string LeftEntityDescription  = "";
        string RightEntityDescription = "";

        string refId = "";

        switch (compositeCondition.Entity1.EntityType)
        {
        case ConditionEntityType.AtomCondition:
            refId = compositeCondition.Entity1.EntityReferenceId;
            IEnumerable <AtomConditionData> AllAtomConditionData = compositeConditionWrapper.atomConditionDataArray.Where(x => x.Id == refId);
            if (AllAtomConditionData.Count() > 0)
            {
                AtomConditionData atomCondition = AllAtomConditionData.First();
                LeftEntityDescription = atomCondition.GetDescription();
            }
            break;

        case ConditionEntityType.ReferenceToComposite:
            refId = compositeCondition.Entity1.EntityReferenceId;
            IEnumerable <CompositeCondition> AllCompositeConditionData = compositeConditionWrapper.CompositeConditionArray.Where(x => x.Id == refId);
            if (AllCompositeConditionData.Count() > 0)
            {
                CompositeCondition referComposite = AllCompositeConditionData.Where(x => x.Id == refId).First();
                if (referComposite == compositeCondition)
                {
                    LeftEntityDescription = "Error !!! CompositeCondition - Id:" + compositeCondition.Id + " is referring to itself!";
                }
                else
                {
                    LeftEntityDescription = GetCompositeConditionDescription(referComposite, compositeConditionWrapper);
                }
            }
            break;
        }

        switch (compositeCondition.Entity2.EntityType)
        {
        case ConditionEntityType.AtomCondition:
            refId = compositeCondition.Entity2.EntityReferenceId;
            IEnumerable <AtomConditionData> AllAtomConditionData = compositeConditionWrapper.atomConditionDataArray.Where(x => x.Id == refId);
            if (AllAtomConditionData.Count() > 0)
            {
                AtomConditionData atomCondition = AllAtomConditionData.First();
                RightEntityDescription = atomCondition.GetDescription();
            }
            break;

        case ConditionEntityType.ReferenceToComposite:
            refId = compositeCondition.Entity2.EntityReferenceId;
            IEnumerable <CompositeCondition> AllCompositeConditionData = compositeConditionWrapper.CompositeConditionArray.Where(x => x.Id == refId);
            if (AllCompositeConditionData.Count() > 0)
            {
                CompositeCondition referComposite = AllCompositeConditionData.First();
                if (referComposite == compositeCondition)
                {
                    RightEntityDescription = "Error !!! CompositeCondition - Id:" + compositeCondition.Id + " is referring to itself!";
                }
                else
                {
                    RightEntityDescription = GetCompositeConditionDescription(referComposite, compositeConditionWrapper);
                }
            }
            break;
        }

        string ret = "({0} {1} {2})";

        switch (compositeCondition.Operator)
        {
        case LogicConjunction.None:
            ret = string.Format(ret, LeftEntityDescription, "", "");
            break;

        case LogicConjunction.And:
        case LogicConjunction.Or:
            ret = string.Format(ret, LeftEntityDescription, compositeCondition.Operator.ToString(), RightEntityDescription);
            break;
        }
        return(ret);
    }
Example #40
0
        /// <summary>
        /// Finds errors related to splitting Conditions
        /// 1. Condition value is repeated across multiple types
        /// 2. A Column/attribute is mapped but also used as a condition
        /// </summary>
        private void MatchConditionErrors()
        {
            List <LeftCellWrapper> leftCellWrappers = m_viewgenContext.AllWrappersForExtent;

            //Stores violating Discriminator (condition member) so that we dont repeat the same error
            Set <MemberPath> mappedConditionMembers = new Set <MemberPath>();

            //Both of these data-structs help in finding duplicate conditions
            Set <CompositeCondition> setOfconditions = new Set <CompositeCondition>(new ConditionComparer());
            Dictionary <CompositeCondition, LeftCellWrapper> firstLCWForCondition = new Dictionary <CompositeCondition, LeftCellWrapper>(new ConditionComparer());

            foreach (var leftCellWrapper in leftCellWrappers)
            {
                CompositeCondition condMembersValues = new CompositeCondition();

                CellQuery cellQuery = leftCellWrapper.OnlyInputCell.GetLeftQuery(m_viewgenContext.ViewTarget);

                foreach (MemberRestriction condition in cellQuery.GetConjunctsFromWhereClause())
                {
                    MemberPath memberPath = condition.RestrictedMemberSlot.MemberPath;

                    if (!m_domainMap.IsConditionMember(memberPath))
                    {
                        continue;
                    }

                    ScalarRestriction scalarCond = condition as ScalarRestriction;
                    //Check for mapping of Scalar member condition, ignore type conditions
                    if (scalarCond != null &&
                        !mappedConditionMembers.Contains(memberPath) &&                                                               /* prevents duplicate errors */
                        !leftCellWrapper.OnlyInputCell.CQuery.WhereClause.Equals(leftCellWrapper.OnlyInputCell.SQuery.WhereClause) && /* projection allowed when both conditions are equal */
                        !IsMemberPartOfNotNullCondition(leftCellWrappers, memberPath, m_viewgenContext.ViewTarget))
                    {
                        //This member should not be mapped
                        CheckThatConditionMemberIsNotMapped(memberPath, leftCellWrappers, mappedConditionMembers);
                    }

                    //If a not-null condition is specified on a nullable column,
                    //check that the property it is mapped to in the fragment is non-nullable,
                    //unless there is a not null condition on the property that is being mapped it self.
                    //Otherwise return an error.
                    if (m_viewgenContext.ViewTarget == ViewTarget.UpdateView)
                    {
                        if (scalarCond != null &&
                            memberPath.IsNullable && IsMemberPartOfNotNullCondition(new LeftCellWrapper[] { leftCellWrapper }, memberPath, m_viewgenContext.ViewTarget))
                        {
                            MemberPath rightMemberPath = GetRightMemberPath(memberPath, leftCellWrapper);
                            if (rightMemberPath != null && rightMemberPath.IsNullable &&
                                !IsMemberPartOfNotNullCondition(new LeftCellWrapper[] { leftCellWrapper }, rightMemberPath, m_viewgenContext.ViewTarget))
                            {
                                m_errorLog.AddEntry(new ErrorLog.Record(true, ViewGenErrorCode.ErrorPatternConditionError,
                                                                        Strings.Viewgen_ErrorPattern_NotNullConditionMappedToNullableMember(
                                                                            memberPath, rightMemberPath
                                                                            ), leftCellWrapper.OnlyInputCell, ""));
                            }
                        }
                    }

                    //CheckForDuplicateConditionValue
                    //discover a composite condition of the form {path1=x, path2=y, ...}
                    foreach (var element in condition.Domain.Values)
                    {
                        Set <Constant> values;
                        //if not in the dict, add it
                        if (!condMembersValues.TryGetValue(memberPath, out values))
                        {
                            values = new Set <Constant>(Constant.EqualityComparer);
                            condMembersValues.Add(memberPath, values);
                        }
                        values.Add(element);
                    }
                } //foreach condition

                if (condMembersValues.Count > 0) //it is possible that there are no condition members
                {
                    //Check if the composite condition has been encountered before
                    if (setOfconditions.Contains(condMembersValues))
                    {
                        //Extents may be Equal on right side (e.g: by some form of Refconstraint)
                        if (!RightSideEqual(firstLCWForCondition[condMembersValues], leftCellWrapper))
                        {
                            //error duplicate conditions
                            m_errorLog.AddEntry(new ErrorLog.Record(true, ViewGenErrorCode.ErrorPatternConditionError,
                                                                    Strings.Viewgen_ErrorPattern_DuplicateConditionValue(
                                                                        BuildCommaSeparatedErrorString <MemberPath>(condMembersValues.Keys)
                                                                        ),
                                                                    ToIEnum(firstLCWForCondition[condMembersValues].OnlyInputCell, leftCellWrapper.OnlyInputCell), ""));
                        }
                    }
                    else
                    {
                        setOfconditions.Add(condMembersValues);

                        //Remember which cell the condition came from.. used for error reporting
                        firstLCWForCondition.Add(condMembersValues, leftCellWrapper);
                    }
                }
            } //foreach fragment related to the Extent we are working on
        }