def createSection(self, entityList, id, title, summary='', priority=1):
        if entityList and not summary:
            section = sectionModel.Section(id,
                                           title,
                                           sectionSummary=self.sectionSummary(
                                               entityList[0].type),
                                           priority=priority)
        else:
            section = sectionModel.Section(id,
                                           title,
                                           sectionSummary=summary,
                                           priority=priority)

        for entity in entityList:
            diagrams = []
            for diagram in entity.diagrams:
                caption = self.informationRetriever.getRelations(
                    diagram, self.baseUri + 'Caption')
                if caption:
                    caption = caption[0][1]

                diagrams.append({'uri': diagram, 'caption': caption})

            entitySection = sectionModel.Section(
                explanationHelper.getNameFromUri(entity.uri),
                explanationHelper.getNameOfEntity(entity),
                entityType=explanationHelper.getNameFromUri(entity.type),
                sectionSummary='',
                sectionTextContent=[
                    (explanationHelper.getNameFromUri(content[0]), content[1])
                    for content in entity.dataTypeProperties
                ],
                sectionDiagrams=diagrams)
            section.addChild(entitySection.toDict())
        return section
Beispiel #2
0
def getTypeOptionDiv():
    entityType = request.form.get('entityType', '')

    if (entityType):
        entityType = json.loads(entityType)
        for eo in entityType['entityOptions']:
            eo['uri'] = explanationHelper.getNameFromUri(eo['uri'])
            eo['type'] = explanationHelper.getNameFromUri(
                queryManager.getTypeOfIndividual(baseUri + eo['uri']))

        return render_template('typeOptionDiv.html', type=entityType)
    return ''
Beispiel #3
0
    def __repr__(self):
        output = "{{entities: [{entities}], relations: [{relations}]}}"
        entitiesStr = ""
        relationsStr = ""
        entitiesEnd = len(self.entities) - 1
        relationsEnd = len(self.relations) - 1

        for index, entity in enumerate(self.entities):
            if index < entitiesEnd:
                entitiesStr += explanationHelper.getNameFromUri(
                    entity.uri) + ', '
            else:
                entitiesStr += explanationHelper.getNameFromUri(entity.uri)

        for index, relation in enumerate(self.relations):
            if index < relationsEnd:
                relationsStr += '(' + explanationHelper.getNameFromUri(
                    relation.name) + ', ' + explanationHelper.getNameFromUri(
                        relation.source
                    ) + ', ' + explanationHelper.getNameFromUri(
                        relation.target) + ')' + ', '
            else:
                relationsStr += '(' + explanationHelper.getNameFromUri(
                    relation.name) + ', ' + explanationHelper.getNameFromUri(
                        relation.source
                    ) + ', ' + explanationHelper.getNameFromUri(
                        relation.target) + ')'

        return output.format(entities=entitiesStr, relations=relationsStr)
    def generateGeneralSummary(self, structure, summaryText):
        question = self.getQuestion(summaryText)
        expTemplate = sectionModel.Template(question, summaryText)

        if (not structure.entities):
            return sectionModel.Template(
                question,
                '<font style="color:red;font-weight:bold;font-size:20">No documented data on the architectural patterns in this view was found.</font>'
            )

        types = {}
        for entity in structure.entities:
            eUri = explanationHelper.getNameFromUri(entity.type)
            if (not eUri in types.keys()):
                types[eUri] = []
            types[eUri].append(entity)

        for entityType, entities in types.items():
            expTemplate.addSection(
                self.createSection(
                    entities, entityType + '_section',
                    self.pluralEngine.plural(
                        explanationHelper.formatName(entityType), 3)).toDict())

        return expTemplate
 def getEntityFont(self, entityUri):
     words = [
         word.lower() for word in re.findall(
             '[A-Z][^A-Z]*', explanationHelper.getNameFromUri(entityUri))
     ]
     entityFont = '-'.join(words) + '-font'
     return entityFont
    def classesToText(self, entities):
        def addEntityType(entity, entityType, entityTypes):
            if entityType not in list(entityTypes.keys()):
                entityTypes[entityType] = []

            entityTypes[entityType].append(entity)

        entityTypes = {}
        for entity in entities:
            entityType = explanationHelper.getNameFromUri(entity.type)
            if entityType and not 'dummy' in entityType:
                addEntityType(entity, entityType, entityTypes)

        text = ''
        for index, entityType in enumerate(entityTypes):
            size = str(len(entityTypes[entityType]))
            text += self.styledName(
                size + ' ' + self.pluralEngine.plural(
                    explanationHelper.formatName(entityType), size),
                'class-font', self.baseUri + entityType)

            if index < len(entityTypes) - 2:
                text += ', '
            elif index == len(entityTypes) - 2:
                text += ' and '

        return text
Beispiel #7
0
    def getManualExplanation(self, types, relations):
        es = ontologyStructureModel.EntityStructure()
        entitiesToBeFiltered = []

        for entityType in types:
            if entityType['option'] == 'all':
                entities = self.ir.getIndividualsByType(entityType['uri'])
                for entityUri in entities:
                    es.addEntity(entityUri)

            elif entityType['option'] == 'only_related':
                entities = self.ir.getIndividualsByType(entityType['uri'])
                for entityUri in entities:
                    entitiesToBeFiltered.append(entityUri) 
                    es.addEntity(entityUri)
            elif entityType['option'] == 'specific':
                es.addEntity(entityType['entityUri'])

        for relation in relations:
            entityRelations = self.ir.getRelationsByType(relation['source'], relation['name'], relation['target'])
            for entityRelation in entityRelations:
                es.addRelation(explanationHelper.getNameFromUri(entityRelation['name']), entityRelation['source'], entityRelation['target'])

        entitiesWithRelations = list(set([rel.source for rel in es.relations] + [rel.target for rel in es.relations]))
        
        for e in entitiesToBeFiltered:
            if e not in entitiesWithRelations:
                es.removeEntity(e)

        return es
Beispiel #8
0
    def constructMetaModel(self):
        allObjectsAndRelations = self.ir.getAllObjectsAndRelations()
        es = ontologyStructureModel.EntityStructure()
        entityToUriMap = {}
        for item in allObjectsAndRelations:
            e1 = ontologyStructureModel.Entity(item[0])
            e2 = ontologyStructureModel.Entity(item[2])
            es.addEntity(e1)
            es.addEntity(e2)
            entityToUriMap[explanationHelper.getNameFromUri(item[0])] = e1
            entityToUriMap[explanationHelper.getNameFromUri(item[2])] = e2
            es.addRelation(item[1], item[0], item[2])
            
        duplicates = {}
        for item in es.entities:
            if not explanationHelper.getNameFromUri(item.uri) in list(duplicates.keys()):
                duplicates[explanationHelper.getNameFromUri(item.uri)] = 1
            else:
                print('We got a duplicate key!')
                break

        print(duplicates)

        types = set()
        for item in es.entities:
            types.add(item.type)
        
        types = list(types)
        print('Types:')
        print(types)

        def getEntityType(entityUri):
            return entityToUriMap[explanationHelper.getNameFromUri(entityUri)].type

        typeRelations = []
        for item in es.relations:
            typeRelations.append({'name': item.name, 'source': getEntityType(item.source), 'target': getEntityType(item.target)})
        
        typeRelations = [dict(s) for s in set(frozenset(d.items()) for d in typeRelations)]

        print('Type relations:')
        print(typeRelations)

        typesAndRelations = {'types': types, 'relations': typeRelations}

        with open('C:/Users/SAMSUNG/Documents/ThesisProject/MasterThesisCode/Master-Thesis---OD3/Presentation/FlaskServer/static/ontologyRelations.js', 'w') as f:
            f.write(json.dumps(typesAndRelations))
Beispiel #9
0
 def addRecursiveEntitiesAndRelations(self, entityStructure, subjectUri, predicateUri, objectTypeUri='', callback=None):
     for o in self.ir.getRelations(subjectUri, predicateUri, objectTypeUri):
         entityStructure.addEntity(o[1])
         entityStructure.addRelation(explanationHelper.getNameFromUri(predicateUri), subjectUri, o[1])
         self.addRecursiveEntitiesAndRelations(entityStructure, o[1], predicateUri, objectTypeUri, callback)
         if callback:
             callback(entityStructure, o[1])
     return entityStructure
 def sectionSummary(self, typeUri):
     name = self.styledName(self.pluralEngine.plural(
         explanationHelper.formatName(
             explanationHelper.getNameFromUri(typeUri)), 2),
                            'class-font',
                            entityType=typeUri)
     summary = 'This section lists the {name} and their descriptions'
     summary = summary.format(name=name)
     return summary
    def generatePopupFigureDescription(self, figureUri):
        figureEntity = ontologyStructureModel.Entity(figureUri)

        template = explanationHelper.openText(
            'static/explanationTemplates/FigureSummary.txt')

        relatedEntityUris = [
            ontologyStructureModel.Entity(entity[1])
            for entity in self.informationRetriever.getRelations(
                figureUri, self.baseUri + 'models')
        ]
        summary = template.format(
            classes=self.classesToText(relatedEntityUris))
        question = {'sub': 'View diagrams', 'orginial': ''}

        figureid = 'popup_' + explanationHelper.diagramUriToFileName(
            explanationHelper.getNameFromUri(figureUri))
        figuretitle = explanationHelper.getNameOfEntity(figureEntity)
        figureSummary = ''

        entityid = 'popup_entity_overview_' + explanationHelper.diagramUriToFileName(
            explanationHelper.getNameFromUri(figureUri))
        entitySummary = ''

        relatedEntities = relatedEntityUris
        figureSection = sectionModel.Section(
            figureid,
            figuretitle,
            figureSummary,
            priority=5,
            sectionTextContent=[
                (explanationHelper.getNameFromUri(content[0]), content[1])
                for content in figureEntity.dataTypeProperties
            ])
        entitySection = self.createSection(relatedEntities, entityid,
                                           'Entities related to diagram',
                                           entitySummary)

        template = sectionModel.Template(question, summary)
        template.addSection(figureSection.toDict())
        template.addSection(entitySection.toDict())

        return template
Beispiel #12
0
def getDirectSuperClassParentMap():
    classes = request.form.getlist('types[]')
    if classes:
        parentMap = {}
        for c in classes:
            parent = queryManager.getDirectSuperClass(c)
            parentMap[explanationHelper.getNameFromUri(c)] = {
                'child': c,
                'parent': parent
            }
        return json.dumps(parentMap)
    return ''
    def styledName(self, text, fontType='', entityType=''):
        if entityType:
            entitySupertypes = self.informationRetriever.getSuperClasses(
                entityType)
        else:
            entitySupertypes = self.informationRetriever.getSuperClasses(text)

        eType = entityType
        if entitySupertypes:
            if self.baseUri + 'DevelopmentStructure' in entitySupertypes:
                eType = 'DevelopmentStructure'

            elif self.baseUri + 'DevelopmentBehavior' in entitySupertypes:
                eType = 'DevelopmentBehavior'

            elif self.baseUri + 'LogicalStructure' in entitySupertypes:
                eType = 'LogicalStructure'

            elif self.baseUri + 'LogicalBehavior' in entitySupertypes:
                eType = 'LogicalBehavior'

            elif self.baseUri + 'UIStructure' in entitySupertypes:
                eType = 'UIStructure'

            elif self.baseUri + 'UIBehavior' in entitySupertypes:
                eType = 'UIBehavior'

            elif self.baseUri + 'PhysicalStructure' in entitySupertypes:
                eType = 'PhysicalStructure'

        name = '<span class="{fontType} {entityFontName}">{textName}</span>'
        if entityType:
            name = name.format(fontType=fontType,
                               entityFontName=self.getEntityFont(eType),
                               textName=text)
        else:
            name = name.format(fontType=fontType,
                               entityFontName=self.getEntityFont(text),
                               textName=explanationHelper.getNameFromUri(text))
        return name
    def getOverviewDiagrams(self, structure, overviewGroup):
        logical = [
            l.uri for l in list(
                filter(lambda e: self.baseUri + overviewGroup in e.supertypes,
                       structure.entities))
        ]
        diagrams = [
            d[1] for d in self.informationRetriever.getRelations(
                sub=logical[0], objType=self.baseUri + 'Diagram')
        ]

        overviewDiagrams = {}
        for diagram in diagrams:
            fullDiagramRelations = self.informationRetriever.getRelations(
                sub=diagram)
            diagramRelations = [dr[1] for dr in fullDiagramRelations]
            if set(logical) < set(diagramRelations):
                overviewDiagramDescription = [
                    description[1] for description in fullDiagramRelations
                    if '#Description' in description[0]
                ][0]
                overviewDiagramCaption = [
                    caption[1] for caption in fullDiagramRelations
                    if '#Caption' in caption[0]
                ][0]

                overviewDiagrams[diagram] = {
                    'name':
                    explanationHelper.formatDiagramName(
                        explanationHelper.getNameFromUri(diagram)),
                    'description':
                    overviewDiagramDescription,
                    'caption':
                    overviewDiagramCaption
                }
        return overviewDiagrams
Beispiel #15
0
 def getEntityType(entityUri):
     return entityToUriMap[explanationHelper.getNameFromUri(entityUri)].type