Пример #1
0
        /// <summary>
        /// Adiciona uma nova coluna a uma tabela existente
        /// </summary>
        /// <param name="xDataTable">datatable</param>
        /// <param name="xDataTableColumn">nova coluna</param>
        private void updateDataTable(XDataTable xDataTable, XDataTableColumn xDataTableColumn)
        {
            List <XDataTableColumn> xDataTableColumns = xDataTable.getDataTableColumns();

            xDataTableColumns.Add(xDataTableColumn);
            xDataTable.setDataTableColumns(xDataTableColumns);
        }
Пример #2
0
        private XWorkbook createXFormulas(string expressionText, XWorkbook xWorkbook)
        {
            PSWOclCompiler oclCompiler = new PSWOclCompiler(environment, tracker);
            List <object>  nodes       = oclCompiler.compileOclStream(expressionText, "",
                                                                      new StreamWriter(Console.OpenStandardOutput()), typeof(CSTContextDeclarationCS));
            CSTOperationContextCS operationContextCS = ((CSTOperationContextCS)nodes[0]);
            var constraints = operationContextCS.getConstraintsNodesCS();
            CSTOperationConstraintCS operationConstraint = (CSTOperationConstraintCS)constraints[0];
            ExpressionInOcl          expressionInOcl     = operationConstraint.getExpressionInOCL();
            OclExpressionImpl        bodyExpression      = (OclExpressionImpl)expressionInOcl.getBodyExpression();

            XFormulaCreatorVisitor visitor = new XFormulaCreatorVisitor();

            bodyExpression.accept(visitor);
            string formula = visitor.getFormula();

            CoreClassifier classifier  = (CoreClassifier)expressionInOcl.getContextualElement();
            XDataTable     targetTable = getTargetTable(xWorkbook, classifier);

            var operation = operationContextCS.getOperationNodeCS();
            var name      = operation.getOperationName();
            XDataTableColumn targetColumn =
                targetTable.getDataTableColumns().FirstOrDefault(c => c.getName().Equals(name));

            if (targetColumn == null)
            {
                throw new Exception("Coluna não encontrada!");
            }

            XTextExp xtext = new XTextExp();

            xtext.setTextSymbol(formula);
            targetColumn.setDataContent(xtext);

            MessageBox.Show(formula);

            var extraColumns = visitor.getExtraColumns();

            foreach (KeyValuePair <string, string> pair in extraColumns)
            {
                string columnName    = pair.Key;
                string columnFormula = pair.Value;

                targetTable = getTargetTable(xWorkbook, visitor.getCurrentClassifier());

                var newTableColumn = new XDataTableColumn();
                newTableColumn.setName(columnName);
                newTableColumn.setDataTable(targetTable);
                updateDataTable(targetTable, newTableColumn);

                XTextExp xColumnFormula = new XTextExp();
                xColumnFormula.setTextSymbol(columnFormula);
                newTableColumn.setDataContent(xColumnFormula);
            }

            return(xWorkbook);
        }
Пример #3
0
 /// <summary>
 /// Cria colunas na tabela em questão para cada association end com multiplicidade 1 do classifier
 /// </summary>
 /// <param name="model">modelo onde se encontra o classifier</param>
 /// <param name="coreClassifier">classifier</param>
 /// <param name="xDataTable">tabela</param>
 private void createAssociationColumn(CoreModel model, CoreClassifier coreClassifier, XDataTable xDataTable)
 {
     foreach (CoreAssociationEnd associationEnd in model.getAssociationEndsForClassifier(coreClassifier))
     {
         if (associationEnd.isOneMultiplicity() && associationEnd.isMandatory())
         {
             XDataTableColumn xDataTableColumn = new XDataTableColumn();
             xDataTableColumn.setXReference(associationEnd.getType().getName());
             xDataTableColumn.setName(associationEnd.getName());
             xDataTableColumn.setDataTable(xDataTable);
             updateDataTable(xDataTable, xDataTableColumn);
         }
     }
 }
Пример #4
0
        /// <summary>
        /// Cria colunas na tabela em questão para cada feature do classifier
        /// </summary>
        /// <param name="coreClassifier">classifier</param>
        /// <param name="xDataTable">tabela</param>
        /// <param name="model">modelo</param>
        private void createFeatureColumns(CoreClassifier coreClassifier, XDataTable xDataTable, CoreModelImpl model)
        {
            List <object> features = new List <object>();

            features.AddRange(coreClassifier.getClassifierFeatures().Where(f => f.GetType() == typeof(CoreAttributeImpl)));

            var keyAttribute = features.FirstOrDefault(f => ((CoreAttributeImpl)f).hasStereotype("Id"));

            if (keyAttribute != null)
            {
                xDataTable.setKeyIndex(features.IndexOf(keyAttribute) + 1);
            }

            features.AddRange(coreClassifier.getClassifierFeatures().Where(f => f.GetType() == typeof(CoreOperationImpl)));

            foreach (CoreFeature feature in features)
            {
                XDataTableColumn xDataTableColumn = new XDataTableColumn();
                xDataTableColumn.setName(feature.getName());
                xDataTableColumn.setDataTable(xDataTable);
                updateDataTable(xDataTable, xDataTableColumn);

                if (feature is CoreAttributeImpl)
                {
                    var    featureImpl = (CoreAttributeImpl)feature;
                    string featureName = featureImpl.getFeatureType().getName();
                    if (coreClassifier.isEnumeration())
                    {
                        xDataTableColumn.setXReference(featureName);
                    }
                    else
                    {
                        var enumerations = getEnumerations(model);
                        if (enumerations.FirstOrDefault(e => e.getName() == featureName) != null)
                        {
                            xDataTableColumn.setXReference(featureName);
                        }
                    }
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Retorna a representação de uma planilha em memória que satisfaz o modelo passado como parâmetro
        /// </summary>
        /// <param name="classDiagramPath">caminho para o arquivo .classdiagram que contém o modelo</param>
        /// <returns>represetação da planilha em memória</returns>
        public XWorkbook createXWorkbook(string classDiagramPath)
        {
            ModelReader   reader = new VscdReader(classDiagramPath);
            CoreModelImpl model  = (CoreModelImpl)reader.getModel();

            OclTypesFactory.setEnvironment(model);

            XWorkbook xWorkbook = new XWorkbook();

            xWorkbook.setName(model.getName());

            environment = model.getEnvironmentWithoutParents();
            IEnumerable <CoreClassifier> modelClasses = getClasses(model);

            foreach (CoreClassifier coreClassifier in modelClasses)
            {
                XWorksheet xWorksheet = new XWorksheet();
                xWorksheet.setName(coreClassifier.getName());
                xWorksheet.setWorkbook(xWorkbook);
                updateWorkbook(xWorkbook, xWorksheet);

                XDataTable xDataTable = new XDataTable();
                xDataTable.setName(coreClassifier.getName());
                xDataTable.setWorksheet(xWorksheet);
                updateWorksheet(xWorksheet, xDataTable);

                createFeatureColumns(coreClassifier, xDataTable, model);
                createAssociationColumn(model, coreClassifier, xDataTable);
            }

            IEnumerable <CoreClassifier> enumerations = getEnumerations(model);
            var iEnumerable = enumerations as IList <CoreClassifier> ?? enumerations.ToList();

            if (enumerations != null && iEnumerable.Any())
            {
                foreach (CoreClassifier enumeration in iEnumerable)
                {
                    XWorksheet xWorksheet = new XWorksheet();
                    xWorksheet.setName(enumeration.getName());
                    xWorksheet.setWorkbook(xWorkbook);
                    updateWorkbook(xWorkbook, xWorksheet);

                    XDataTable xDataTable = new XDataTable();
                    xDataTable.setName(enumeration.getName());
                    xDataTable.setWorksheet(xWorksheet);
                    updateWorksheet(xWorksheet, xDataTable);

                    XDataTableColumn xDataTableColumn = new XDataTableColumn();
                    xDataTableColumn.setName(enumeration.getName());
                    xDataTableColumn.setDataTable(xDataTable);
                    updateDataTable(xDataTable, xDataTableColumn);

                    XDataArray dataArray   = new XDataArray();
                    var        arraySymbol =
                        (from CoreAttributeImpl attribute in
                         enumeration.getClassifierFeatures().Where(f => f is CoreAttributeImpl)
                         select attribute.getName()).ToList();
                    dataArray.setArray(arraySymbol);
                    xDataTableColumn.setDataContent(dataArray);
                }
            }

            return(xWorkbook);
        }