コード例 #1
0
ファイル: MetaData.cs プロジェクト: thejesh23/XmlRefactor
        private static Boolean IsMenuItemPointingToForm(string filename, string formName)
        {
            if (FormForMenuItem.ContainsKey(filename))
            {
                return(formName.ToLowerInvariant() == FormForMenuItem[filename].ToLowerInvariant());
            }

            if (File.Exists(filename))
            {
                XmlReader SourceFile = new XmlReader(filename);
                string    fileText   = SourceFile.Text();

                string objectName = MetaData.extractFromXML(fileText, "//AxMenuItemDisplay/Object");
                string objectType = MetaData.extractFromXML(fileText, "//AxMenuItemDisplay/ObjectType");
                if (objectType == string.Empty ||
                    objectType == "Form")
                {
                    FormForMenuItem.Add(filename, objectName);
                    if (objectName.ToLowerInvariant() == formName.ToLowerInvariant())
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #2
0
        public string Run(string input, int startAt = 0)
        {
            Match match = xpoMatch.Match(input, startAt);

            if (match.Success)
            {
                string xml          = input;
                string name         = MetaData.extractFromXML(xml, "//AxEnum/Name");
                string isExtensible = MetaData.extractFromXML(xml, "//AxEnum/IsExtensible");
                string useEnumValue = MetaData.extractFromXML(xml, "//AxEnum/UseEnumValue");

                if (useEnumValue == "No" && isExtensible != "true")
                {
                    XmlNodeList nodes         = MetaData.extractMultipleFromXML(xml, "//AxEnum/EnumValues/AxEnumValue/Value");
                    int         valueExpected = 1;
                    foreach (XmlNode node in nodes)
                    {
                        if (valueExpected != int.Parse(node.InnerText))
                        {
                            Debug.WriteLine(string.Format("{0}", name));
                        }
                        valueExpected++;
                    }
                }
            }

            return(input);
        }
        public string Run(string input, int startAt = 0)
        {
            Match match = xpoMatch.Match(input, startAt);

            if (match.Success)
            {
                string xml = match.Value;

                if (!xml.Contains("<Optional>"))
                {
                    string fieldName = MetaData.extractFromXML(xml, "//AxTableIndexField/DataField");
                    string indexName = MetaData.extractPreviousXMLElement("Name", match.Index, input);
                    string tableName = MetaData.extractNextXMLElement("Name", 1, input);
                    string token     = tableName + "\\" + indexName + "\\" + fieldName;

                    if (fieldsToMakeOptional.Contains(token.ToLowerInvariant()))
                    {
                        if (xml.Contains("<Tags>"))
                        {
                            throw new NotSupportedException();
                        }
                        if (xml.Contains("<IncludedColumn>"))
                        {
                            throw new NotSupportedException();
                        }

                        int endpos   = xml.IndexOf("</DataField>") + "</DataField>".Length;
                        int startPos = xml.LastIndexOf(Environment.NewLine, endpos);
                        int xmlPos   = xml.IndexOf("<DataField>");

                        string updatedInput = input.Insert(match.Index + endpos, xml.Substring(startPos, xmlPos - startPos) + "<Optional>Yes</Optional>");

                        string indexToken = "<Name>" + indexName + "</Name>";
                        int    indexPos   = updatedInput.IndexOf(indexToken);

                        int endpos2 = updatedInput.IndexOf("</IsSystemGenerated>", indexPos) + "</IsSystemGenerated>".Length;
                        if (endpos2 > indexPos)
                        {
                            int startPos2 = updatedInput.LastIndexOf(Environment.NewLine, endpos2);
                            int xmlPos2   = updatedInput.IndexOf("<IsSystemGenerated>", startPos2);

                            if (!updatedInput.Substring(indexPos, endpos2 - indexPos).Contains("IsManuallyUpdated"))
                            {
                                updatedInput = updatedInput.Insert(xmlPos2, "<IsManuallyUpdated>Yes</IsManuallyUpdated>" + updatedInput.Substring(startPos2, xmlPos2 - startPos2));
                            }
                        }
                        Hits++;
                        return(this.Run(updatedInput, match.Index + match.Length));
                    }
                    return(this.Run(input, match.Index + match.Length));
                }
            }

            return(input);
        }
コード例 #4
0
ファイル: RuleHardSeal.cs プロジェクト: thejesh23/XmlRefactor
        public string Run(string input, int startAt = 0)
        {
            if (!Scanner.FILENAME.Contains("Descriptor"))
            {
                return(input);
            }

            Match match = xpoMatch.Match(input, startAt);

            if (match.Success)
            {
                string xml           = input;
                string customization = MetaData.extractFromXML(xml, "//AxModelInfo/Customization");
                string locked        = MetaData.extractFromXML(xml, "//AxModelInfo/Locked");
                string updatedText   = "";

                if (customization == "")
                {
                    int pos = this.insertCustomizationAt(input);
                    updatedText = input.Insert(pos, "<Customization>DoNotAllow</Customization>\r\n  ");
                    input       = updatedText;
                }
                else if (customization != "DoNotAllow")
                {
                    string originalText = input;
                    int    startPos     = originalText.IndexOf("<Customization>");
                    int    endPos       = originalText.IndexOf("</Customization>") + "</Customization>".Length;

                    updatedText = originalText.Remove(startPos, endPos - startPos);
                    updatedText = updatedText.Insert(startPos, "<Customization>DoNotAllow</Customization>");

                    input = updatedText;
                }

                if (locked != "")
                {
                    string originalText = input;
                    int    startPos     = originalText.IndexOf("<Locked>");
                    int    endPos       = originalText.IndexOf("</Locked>") + "</Locked>".Length;
                    startPos = originalText.LastIndexOf("\n", startPos);
                    endPos   = originalText.IndexOf("\n", endPos);

                    updatedText = originalText.Remove(startPos, endPos - startPos);
                }

                if (updatedText != "")
                {
                    Hits++;
                    return(updatedText);
                }
            }

            return(input);
        }
コード例 #5
0
ファイル: MetaData.cs プロジェクト: thejesh23/XmlRefactor
        private static string getSymbolFromFile(string filename, string value)
        {
            if (File.Exists(filename))
            {
                XmlReader SourceFile = new XmlReader(filename);
                string    fileText   = SourceFile.Text();
                string    symbol     = MetaData.extractFromXML(fileText, "//AxEnum/EnumValues/AxEnumValue[Value=\"" + value + "\"]/Name");

                if (symbol == String.Empty && value == "0")
                {
                    symbol = MetaData.extractFromXML(fileText, "//AxEnum/EnumValues/AxEnumValue[not (Value)]/Name");
                    // Debug.WriteLine(string.Format("{2}: {0} does not have value {1}", filename, value, Scanner.FILENAME));
                }

                return(symbol);
            }
            return(String.Empty);
        }
コード例 #6
0
        public string Run(string input, int startAt = 0)
        {
            Match match = xpoMatch.Match(input, startAt);

            if (match.Success)
            {
                string xml = match.Value;

                if (!xml.Contains("<AllowDuplicates>"))
                {
                    string indexName = MetaData.extractFromXML(xml, "//AxTableIndex/Name");
                    Debug.WriteLine(string.Format("{0}.{1}", Scanner.FILENAME, indexName));
                    Hits++;
                }
                return(this.Run(input, match.Index + match.Length));
            }

            return(input);
        }
コード例 #7
0
ファイル: MetaData.cs プロジェクト: thejesh23/XmlRefactor
        private static string getTableNameFromQueryRangeSearch(string xml, string prefix, string postfix)
        {
            string sub = "/DataSources/AxQuerySimpleEmbeddedDataSource";

            for (int i = 0; i <= 10; i++)
            {
                string xPath = prefix;
                for (int j = 0; j < i; j++)
                {
                    xPath += sub;
                }
                xPath += postfix;

                string tableName = MetaData.extractFromXML(xml, xPath);
                if (tableName != String.Empty)
                {
                    return(tableName);
                }
            }
            return(String.Empty);
        }
コード例 #8
0
        public string Run(string input, int startAt = 0)
        {
            Match match = xpoMatch.Match(input, startAt);

            if (match.Success)
            {
                string xml = match.Value;

                if (xml.Contains("<Value>") &&
                    xml.Contains("<Field>"))
                {
                    //		<AxQuerySimpleDataSourceRange>
                    //			<Name>NamedCategoryHierarchyRoleRetail</Name>
                    //			<Field>NamedCategoryHierarchyRole</Field>
                    //			<Value>4</Value>
                    //		</AxQuerySimpleDataSourceRange>

                    string value = MetaData.extractFromXML(xml, "//AxQuerySimpleDataSourceRange/Value");

                    if (value.IndexOfAny(matchChars) != -1 &&
                        !value.Contains("(") &&
                        !value.Contains(">") &&
                        !value.Contains("<") &&
                        !value.Contains("..") &&
                        !value.Contains("!"))
                    {
                        string fieldName = MetaData.extractFromXML(xml, "//AxQuerySimpleDataSourceRange/Field");
                        string rangeName = MetaData.extractFromXML(xml, "//AxQuerySimpleDataSourceRange/Name");

                        string tableName = MetaData.getTableNameFromQueryRange(input, rangeName);

                        if (tableName == String.Empty)
                        {
                            Debug.WriteLine(string.Format("{0} has unknown table range {1} with value {2} on field {3}", Scanner.FILENAME, rangeName, value, fieldName));
                        }
                        string enumName = MetaData.getEnumFromTable(tableName, fieldName);

                        if (enumName != String.Empty &&
                            enumName.ToLowerInvariant() != "Boolean".ToLowerInvariant() &&
                            enumName.ToLowerInvariant() != "NoYes".ToLowerInvariant() &&
                            enumName.ToLowerInvariant() != "NoYesId".ToLowerInvariant())
                        {
                            string symbols = string.Empty;

                            foreach (var v in value.Split(','))
                            {
                                string symbol = MetaData.getSymbolFromEnum(enumName, v.Trim());

                                if (symbol == string.Empty)
                                {
//                                    Debug.WriteLine(string.Format("{0} is referencing unknown enum value. Enum={1} with value {2}", Scanner.FILENAME, enumName, v));
                                    break;
                                }
                                Debug.WriteLine(string.Format("{0};{1};{2}", enumName, v, symbol));

                                if (symbols != string.Empty)
                                {
                                    symbols += ", " + symbol;
                                }
                                else
                                {
                                    symbols = symbol;
                                }
                            }
                            if (symbols != "")
                            {
                                string originalText = match.Value;
                                int    startPos     = originalText.IndexOf("<Value>");
                                int    endPos       = originalText.IndexOf("</Value>") + "</Value>".Length;
                                string updatedText;
                                updatedText = originalText.Remove(startPos, endPos - startPos);
                                updatedText = updatedText.Insert(startPos, "<Value>" + symbols + "</Value>");

                                string updatedInput = input.Remove(match.Index, match.Length);
                                updatedInput = updatedInput.Insert(match.Index, updatedText);
                                Hits++;
                                return(this.Run(updatedInput, match.Index + match.Length));
                            }
                            else
                            {
                                //Debug.WriteLine(string.Format("{0} has integer based range {1} on enum {2} on field {3}.{4}", Scanner.FILENAME, value, enumName, tableName, fieldName));
                                //  Debug.WriteLine(string.Format("{0};{1};{2};{3};{4}", Scanner.FILENAME, value, enumName, tableName, fieldName));
                            }
                        }
                    }
                }
                return(this.Run(input, match.Index + match.Length));
            }

            return(input);
        }
コード例 #9
0
        public string Run(string input, int startAt = 0)
        {
            Match match = xpoMatch.Match(input, startAt);

            if (match.Success)
            {
                string xml = match.Value;

                if (!xml.Contains("<ValueStr>") &&
                    (xml.Contains("AxTableRelationConstraintFixed") ||
                     xml.Contains("AxTableRelationConstraintRelatedFixed")))
                {
                    //            <AxTableRelationConstraint xmlns=""
                    //					i:type="AxTableRelationConstraintFixed">
                    //					<Name>InventAccountType</Name>
                    //					<Field>InventAccountType</Field>
                    //					<Value>21</Value>
                    //					<ValueStr>InventAccountType::SalesIssue</ValueStr>
                    //				</AxTableRelationConstraint>

                    int startPos = xml.IndexOf("xmlns") - 1;
                    int endPos   = xml.IndexOf(">");
                    xml = xml.Remove(startPos, endPos - startPos);  //Remove the i:type...

                    string fieldName = MetaData.extractFromXML(xml, "//AxTableRelationConstraint/Field");

                    string value = MetaData.extractFromXML(xml, "//AxTableRelationConstraint/Value");
                    if (value == String.Empty)
                    {
                        //default
                        value = "0";
                    }
                    string enumName = "";
                    string token    = "Field";
                    if (fieldName != "")
                    {
                        enumName = MetaData.extractFromXML(input, "//AxTable/Fields/AxTableField[Name=\"" + fieldName + "\"]/EnumType");
                    }
                    else
                    {
                        string relatedFieldName = MetaData.extractFromXML(xml, "//AxTableRelationConstraint/RelatedField");
                        string sub              = input.Substring(1, match.Index);
                        int    pos              = sub.LastIndexOf("<RelatedTable>") + "<RelatedTable>".Length;
                        int    pos2             = sub.IndexOf("</RelatedTable>", pos);
                        string relatedTableName = sub.Substring(pos, pos2 - pos);
                        fieldName = relatedTableName + "." + relatedFieldName;
                        enumName  = MetaData.getEnumFromTable(relatedTableName, relatedFieldName);
                        token     = "RelatedField";
                    }
                    if (enumName != "")
                    {
                        string symbol = MetaData.getSymbolFromEnum(enumName, value);
                        if (symbol != "")
                        {
                            string originalText = match.Value;
                            startPos = originalText.IndexOf("<Value>");
                            endPos   = originalText.IndexOf("</Value>") + "</Value>".Length;
                            string updatedText;
                            if (startPos != -1)
                            {
                                updatedText = originalText.Remove(startPos, endPos - startPos);
                            }
                            else
                            {
                                startPos = originalText.IndexOf("</Name>") + "</Name>".Length;
                                endPos   = originalText.IndexOf("<" + token + ">");
                                string whiteSpace = originalText.Substring(startPos, endPos - startPos);
                                int    iPos       = whiteSpace.IndexOf("<");
                                if (iPos != -1)
                                {
                                    whiteSpace = whiteSpace.Substring(1, iPos - 1);
                                }
                                startPos    = originalText.IndexOf("</" + token + ">") + ("</" + token + ">").Length;
                                updatedText = originalText.Insert(startPos, whiteSpace);
                                startPos   += whiteSpace.Length;
                            }
                            updatedText = updatedText.Insert(startPos, "<ValueStr>" + enumName + "::" + symbol + "</ValueStr>");

                            string updatedInput = input.Remove(match.Index, match.Length);
                            updatedInput = updatedInput.Insert(match.Index, updatedText);
                            Hits++;
                            return(this.Run(updatedInput, match.Index + match.Length));
                        }
                        else
                        {
                            if (enumName != "NoYes" &&
                                enumName != "Boolean")
                            {
                                Debug.WriteLine(string.Format("{0} references non existing value {1} in enum {2} via constraint on field {3}", Scanner.FILENAME, value, enumName, fieldName));
                            }
                        }
                    }
                }
                return(this.Run(input, match.Index + match.Length));
            }

            return(input);
        }