Ejemplo n.º 1
0
        private IEnumerable <CoreClassifier> getEnumerations(CoreModelImpl model)
        {
            var enumStereotype =
                (CoreStereotypeImpl)
                model.getAllStereotypes().FirstOrDefault(s => ((CoreStereotypeImpl)s).getName().Equals("Enumeration"));

            return(enumStereotype != null?enumStereotype.getExtendedElement().Cast <CoreClassifier>().ToList() : new List <CoreClassifier>());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Retorna todas as classes existente em um determinado modelo
        /// </summary>
        /// <param name="model">modelo</param>
        /// <returns></returns>
        private IEnumerable <CoreClassifier> getClasses(CoreModelImpl model)
        {
            var classes = environment.getAllOfType(typeof(CoreClassifierImpl));
            List <CoreClassifier> realClasses = new List <CoreClassifier>();

            foreach (CoreClassifierImpl classifier in classes)
            {
                if (!model.isPrimitiveType(classifier) && !classifier.isEnumeration() && !(classifier is CoreDataTypeImpl))
                {
                    realClasses.Add(classifier);
                }
            }

            return(realClasses);
        }
Ejemplo n.º 3
0
        public CoreModel getModel(XNamespace xnamespace)
        {
            if (coreModel != null)
            {
                return(coreModel);
            }

            xcoreModel = doc.Element(xnamespace + "logicalClassDesignerModel");

            if (xcoreModel != null)
            {
                coreModel = new CoreModelImpl();
                var name = xcoreModel.Attribute("name");
                coreModel.setName(name != null ? name.Value : "");
                var xcoreModelNamespace = xcoreModel.Element(xnamespace + "packagedElements");

                if (xcoreModelNamespace != null)
                {
                    CoreNamespace coreNamespace = new CoreNamespaceImpl();

                    var xhaspackages = xcoreModelNamespace.Element(xnamespace + "logicalClassDesignerModelHasPackages");
                    if (xhaspackages != null)
                    {
                        var xpackages = xhaspackages.Elements(xnamespace + "package");

                        // all model datatypes
                        var xdatatypes = xcoreModelNamespace.Descendants(xnamespace + "referencedType");
                        foreach (var xdatatype in xdatatypes.Where(x => !belongsPackages(x, xpackages)))
                        {
                            createDataType(coreNamespace, coreModel, xdatatype);
                        }

                        foreach (var xpackage in xpackages)
                        {
                            createPackage(xnamespace, coreNamespace, coreModel, xpackage);
                        }
                    }

                    // fill model types
                    fillModelElementTypes();
                }
            }

            return(coreModel);
        }
Ejemplo n.º 4
0
        public CoreModel getModel(XNamespace xnamespace)
        {
            if (coreModel != null)
            {
                return(coreModel);
            }

            var xcoreModel = doc.Descendants(xnamespace + "Model").FirstOrDefault();

            if (xcoreModel != null)
            {
                coreModel = new CoreModelImpl();
                var xcoreModelNamespace = xcoreModel.Element(xnamespace + "Namespace.ownedElement");

                if (xcoreModelNamespace != null)
                {
                    CoreNamespace coreNamespace = new CoreNamespaceImpl();

                    // all model datatypes
                    var xdatatypes = xcoreModelNamespace.Descendants(xnamespace + "DataType");
                    foreach (var xdatatype in xdatatypes)
                    {
                        createDataType(coreNamespace, coreModel, xdatatype);
                    }

                    var xmodelClasses = xcoreModelNamespace.Elements(xnamespace + "Class");
                    createModelClasses(xnamespace, coreNamespace, coreModel, xmodelClasses);

                    var xpackages = xcoreModelNamespace.Elements(xnamespace + "Package");
                    foreach (var xpackage in xpackages)
                    {
                        createPackage(xnamespace, coreNamespace, coreModel, xpackage);
                    }

                    // all model generalizations
                    var xgeneralizations = getAllAvailableGeneralizations(xnamespace, xcoreModelNamespace);
                    foreach (var xgeneralization in xgeneralizations)
                    {
                        createGeneralization(xnamespace, xgeneralization);
                    }

                    // create all model abstractions
                    var xabstractions = xcoreModelNamespace.Descendants(xnamespace + "Abstraction");
                    foreach (var xabstraction in xabstractions)
                    {
                        createAbstraction(xabstraction);
                    }

                    // fill model types
                    fillModelElementTypes();

                    // all associations classes
                    var xassociationclasses = xcoreModelNamespace.Descendants(xnamespace + "AssociationClass");
                    foreach (var xassociationclass in xassociationclasses)
                    {
                        CoreAssociationClass associationClass = (CoreAssociationClass)createAssociation(xnamespace, xassociationclass, new CoreAssociationClassImpl());
                        fillModelElementTypes();
                        updateElemOwnedElements(coreModel, associationClass);

                        associationClass.setElemOwner(coreModel);
                        updateElemOwnedElements(coreModel, associationClass);
                        associationClass.setNamespace(coreNamespace);
                        updateNamespaceElemOwnedElements(coreNamespace, associationClass);

                        var xclassifierfeature = xassociationclass.Element(xnamespace + "Classifier.feature");
                        if (xclassifierfeature != null)
                        {
                            var xoperations = xclassifierfeature.Elements(xnamespace + "Operation");
                            foreach (var xoperation in xoperations)
                            {
                                createOperation(xnamespace, coreNamespace, associationClass, xoperation);
                            }

                            var xattributes = xclassifierfeature.Elements(xnamespace + "Attribute");
                            foreach (var xattribute in xattributes)
                            {
                                createAttribute(coreNamespace, associationClass, xattribute);
                            }
                        }
                    }

                    // all model associations
                    var xassociations = xcoreModelNamespace.Descendants(xnamespace + "Association");
                    foreach (var xassociation in xassociations)
                    {
                        CoreAssociation coreAssociation = createAssociation(xnamespace, xassociation, new CoreAssociationImpl());
                        fillModelElementTypes();
                        //coreModel.addAssociation(coreAssociation);
                        updateElemOwnedElements(coreModel, coreAssociation);
                    }
                }
            }

            return(coreModel);
        }
Ejemplo n.º 5
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);
                        }
                    }
                }
            }
        }
Ejemplo n.º 6
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);
        }