Esempio n. 1
1
	def inspectComposition(self,system):
		signalsToBuild = []

		#simple properties: instance of datatype (int, float, etc.)
		simpleProperties = [prop for prop in system.ownedAttribute if not isinstance(prop,Port) and isinstance(prop.type,DataType)]
		
		if isinstance(system,Signal):
			self.constructors.append("super();")
			self.constructors.append("init%sMembers();" % self.id)
			self.constructors.append("init%sCollections();" % self.id)
			self.constructors.append("init%sElaborations();" % self.id)
			self.cArgs["t"] = "Timepoint" #NOTE - this means variable called "t" is probably reserved?
		gl.log("Simple Properties: " + str([str(pt.name) for pt in simpleProperties]))
		for p in simpleProperties:
			gl.log("Analyzing Property: %s" % p.name)
			#arguments for time varying map construction
			readOnly = derived = plottable = projection = default = filename = profile = None
			if StereotypesHelper.hasStereotype(p,TVM):
				plottable = EU.getStypePropValue(p, TVM, "plottable")[0]
				projection = EU.getStypePropValue(p, TVM, "projection")[0]
				readOnly = p.isReadOnly()
				derived = p.isDerived()
				default = (p.default if p.default != "" else None)
				if projection and not derived: profile = EU.getStypePropValue(p, TVM, "profile")
				if profile and len(profile)>0: 
					profile = profile[0]
					try: filename = EU.getStypePropValue(profile, PF, "filename")[0]
					except: EU.handleException("can't get filename on item %s" % str(profile))
			gl.log("\n	readOnly: %s\n	derived: %s\n	plottable: %s\n	projection: %s\n	default: %s\n	profile: %s\n	filename: %s" \
							% (str(readOnly), str(derived), str(plottable), str(projection), str(default), str((profile.name if profile else None)), str(filename)))
			
			propName = p.name + "_" + p.getID()
			mapType = "TimeVaryingMap"
			if plottable and not projection: mapType = "TimeVaryingPlottableMap"
			elif projection: mapType = "TimeVaryingProjection"
			
			#public TimeVaryingMap( String name, String fileName, V defaultValue, Class<V> type) is best constructor. Put null in for filename when not using it. Same with defaultValue.		
			tvmargs = '"%s",%s,%s,%s.class' % (p.name,('"'+filename+'"' if filename else "null"), (str(default) if default else "null") , EU.type2java(p.type.name))
			#if plottable and projection: tvmargs += ", true" #projection flag for time varying plottable map. 
			self.members[propName] = ("%s&lt;%s&gt;" % (mapType,EU.type2java(p.type.name)),'new %s(%s)' % (mapType,tvmargs),"simple property (name " + p.name + ")")
			
			if isinstance(system,Signal):
				self.cArgs[p.name] = EU.type2java(p.type.name)
				#self.cArgs["x"]= EU.type2java(p.type.name)
				#self.cArgs["t"]="Timepoint"
				self.constructors.append("%s.getValue().setValue(t,%s);" % (propName,p.name))
				
		if len(simpleProperties)==0 and isinstance(system,Signal): 
			propName="control"
			self.members[propName] = ("TimeVaryingMap&lt;Boolean&gt;",'new TimeVaryingMap("%s")' % propName,"DEFAULT NO STRUCTURE OBJECT FLOW (name Control)")
			self.cArgs["x"]= "Boolean"
			self.cArgs["t"]="Timepoint"
			self.constructors.append("%s.getValue().setValue(t,x);" % propName)
		
		partProperties = [prop for prop in system.ownedAttribute if not isinstance(prop,Port) and isinstance(prop.type,Class)]
		gl.log("Part Properties: " + str([str(pt.name) for pt in partProperties]))
		for p in partProperties:
			self.members[p.name] = (p.type.name,"new " + p.type.name + "(this)","part property (name " + p.name + ")")
			self.toInspect.append(p.type) #this will probably have to change when we have lots of customers... also will need multiplicity
			self.constructorArgs[p.type]=system
			
		if system in self.constructorArgs.keys():
			self.constructors.append("super();")
			arg = self.constructorArgs[system]
			self.cArgs["x"]=arg.name
			self.constructors.append('this.x = new Parameter<%s>("%s",null,x,null);' % (arg.name,arg.name))
			self.members["x"]=(arg.name,None,"initialize reference to power system (or containing class)") #remove?
			self.constructors.append("init%sMembers();" % self.id)
			self.constructors.append("init%sCollections();" % self.id)
			self.constructors.append("init%sElaborations();" % self.id)
			for p in system.ownedPort:
				for e in p.end:
					c = e.owner
					infoFlows = c.get_informationFlowOfRealizingConnector() 
					gl.log("CONNECTOR: ")
					gl.log("	" + str(isinstance(infoFlows[0].conveyed[0],Signal)) + " ... " + infoFlows[0].conveyed[0].humanType)
					gl.log("	" + str(isinstance(infoFlows[0].source,Port)) + " ... " + infoFlows[0].source[0].humanType)
					gl.log("	" + str(isinstance(infoFlows[0].target,Port)) + " ... " + infoFlows[0].target[0].humanType)
					for i in [x for x in infoFlows if isinstance(x.conveyed[0],Signal) and isinstance(x.source[0],Port) and isinstance(x.target[0],Port)]: 
						signal = i.conveyed[0] #generic signal type...
						ofName = "q_"+system.name+"_"+signal.name
						q_invocation = 'new ObjectFlow("%s",%s.Signal%s.class)' % (ofName,self.constructorArgs[system].name,signal.name) #portID_sigID, sigID.class
						self.members[ofName] = ("ObjectFlow&lt;Signal%s&gt;" % signal.name,q_invocation,"Create New objectflow for signal to " + system.name)
		
		#structural signals
		if not isinstance(system,Signal):
			if "super();" not in self.constructors:
				self.constructors.append("super();")
				self.constructors.append("init%sMembers();" % self.id)
				self.constructors.append("init%sCollections();" % self.id)
				self.constructors.append("init%sElaborations();" % self.id)
			for c in system.ownedConnector:
				infoFlows = c.get_informationFlowOfRealizingConnector() 
				gl.log("CONNECTOR: ")
				gl.log("	" + str(isinstance(infoFlows[0].conveyed[0],Signal)) + " ... " + infoFlows[0].conveyed[0].humanType)
				gl.log("	" + str(isinstance(infoFlows[0].source,Port)) + " ... " + infoFlows[0].source[0].humanType)
				gl.log("	" + str(isinstance(infoFlows[0].target,Port)) + " ... " + infoFlows[0].target[0].humanType)
				for i in [x for x in infoFlows if isinstance(x.conveyed[0],Signal) and isinstance(x.source[0],Port) and isinstance(x.target[0],Port)]: 
					gl.log("	+info flow: " + str(i) + " conveyed: " + str(i.conveyed[0].name))
					signal = i.conveyed[0] #generic signal type...
					if signal not in signalsToBuild: signalsToBuild.append(signal)
					port = i.source[0]
					targetQueueOwner = i.target[0].owner #inherited??
					name = "ss" + port.getID() + "_" + signal.name
					ss_invocation = 'new ObjectFlow("%s",%s.Signal%s.class)' % (name,system.name,signal.name) #portID_sigID, sigID.class
					self.members[name] = ("ObjectFlow&lt;Signal%s&gt;" % signal.name,ss_invocation,"Create New Structural SIgnal objectflow for signal" + signal.name +" between " + port.owner.name + " and " + targetQueueOwner.name)
					targname = "q_"+targetQueueOwner.name+"_"+signal.name
					constructortext = "%s.addListener(%s);" % (name,targname)
					pwp = None
					for e in c.end:
						if e.partWithPort.type is targetQueueOwner: pwp = e.partWithPort
					if pwp: constructortext = "((ObjectFlow) %s.getValue()).addListener(((ObjectFlow) (%s.getValue()).%s.getValue()));" % (name,pwp.name,targname)
					self.constructors.append(constructortext)
						
			#build signals
			for s in signalsToBuild:
				self.MDsignalClasses.append(ClassifierClass(s,self.constructorArgs,self.firstSelected))
			gl.log("Signal Classes: " + str(self.MDsignalClasses))
			
			#fill events
			for act in system.ownedBehavior: 
				aeC = activityEventClass(act,self.constructorArgs,self.firstSelected)
				self.events.append(aeC) #will assume that you can't reference outside activities yet...
				if len(act.ownedParameter)>0:
					aIC = activityInterfaceClass(act)
					self.events.append(aIC)
				gl.log(str(aeC.errors.keys()))
				if len(aeC.errors.keys())>0: self.errors[act] = aeC.errors
			
			#run classifierbehavior
			if system.classifierBehavior:
				self.members["classifierBehavior"] = ("String", '"%s"' % system.classifierBehavior.getID(),"Classifier Behavior for " + system.name + " is " + system.classifierBehavior.name)
Esempio n. 2
0
def nameMismatch(profilePackage, stereotypePackage, customPackage, energon, unusedSterPack, unusedCustPack, allStereotypes, allElements, allCustomizations):
	mismatch = []
	queueProps = ["priority", "location in queue", "time in queue", "timestamp", "read capability", "next", "event time", "minClosed", "maxClosed", "minClosed1", "maxClosed1", "start event", "time interval", "duration interval", "end event"]
	baseClass = getElements(allElements, profilePackage)
	baseClass = filter(lambda element: isinstance(element, Classifier), baseClass)
	for b in baseClass:
		ster =StereotypesHelper.getAllAssignedStereotypes([b])
		sterName = []
	        for s in ster:
	            sterName.append(s.getName())
		if b.getName() != "":
		    if not StereotypesHelper.hasStereotype(b, b.getName()) and len(ster)>0 and "ValueType" not in sterName and not StereotypesHelper.hasStereotype(b, StereotypesHelper.getStereotype(project, "Customization")):
		        mismatch.append(b)
	gl.log('VALIDATION: Element Name, Applied Stereotype Name Mismatch')
	elMismatch = 0
	for m in mismatch:
	    whichSter = StereotypesHelper.getAllAssignedStereotypes([m])
	    whichSterName = []
	    for w in whichSter:
	        if w.getName() != "ValueType":
	            whichSterName.append(w.getName())
	    if m.getName() not in queueProps:
	    	elMismatch +=1
	    	gl.log('\t\t' + m.getName() + ' does not match applied stereotype name:' + str(whichSterName))
	    	gl.log('\t\t\t Location:' + m.getQualifiedName())
	gl.log("=====Validate Name Mismatch Summary")
	gl.log(str(elMismatch) + ' elements have applied stereotypes not matching name')
	gl.log('*Validate Name Mismatch Complete')
	return [elMismatch]
Esempio n. 3
0
def multipleStereotypes(profilePackage, stereotypePackage, customPackage, energon, unusedSterPack, unusedCustPack, allStereotypes, allElements, allCustomizations):
	multipleSter = []
	baseClass = getElements(allElements, profilePackage)
	baseClass = filter(lambda element: isinstance(element, Classifier), baseClass)
	gl.log('VALIDATION: Elements with Multiple Stereotypes')
	for b in baseClass:
	    if b.getName() != "":
	        ster =StereotypesHelper.getAllAssignedStereotypes([b])
	        sterName = []
	        for s in ster:
	            sterName.append(s.getName())
	        sterInProfile = filter(lambda element: element.getOwner() == stereotypePackage, ster)
	        if len(sterInProfile) > 1:
	            multipleSter.append(b)
	for d in multipleSter:
	    whichSter = StereotypesHelper.getAllAssignedStereotypes([d])
	    whichSter = filter(lambda element: element.getOwner() == stereotypePackage, whichSter)
	    whichSterName = []
	    for w in whichSter:
	        whichSterName.append(w.getName())
	    gl.log('\t\t' +d.getName() + ' has multiple stereotypes: ' + str(whichSterName))
	    gl.log('\t\t\t Location:' + d.getQualifiedName())
	gl.log("=====Validate Multiple Applied Stereotypes Summary")
	gl.log(str(len(multipleSter))+ ' elements have multiple stereotypes applied')
	gl.log("*Validate Mulitplie Stereotypes Complete") 
	return [multipleSter]
Esempio n. 4
0
def getElements(allels, profilePackage):
	sterPack = filter(lambda element: isinstance(element, Package) and element.getName() == "_Stereotypes", profilePackage.getOwnedElement())
	custPack = filter(lambda element:isinstance(element, Package) and element.getName() == "_Customizations", profilePackage.getOwnedElement())
	depPack = filter(lambda element: isinstance(element, Package) and element.getName() == "_Deprecated Stereotypes", profilePackage.getOwnedElement())
	depCust = filter(lambda element: isinstance(element, Package) and element.getName() == "_Deprecated Customizations", profilePackage.getOwnedElement())
	unusedSter = filter(lambda element: isinstance(element, Package) and element.getName() == '_Unused Stereotypes', profilePackage.getOwnedElement())
	baseClass = filter(lambda element: element.getOwner() != sterPack, allels)
	baseClass = filter(lambda element: element.getOwner() != custPack, baseClass)
	baseClass = filter(lambda element: element.getOwner()!=depPack, baseClass)
	baseClass = filter(lambda element: element.getOwner()!= depCust, baseClass)
	baseClass = filter(lambda element: element.getOwner()!=unusedSter, baseClass)
	baseClass = filter(lambda element: isinstance(element, NamedElement), baseClass)
	baseClass = filter(lambda element: element.getName() != "_Stereotypes" and element.getName() != "_Customizations" and element.getName() != "_Deprecated Stereotypes" and element.getName() != "_Deprecated Customizations", baseClass)
	baseClass = filter(lambda element: not isinstance(element, Stereotype), baseClass)
	baseClass = filter(lambda element: StereotypesHelper.getStereotype(project, "Customization") not in StereotypesHelper.getAllAssignedStereotypes([element]), baseClass)
#	baseClass = filter(lambda element: not isinstance(element, Diagram), baseClass)
	baseClass = filter(lambda element: not isinstance(element, Comment), baseClass)
	baseClass = filter(lambda element: StereotypesHelper.getStereotype(project, "FrameworkValidation.Profile") not in StereotypesHelper.getAllAssignedStereotypes([element]), baseClass)
	#    baseClass = filter(lambda element: not isinstance(element, Property), baseClass)
	baseClass = filter(lambda element: not isinstance(element, InputPin), baseClass)
	baseClass = filter(lambda element: not isinstance(element, OutputPin), baseClass)
	baseClass = filter(lambda element: not isinstance(element, ActivityParameterNode), baseClass)
	baseClass = filter(lambda element: not isinstance(element, Parameter), baseClass)
	baseClass = filter(lambda element: not isinstance(element, CallBehaviorAction), baseClass)
#	baseClass = filter(lambda element: not isinstance(element, Operation), baseClass)
	baseClass = filter(lambda element: not isinstance(element, EnumerationLiteral), baseClass)
	baseClass = filter(lambda element: not isinstance(element, ObjectFlow), baseClass)
	baseClass = filter(lambda element: not isinstance(element, Interaction), baseClass)
#	baseClass = filter(lambda element: not isinstance(element, StateMachine), baseClass)
	baseClass = filter(lambda element: element.getName() != "", baseClass)
	baseClass = filter(lambda element: 'base_' not in element.getName(), baseClass)
	baseClass = filter(lambda element: 'extension_' not in element.getName(), baseClass)
	return baseClass
Esempio n. 5
0
def RedefinitionGenAdd(redefElem,redefName,redefSt,Props,property,gen,newassoc,RedAdd,GenAdd):
    #gl.log("********Do we even get into this script**********"+redefName)
    #gl.log("******The property Name====>"+property.getQualifiedName())
    check=0
    for l in redefElem:
        if isinstance(l,Property) and check==0:
            #NameR=l.getName().strip()
            NameR=l.getName().replace("Abstract","")
            NameR=NameR.strip()
            #gl.log("the name of the redefined element=====>"+NameR.replace("Astract","").strip()+"     and the name of the redefinition=====>"+redefName)  # this is not a good check here at all
            #if isinstance(l,Property):
            #gl.log("*******====>"+l.getName())
            #probelm here with this name matching....state variable...does not match variable
            if property.getType()!=None and l.getType()!=None:
                if NameR==redefName or StereotypesHelper.getStereotypes(property.getType())==StereotypesHelper.getStereotypes(l.getType()):
                    gl.log("******Adding the appropriate redefinition! To the Property=====>"+property.getQualifiedName())
                    check=1
                    Props.add(l)
                    RedAdd+=1
                    if len(Props)==1:
                        Props[0].setName(NameR)
                        if gen==True:
                            csAssoc=l.getAssociation()
                            CreateGeneralization(csAssoc,newassoc)
                            GenAdd+=1
                        if redefSt !=None:
                            #gl.log("------------------------HEY------------------"+redefSt.getName())
                            StereotypesHelper.addStereotype(property,redefSt)
                        break

                
    return RedAdd,GenAdd
Esempio n. 6
0
def docStereotypeCheck(element):
    sterCheck = 0
    docProfile = StereotypesHelper.getProfile(project,"Document Profile")
    if docProfile:
        docStereotypes = getEverything(docProfile)
        docStereotypes = filter(lambda element: isinstance(element, Stereotype), docStereotypes)
        for s in StereotypesHelper.getStereotypes(element):
            if s in docStereotypes:
                sterCheck = 1
    return sterCheck
Esempio n. 7
0
def findPropertyInChild(child, propset, s=None):
    '''returns list of properties in child that has stereotype s, propset indicates whether to include property sets'''
    res = []
    for attr in child.getOwnedAttribute():
        if s is not None and StereotypesHelper.hasStereotype(attr, s):
            res.append(attr)
        elif s is None:
            res.append(attr)
        if propset and StereotypesHelper.hasStereotype(
                attr, partPropS) and attr.getType() is not None:
            res.extend(findPropertyInChild(attr.getType(), propset, s))
    return res
Esempio n. 8
0
def unapplyStereotypes(elements):
    for e in elements:
        eSter = StereotypesHelper.getAllAssignedStereotypes([e])
        suffix = [' part property', ' constraint property', ' reference property',' shared property', ' value property', ' shared property', ' distributed property', ' port', ' flow property']
        names = []
        for s in suffix:
        	names.append(e.getName() + s)
        names.append(e.getName())
        names.append('Customization')
        for s in eSter:
            if s.getName() not in names:
                StereotypesHelper.removeStereotype(e, s)
    return 
Esempio n. 9
0
def createStereotype(owner, element):
	if isinstance(element, Package):
		if StereotypesHelper.hasStereotype(element, StereotypesHelper.getStereotype(project, "View")):
			package = element.getName().find("View")
		 	if package == -1:
		 		element.setName(element.getName() + " View")
		else:
		 	package = element.getName().find("Package")
		 	if package == -1:
		 		element.setName(element.getName() + " View")            
	
	if not isinstance(element, EnumerationLiteral):
	    eSter = StereotypesHelper.getAllAssignedStereotypes([element])
	    eSter = filter(lambda element: element != StereotypesHelper.getStereotype(project, "Diagram Info"), eSter)
	    newSter = StereotypesHelper.createStereotype(owner, element.getName(), [StereotypesHelper.getBaseClass(element)])
	    StereotypesHelper.addStereotypeByString(element, element.getName())
	    for e in eSter:
	    	newgen = ef.createGeneralizationInstance()
	    	gl.log(e.getQualifiedName())
	    	gl.log(newSter.getQualifiedName())
	        newgen.setGeneral(e)
	        newgen.setSpecific(newSter)
	        newgen.setOwner(newSter)
	    	icon = filter(lambda element: isinstance(element, Image), e.getOwnedElement())
	    	if icon:
	    		icon = icon[0]
	    		newicon= ef.createImageInstance()
	    		newicon.setLocation(icon.getLocation())
	    		newicon.setContent(icon.getContent())
	    		newicon.setFormat(icon.getFormat())
	    		newicon.setOwner(newSter)	
	        
	return
Esempio n. 10
0
def ControlServiceFind(package,CSProf,st):
    CSPacks=CSProf.getNestedPackage()
    for c in CSPacks:
        packSt=StereotypesHelper.getStereotypes(package)
        packSt=filter(lambda element: element in st, packSt)
        if StereotypesHelper.hasStereotype(c,packSt):
            blah=c
            #gl.log("hehehehehhe========>"+blah.getName())
            return blah
        if isinstance(c,Package):
            CSPackage=ControlServiceFind(package,c,st)
            if CSPackage is not None:
                return CSPackage
    return None
Esempio n. 11
0
def createStereotypedElement(stereotype, owner):
    new = None
    mclass = StereotypesHelper.getBaseClassesAsClasses(stereotype)
    for m in mclass:
        insCreate = str(m)
        findtrunc = insCreate.split(".")
        insCreate = findtrunc[len(findtrunc)-1]
        insCreate = insCreate[:-2]
        if insCreate != "Property" and insCreate != "Association" and insCreate != "Dependency" and insCreate != "Relationship" and insCreate != "Element" and insCreate != "Operation" and insCreate!= "Property" and insCreate!= "EnumerationLiteral":
            instanceCreate = 'create'+insCreate+'Instance'
            new = eval('ef.create'+insCreate+'Instance()')
            new.setOwner(owner)
            new.setName(stereotype.getName())
            StereotypesHelper.addStereotypeByString(new, stereotype.getName())
    return new
Esempio n. 12
0
def checkDirection(port, targets, sources, r):
    '''checks to see if direction for assembly flow ports are appropriate (i.e. in to out or out to in)'''
    '''this function returns 1 if on the opposing port there exists a flow port with the same type as input port and opposite direction'''
    go = 0
    rpDirection = StereotypesHelper.getStereotypePropertyValue(
        port, 'FlowPort', 'direction')
    for m in targets:
        #		gl.log('DEBUG targets '+ m.getName())
        if m == port.getType():
            #			gl.log('DEBUG target: '+str(rpDirection[0].getName()=='in'))
            #			gl.log('DEBUG target: '+str(t==r))
            for t in targets[m]:
                if rpDirection[0].getName() == 'out' and t == r:
                    go = 1

    for m in sources:
        #		gl.log('DEBUG sources ' + m.getName())
        if m == port.getType():
            #			gl.log('DEBUG: direction '+ rpDirection[0].getName())
            for s in sources[m]:
                #				gl.log('DEBUG source: ' + str(rpDirection[0].getName()=='out'))
                #				gl.log('DEBUG source: '+ str(s==r))
                if rpDirection[0].getName() == 'in' and s == r:
                    go = 1

    return go
Esempio n. 13
0
def metaclassCheck(modelPackage, validateOnly):
###get stereotype package
	if not isinstance(modelPackage, Profile):
		profilePackage = getProfilePackage(modelPackage)
		if not profilePackage:
			gl.log('****ERROR: The code is not being run on a Profile. Stopping Execution')
			return
	else: profilePackage = modelPackage
	infraPack = filter(lambda element: isinstance(element, Package) and "_"==element.getName(), profilePackage.getOwnedElement())
	if len(infraPack)>0: infraPack = infraPack[0]
	else: return['No underscore Package']
	stereotypePackage = filter(lambda element: isinstance(element, Package) and "_Stereotypes" in element.getName(), infraPack.getOwnedElement())
	if len(stereotypePackage)==0:
		gl.log('****ERROR: There is no package named "_Stereotypes" that is a direct child of the Profile. Stopping Execution')
		return ['no stereotype Package']
	else: stereotypePackage = stereotypePackage[0]
	sMMeta=[]
####Collect stereotypes with >1 metaclasses
	for s in stereotypePackage.getOwnedElement():
		if isinstance(s, Stereotype):
			sMeta = StereotypesHelper.getBaseClasses(s)
			if len(sMeta)>1:
				sMMeta.append(s)
	if validateOnly!= True:
		gl.log('There is no codified fix for this problem.  Modeler must rectify')
	return sMMeta
Esempio n. 14
0
def copyStereotypes(a, b):
    for s in StereotypesHelper.getStereotypes(a):
        if not StereotypesHelper.hasStereotypeOrDerived(b, s):
            StereotypesHelper.addStereotype(b, s)
        smap = StereotypesHelper.getPropertiesIncludingParents(s)
        for sp in smap.keySet():
            props = smap.get(sp)
            for p in props:
                values = StereotypesHelper.getStereotypePropertyValue(
                    a, s, p.getName())
                if len(values) == 1:
                    StereotypesHelper.setStereotypePropertyValue(
                        b, s, p.getName(), values.get(0))
                elif len(values) > 1:
                    StereotypesHelper.setStereotypePropertyValue(
                        b, s, p.getName(), values)
Esempio n. 15
0
def generalizationCheck(setA, setB, sterIgnore):
	match = []
	noMatch = []
	ignore = []
	setB = filter(lambda element: element not in sterIgnore, setB)
	for s in setA:
		check = filter(lambda element: element.getGeneral().getName() == s.getGeneral().getName() and element.getSpecific().getName() == s.getSpecific().getName(), setB)
		if len(check)>0:
			if not StereotypesHelper.hasStereotypeOrDerived(s.getGeneral(), sterIgnore) and not StereotypesHelper.hasStereotypeOrDerived(s.getSpecific(),sterIgnore): 
				match.append(s)	
			else: 
				ignore.append(s)
		else: 
			if not StereotypesHelper.hasStereotypeOrDerived(s.getGeneral(), sterIgnore) and not StereotypesHelper.hasStereotypeOrDerived(s.getSpecific(), sterIgnore):
				noMatch.append(s)
	return [match, noMatch]
Esempio n. 16
0
def filterElementsByStereotypes(sourceList, stereotypes):
    ret = []
    for s in sourceList:
        for t in stereotypes:
            if StereotypesHelper.hasStereotypeOrDerived(s, t) and s not in ret:
                ret.append(s)
    return ret
Esempio n. 17
0
def findPackage(package, CSProf, checkOnly):
    packSt = StereotypesHelper.getStereotypes(package)
    if StereotypesHelper.hasStereotype(CSProf, packSt):
        boo = CSProf
        return boo
    CSPacks = CSProf.getNestedPackage()
    for c in CSPacks:
        packSt = filter(lambda element: element in CSst, packSt)
        if StereotypesHelper.hasStereotype(c, packSt):
            boo = c
            #gl.log("hehehehehhe========>"+boo.getName())
            return boo
        if isinstance(c, Package):
            CSPackage = findPackage(package, c, checkOnly)
            if CSPackage is not None:
                return CSPackage
    return None
Esempio n. 18
0
def propertyCheck(element):
	'''append part property to any Property or constraint property or port element, this is an OpsRev naming convention '''
	elementSterName = element.getName()
 	if isinstance(element, Property):
 		if StereotypesHelper.isElementStereotypedBy(element, "ConstraintProperty"):
 			if element.getName().find("constraint property") == -1:
 				elementSterName = element.getName() + " constraint property"
 		elif StereotypesHelper.isElementStereotypedBy(element, "PartProperty"):
 			if element.getName().find("part property") == -1:
 				elementSterName = element.getName() + " part property"
	 	elif isinstance(element, Port):
			if element.getName().find("port") == -1:
				elementSterName = element.getName()+ " port"
		elif StereotypesHelper.isElementStereotypedBy(element, "SharedProperty"):
			if element.getName().find("shared property")==-1:
				elementSterName = element.getName() + " shared property"
		elif StereotypesHelper.isElementStereotypedBy(element, "ValueProperty"):
			if element.getName().find("value property")==-1:
				elementSterName = element.getName() + " value property"
		elif StereotypesHelper.isElementStereotypedBy(element,"ReferenceProperty"):
			if element.getName().find("reference property")==-1:
				elementSterName = element.getName() + " reference property"
		elif StereotypesHelper.isElementStereotypedBy(element, "DistributedProperty"):
			if element.getName().find("distributed property")==-1:
				elementSterName = element.getName() + " distributed property"
		elif StereotypesHelper.isElementStereotypedBy(element, "FlowProperty"):
			if element.getName().find("flow property")==-1:
				elementSterName = element.getName() + " flow property"
	return elementSterName
Esempio n. 19
0
def findPackage(packSt,CSProf,checkOnly):  #pass in stereotype of package your looking for, and a base starting package for where you want to start looking
    #packSt=StereotypesHelper.getStereotypes(package)
    if StereotypesHelper.hasStereotype(CSProf,packSt):
            boo=CSProf
            return boo
    CSPacks=CSProf.getNestedPackage()
    for c in CSPacks:
        #packSt=filter(lambda element: element in CSst, packSt)
        #gl.log("Checking out what package we are on====>"+c.getName())
        if StereotypesHelper.hasStereotype(c,packSt):
            boo=c
            #gl.log("hehehehehhe========>"+boo.getName())
            return boo
        if isinstance(c,Package):
            CSPackage=findPackage(packSt,c,checkOnly)
            if CSPackage is not None:
                return CSPackage
    return None
Esempio n. 20
0
def getChildrenWithParts(e):
    '''returns a dictionary with the types of all compositional children of e as keys (excluding property sets) and their corresponding part property in e'''
    res = {}
    for p in e.getOwnedAttribute():
        if StereotypesHelper.hasStereotype(p, partPropS):
            t = p.getType()
            if t is not None:
                res[p] = t
    return res
Esempio n. 21
0
def getChildren(e):
    '''returns a list of the types of all compositional children of e (excluding property sets)'''
    res = []
    for p in e.getOwnedAttribute():
        if StereotypesHelper.hasStereotype(p, partPropS):
            t = p.getType()
            if t is not None:
                res.append(t)
    return res
Esempio n. 22
0
def createCustomization(stereotypeName, owner):
	MDcustPackage = filter(lambda element: isinstance(element, Package) and element.getName() == "MD Customization for SysML", datapack.getOwnedElement())[0]
	syscustPackage = filter(lambda element: isinstance(element, Package) and element.getName() == "customizations", MDcustPackage.getOwnedElement())[0]
	new = ef.createClassInstance()
	new.setOwner(owner)
	new.setName(stereotypeName)
	StereotypesHelper.addStereotype(new, StereotypesHelper.getStereotype(project, "Customization"))
	ster = StereotypesHelper.getStereotype(project, stereotypeName)
    #get ster generalizations:
	sterGen = filter(lambda element: isinstance(element, Generalization), ster.get_directedRelationshipOfSource())
	for s in sterGen:
		cust = filter(lambda element: element.getName().replace(" ","") == s.getGeneral().getName().replace(" ",""), syscustPackage.getOwnedElement())
		if len(cust) !=0:
			cust = cust[0]
			newgen = ef.createGeneralizationInstance()
			newgen.setGeneral(cust)
			newgen.setSpecific(new)
			newgen.setOwner(new)
	return new
Esempio n. 23
0
def getNonRedefinedAttrs(e):
    '''takes an element, returns list of its attributes, includes property sets'''
    res = []
    for a in e.getOwnedAttribute():
        if not a.hasRedefinedProperty(
        ):  ##added special case for property sets, this can be bad
            res.append(a)
            if StereotypesHelper.hasStereotype(
                    a, partPropS) and a.getType() is not None:
                res.extend(getNonRedefinedAttrs(a.getType()))
    return res
Esempio n. 24
0
def validateBaseClass(profilePackage, stereotypePackage, customPackage, energon, unusedSterPack, unusedCustPack, allStereotypes, allElements, allCustomizations):
	gl.log("**VALIDATION: Base Class")
	queueProps = ["priority", "location in queue", "time in queue", "timestamp", "read capability", "next", "event time", "minClosed", "maxClosed", "minClosed1", "maxClosed1", "start event", "time interval", "duration interval", "end event"]
	baseClass = getElements(allElements, profilePackage)
#	elementNoStereotype = getMissing(baseClass, allStereotypes)
#	elementNoStereotype = filter(lambda element: not isinstance(element, Association), elementNoStereotype)
#	elementNoStereotype = filter(lambda element: not isinstance(element, Dependency),elementNoStereotype)
#	elementNoStereotype = filter(lambda element: not isinstance (element, InstanceSpecification), elementNoStereotype)
#	elementNoStereotype = filter(lambda element: element.getOwner() != customPackage, elementNoStereotype)
	elNoSter = 0
	classifiers = []
	properties = []
	operations=[]
	misc = []
	diagrams = []
	for e in baseClass:
		eSter = StereotypesHelper.getAllAssignedStereotypes([e])
		if not eSter:
		    if e.getName() != "" and e.getName() not in queueProps:
		    	if isinstance(e, Classifier):
		    		classifiers.append(e)
		    	elif isinstance(e, Property):
		    		properties.append(e)
		    	elif isinstance(e, Diagram):
		    		diagrams.append(e)
		    	elif isinstance(e, Operation):
		    		operations.append(e)
		    	else:
		    		misc.append(e)
		        elNoSter+=1
	gl.log('======Classifiers with no Stereotype')
	for c in classifiers:
		gl.log('\t' + str(c.getName()) + ' has no stereotype')
	gl.log('======Properties with no Stereotype')
	for p in properties:
		gl.log('\t' + str(p.getName()) + ' has no stereotype')
	gl.log("======Diagrams with no Stereotype")
	for d in diagrams:
		gl.log('\t' + d.getName() + ' has no stereotype')
	gl.log("=====Operations with no Stereotype")
	for o in operations:
		gl.log('\t' + o.getName() + ' has no stereotype')
	gl.log('======Others with no Stereotype:****')
	for m in misc:
		gl.log('\t' + str(m.getName()) + ' has no stereotype')
	gl.log('* ' + str(elNoSter) + ' stereotypes are missing')
	gl.log('======Validate Base Class Summary')
	gl.log(str(len(classifiers))+ ' classifiers have no stereotype')
	gl.log(str(len(properties))+ ' properties have no stereotype')
	gl.log(str(len(diagrams)) + ' diagrams have no stereotype')
	gl.log(str(len(operations))+ ' operations have no stereotype')
	gl.log(str(len(misc))+' other base class elements have no stereotype')
	gl.log("*Validate Elements Complete")
	return [classifiers, properties, diagrams, operations, misc]
Esempio n. 25
0
def OwnerCheck(insElem, csElem, goodPack, packError):
    newOwnPack = insElem.getOwner()
    newOwnPackSt = StereotypesHelper.getStereotypes(newOwnPack)
    newOwnPackSt = filter(lambda element: element in CSst, newOwnPackSt)
    csPackOwn = csElem.getOwner()
    csPackOwnSt = StereotypesHelper.getStereotypes(csPackOwn)
    csPackOwnSt = filter(lambda element: element in CSst, csPackOwnSt)
    if newOwnPackSt == csPackOwnSt:
        gl.log("The CS Element has Owner===>" +
               csPackOwnSt[0].getQualifiedName() +
               "  While the Instance Element has Owner===>  " +
               newOwnPackSt[0].getQualifiedName())
        goodPack += 1
    else:
        gl.log(
            "*****ERROR*****The element is not nested appropriately, the CS element has Owner===>"
            + csPackOwn.getQualifiedName() +
            "  While the Instance Element has Owner===>  " +
            newOwnPack.getQualifiedName())
        packError += 1
    return goodPack, packError
Esempio n. 26
0
def findAllRedefinedInChild(prop, child):
    '''returns a list of all properties in child that redefines prop, includes property sets'''
    res = []
    for attr in child.getOwnedAttribute():
        if attr.hasRedefinedProperty():
            for redef in attr.getRedefinedProperty():
                if redef is prop:
                    res.append(attr)
        if StereotypesHelper.hasStereotype(
                attr, partPropS) and attr.getType() is not None:
            res.extend(findAllRedefinedInChild(prop, attr.getType()))
    return res
Esempio n. 27
0
def findRedefinedInChild(prop, child, propset):
    '''returns first property in child that redefines prop'''
    res = MDUtils.findRedefinedInChild(prop, child)
    if res is not None:
        return res
    if propset:
        for cprop in child.getOwnedAttribute():
            if StereotypesHelper.hasStereotype(cprop, partPropS):
                if cprop.getType() is not None:
                    res = MDUtils.findRedefinedInChild(prop, cprop.getType())
                    if res is not None:
                        return res
    return None
Esempio n. 28
0
def ControlServiceGeneralization(genSvElem,Elem,StereoPack,StereoElem,create):
    CSProf=genSvElem.getOwner().getOwner()
    #gl.log("CSProf name=========>"+CSProf.getQualifiedName())
    #All this does is based on a stereotype of package and element passed in, find that package and the element, and create generalization if needed
    #CSPacks=CSProf.getNestedPackage()
    CSPack=findPackage(StereoPack,CSProf,True)
    #gl.log("What package did we find=====>"+CSPack.getQualifiedName())
    CcsElem=None
    #CSP=filter(lambda element: not isinstance(element,GeneralizationSet), csElements)
    if StereotypesHelper.hasStereotype(CSPack,StereoPack): #sucPacks need to be changed to lifecycle Domain Package, I don't think I need this now
        csTLPack=CSPack.getOwnedElement()
        for csElem in csTLPack:
            #gl.log("What are the things we are getting here...."+csElem.getQualifiedName())
            if StereotypesHelper.hasStereotype(csElem,StereoElem):  
                genAttrs=csElem.getOwnedAttribute()
                for genAttr in genAttrs:
                    #gl.log("The general attribute type Name()===>"+genAttr.getType().getQualifiedName())
                    #gl.log("The general element===>"+genSvElem.getQualifiedName())
                    if genAttr.getType()==genSvElem:#this is going to get more than one thing if not in the control service where there is only one
                        CcsElem=csElem
#                    #gl.log(m.getName())
#                    StateElem=m.getOwnedElement()
#                    for j in StateElem:
#                        #gl.log("Hey are we gettin here======>"  + j.getName())
#                        if StereotypesHelper.hasStereotype(j,s):
                        if create==True:
                            gl.log("*******Adding the Generalization to the New Element*******========>"+Elem.getName()+"     Generalizing from CS Element =======>" +csElem.getName())
                            newgen = ef.createGeneralizationInstance()
                            newgen.setGeneral(csElem)
                            newgen.setSpecific(Elem)
                            newgen.setOwner(Elem)
                        break
                    #I can't have this here, because we rely on it finding a match 
                    #else:
                        #CcsElem=None
                
            
    return CcsElem
Esempio n. 29
0
def findAllNameInChild(name, child, propset):
    '''returns all properties with name in child as list, propset indicates whether to search in property sets'''
    res = []
    if name == "":
        return res
    for p in child.getOwnedAttribute():
        if p.getName() == name:
            res.append(p)
    if propset:
        for p in child.getOwnedAttribute():
            if StereotypesHelper.hasStereotype(p, partPropS):
                if p.getType() is not None:
                    res.extend(findAllNameInChild(name, p.getType(), propset))
    return res
Esempio n. 30
0
def stereotypeReport(Stereotypes,package):
    for c in Stereotypes:
        Collection=[]
        recursion(package,Collection)
        for r in Collection:
            if StereotypesHelper.hasStereotype(r,c):
                if c in StereotypeCount:
                    StereotypeCount[c]+=1
                else:
                    StereotypeCount[c]=1
        if c not in StereotypeCount:
            StereotypeCount[c]=0          
    for c in Stereotypes:
        gl.log("Stereotype  " +c.getName() + "  has  " + str(StereotypeCount[c])+ "  usages  ")
Esempio n. 31
0
def findNameInChild(name, child, propset):
    '''returns first property found in child, propset indicates whether to search in property sets'''
    res = None
    if name == "":
        return res
    for p in child.getOwnedAttribute():
        if p.getName() == name:
            return p
    if propset:
        for p in child.getOwnedAttribute():
            if StereotypesHelper.hasStereotype(p, partPropS):
                if p.getType() is not None:
                    res = findNameInChild(name, p.getType(), propset)
    return res
Esempio n. 32
0
def createElement(stereotype, owner,checkEnum):
    new = None
    mclass = StereotypesHelper.getBaseClassesAsClasses(stereotype)
    for m in mclass:
        insCreate = str(m)
        findtrunc = insCreate.split(".")
        insCreate = findtrunc[len(findtrunc)-1]
        insCreate = insCreate[:-2]
        if insCreate != "Property" and insCreate != "Association" and insCreate != "Dependency" and insCreate!= "ObjectFlow" and insCreate != "Relationship" and insCreate != "Operation" and insCreate!= "EnumerationLiteral":
            if insCreate == "Element":
                new = ef.createClassInstance()
                gl.log(stereotype.getName() + " Stereotype metaclass was element.  Stereotyped Class was created")
            elif checkEnum==True:
            	new=ef.createEnumerationInstance()
            	gl.log(stereotype.getName() + " Stereotype metaclass was enumeration.  Stereotyped Enumeration was created")
            else:
                instanceCreate = 'create'+insCreate+'Instance'
                new = eval('ef.create'+insCreate+'Instance()')
            new.setOwner(owner)
            if docStereotypeCheck(stereotype) == 0:
                new.setName(stereotype.getName())
    return new
Esempio n. 33
0
def setup():
	#initialize the guiLog
	gl = Application.getInstance().getGUILog()
	#gl.clearLog()
	gl.log("===============================================================================")
	debug = True
	logDebug = False
	
	EU.setDebug(debug)
	EU.setLogDebug(logDebug)
	
	global debug
	global logDebug
	global gl
	
	#get a copy of the project - useful for getting the elements factory, various other things like that.
	project = Application.getInstance().getProjectsManager().getActiveProject()
	global project
	TVM = StereotypesHelper.getStereotype(project,"TimeVaryingMap")
	global TVM

	#declare any stereotype elements here, for convenience.	
	return True
Esempio n. 34
0
def createStereotype(owner, element, stereotypePackage):
	'''append Package to any package element, this is an OpsRev naming convention '''
	if isinstance(element, Package):
	 	package = element.getName().find("Package")
	 	if package == -1:
			element.setName(element.getName() + " Package")   
	'''stereotypes should not be made for enumeration literals'''         
	if not isinstance(element, EnumerationLiteral):
	    eSter = StereotypesHelper.getAllAssignedStereotypes([element])
	    elementSterName = propertyCheck(element)
	    newSter = StereotypesHelper.createStereotype(owner, elementSterName, [StereotypesHelper.getBaseClass(element)])
	    StereotypesHelper.addStereotype(element, newSter)
	    for e in eSter:
	    	if StereotypesHelper.getProfileForStereotype(e) == StereotypesHelper.getProfile(project, "SysML") or StereotypesHelper.getProfileForStereotype(e) == StereotypesHelper.getProfile(project, "additional_stereotypes"):
		    	newgen = ef.createGeneralizationInstance()
		        newgen.setGeneral(e)
		        newgen.setSpecific(newSter)
		        newgen.setOwner(newSter)
		    	icon = filter(lambda element: isinstance(element, Image), e.getOwnedElement())
		    	if icon:
		    		icon = icon[0]
		    		newicon= ef.createImageInstance()
		    		newicon.setLocation(icon.getLocation())
		    		newicon.setContent(icon.getContent())
		    		newicon.setFormat(icon.getFormat())
		    		newicon.setOwner(newSter)
	        if isinstance(element, Class) and e.getOwner() == stereotypePackage:
		    	newgen = ef.createGeneralizationInstance()
		    	newgen.setGeneral(e)
		    	newgen.setSpecific(newSter)
		    	newgen.setOwner(newSter)
		    	icon = filter(lambda element: isinstance(element, Image), e.getOwnedElement())
		    	if icon:
		    		icon = icon[0]
		    		newicon = ef.createImageInstance()
		    		newicon.setLocation(icon.getLocation())
		    		newicon.setContent(icon.getContent())
		    		newicon.setFormat(icon.getFormat())
		    		newicon.setOwner(newSter)
	return
Esempio n. 35
0
from com.nomagic.magicdraw.actions import MDActionsCategory

import os, csv, sys, traceback, re, time, shutil

from com.nomagic.uml2.ext.magicdraw.actions.mdbasicactions import OpaqueAction
from com.nomagic.uml2.ext.magicdraw.actions.mdbasicactions import Pin
from javax.swing import JOptionPane

import ExporterUtils as EU
reload(EU)

gl = Application.getInstance().getGUILog()
global gl
project = Application.getInstance().getProjectsManager().getActiveProject()
global project
TVM = StereotypesHelper.getStereotype(project,"TimeVaryingMap")
PF = StereotypesHelper.getStereotype(project,"Profile")
ASMIP = StereotypesHelper.getStereotype(project,"AddToStructuralFeatureMapInPlace")
GSM = StereotypesHelper.getStereotype(project, "GetStructuralFeatureMap")
MSMIP = StereotypesHelper.getStereotype(project, "MultiplyStructuralFeatureMapInPlace")
SSMAT = StereotypesHelper.getStereotype(project, "SampleStructuralFeatureMapAtTime")
USM = StereotypesHelper.getStereotype(project, "UpdateStructuralFeatureMap")

global TVM

class ClassifierClass(object):
	def __init__(self,system,cs,firstSelected):
		gl.log("=====================================")
		gl.log("Class: " + firstSelected.name)
		stime = time.time()
		self.constructorArgs = cs
Esempio n. 36
0
            try:
                # gl.log("server not started (or some other error...)")
                # os.chdir("/Users/mjackson/Desktop")
                # os.system("source start_server.sh")
                blah = s.system.listMethods()
            except:
                # s.terminate()
                gl.log("*** EXCEPTION:")
                exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
                messages = traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback)
                for message in messages:
                    gl.log(message)
                pass
        # Now, start an activity
        project = Application.getInstance().getProjectsManager().getActiveProject()
        ExAct = StereotypesHelper.getStereotype(project, "ActivityExecutable")
        activityOptions = StereotypesHelper.getExtendedElements(ExAct)
        ao = []
        for a in activityOptions:
            ao.append(a.getName())

        options = ["Submit", "Cancel"]
        textPanel = JPanel(GridLayout(4, 0))
        actlabel = JLabel("Activity Name")
        actname = JComboBox(ao)
        inputlabel = JLabel("Input Parameters")
        inputs = JTextField()
        textPanel.add(actlabel)
        textPanel.add(actname)
        textPanel.add(inputlabel)
        textPanel.add(inputs)
Esempio n. 37
0
from com.nomagic.uml2.ext.jmi.helpers import StereotypesHelper as halp
from com.nomagic.magicdraw.core import Application

app = Application.getInstance()
proj = app.getProject()
mod = proj.getModel()
sysml = halp.getProfile(proj, "SysML Profile")
req = halp.getStereotype(proj, "Requirement")

Esempio n. 38
0
def createCustomization(stereotypeName, owner):
	new = ef.createClassInstance()
	new.setOwner(owner)
	new.setName(stereotypeName)
	StereotypesHelper.addStereotype(new, StereotypesHelper.getStereotype(project, "Customization"))
	return new
Esempio n. 39
0
def assignCustomizationTags(stereotype, customBlock, supertype):
	StereotypesHelper.setStereotypePropertyValue(customBlock, StereotypesHelper.getStereotype(project, "Customization"), "customizationTarget", stereotype)
	if supertype != False: StereotypesHelper.setStereotypePropertyValue(customBlock, StereotypesHelper.getStereotype(project, "Customization"), "superTypes", supertype)
	else: gl.log('[FIX ERROR]: no supertype found for customization: ' + customBlock.getName())
	StereotypesHelper.setStereotypePropertyValue(customBlock, StereotypesHelper.getStereotype(project, "Customization"), "hideMetatype", False)
	return    
Esempio n. 40
0
def getMissing(A, B):
	missing =[]
	nameMatch = {}
	metaMismatch=[]
	applyMismatch=[]
	for a in A:
		aName = a.getName()
		if isinstance(a, Property):
			aName = propertyCheck(a)
		elif isinstance(a, Stereotype) and StereotypesHelper.getBaseClassesAsClasses(a)[0] == Property:
			aGens = filter(lambda element: isinstance(element, Generalization), a.get_directedRelationshipOfSource())
			if len(filter(lambda element: element.getGeneral() == StereotypesHelper.getStereotype(project, "ConstraintProperty"), aGens))!=0:
				if a.getName().find("constraint property")==-1: aName = a.getName() + " constraint property"
			elif len(filter(lambda element: element.getGeneral() == StereotypesHelper.getStereotype(project, "SharedProperty"), aGens))!=0:
				if a.getName().find("shared property")==-1: aName = a.getName() + " shared property"
			elif len(filter(lambda element: element.getGeneral() == StereotypesHelper.getStereotype(project, "DistributedProperty"), aGens))!=0:
				if a.getName().find("distributed property")==-1: aName = a.getName() + " distributed property"
			elif len(filter(lambda element: element.getGeneral() == StereotypesHelper.getStereotype(project, "FlowProperty"), aGens))!=0:
				if a.getName().find("flow property")==-1: aName = a.getName() + " flow property"
			elif len(filter(lambda element: element.getGeneral() == StereotypesHelper.getStereotype(project, "ValueProperty"), aGens))!=0:
				if a.getName().find("value property")==-1: aName = a.getName() + " value property"
			elif len(filter(lambda element: element.getGeneral() == StereotypesHelper.getStereotype(project, "ReferenceProperty"), aGens))!=0:
				if a.getName().find("reference property")==-1: aName = a.getName() + " reference property"
			else:
				if a.getName().find("part property")==-1: aName=a.getName() + " part property"
		elif isinstance(a, Stereotype) and StereotypesHelper.getBaseClassAsClasses(a)[0] == Port:
			if a.getName().find("port")==-1: aName = a.getName() + " port"
		bExist = 0
		for b in B:
			if aName == b.getName():
				nameMatch[a]=b
				bExist = 1
				if b not in StereotypesHelper.getAllAssignedStereotypes([a]):
					noApply[a]=b
		if bExist == 0:
			missing.append(a)
	for n in nameMatch:
		###get generalizations of stereotype
		stereotype = nameMatch[n]
		nGeneral = filter(lambda element: isinstance(element, Generalization), stereotype.get_directedRelationshipOfSource())
		general = []
		for g in nGeneral:
			general.append(g.getGeneral())
		###keep only SysML generalizations
		gSys = filter(lambda element: StereotypesHelper.getProfileForStereotype(element) == StereotypesHelper.getProfile(project, "SysML"), general)
		if gSys and not StereotypesHelper.checkForAllDerivedStereotypes(n, gSys[0]): applyMismatch.append(n)
		###check if same
		if n.getName() != "_Unused Stereotypes":
			if not isinstance(n, StereotypesHelper.getClassOfMetaClass(StereotypesHelper.getBaseClasses(nameMatch[n])[0])): metaMismatch.append(n)  
	return [missing, applyMismatch, metaMismatch]
Esempio n. 41
0
	def inspectByType(self,node):
		gl.log(". . . . . . .Inspecting by Type. . . . . .")
		myType = node.humanType
		gl.log("type: %s - name: %s - owner: %s" % (myType,node.name,node.owner.name))
		canHaveDuration = True
		nextAccepts = [x for x in self.nexts[node] if isinstance(x,AcceptEventAction)]
		if len(nextAccepts)>0:
			if any([not isinstance(x.trigger[0].event,TimeEvent) for x in nextAccepts]): canHaveDuration = False
		if isinstance(node,AcceptEventAction) and isinstance(node.trigger[0].event,TimeEvent): canHaveDuration = False
		if isinstance(node,CallBehaviorAction) and (not node.behavior or not node.behavior.humanType == "Opaque Behavior"): canHaveDuration = False
		if canHaveDuration: self.dependencies["duration"] = ("Integer","1")
		
		if myType == "Read Self Action":
			objectFlowOut = node.result.outgoing[0]
			try: itemname = node.result.type.name
			except: itemname = node.owner.owner.name
			self.members[node.result.getID()] = (itemname,itemname+".this","Instance of whoever is operating this activity")
		
		elif myType =="Add Structural Feature Value Action" :
			sf = node.structuralFeature
			#objectFlowIn = node.object.incoming[0] #we don't even need this...
			valueFlowIn = node.value.incoming[0]
			try: featureID = sf.name + "_" + sf.getID()
			except: EU.handleException("Found Structural Feature w/out name in %s:%s" % (node.name,node.owner.name))
			v = node.value.getID()
			if StereotypesHelper.hasStereotype(node,ASMIP): #add to structural feature map in place
				self.effects.append("%s.add(%s,startTime)" % (featureID,v))
			elif StereotypesHelper.hasStereotype(node,MSMIP): #multiply map in place all by some value after start Time
				#need to do a get value on the projection first... #FIX
				self.effects.append("%s.multiply(%s,startTime)" % (featureID,v))
			elif StereotypesHelper.hasStereotype(node,USM): #update projection with another projection after some point
				self.effects.append("%s.setValue(startTime,%s)" % (featureID,v))
			else: #normal add one number to tvm
				self.effects.append("%s.setValue(startTime,%s)" % (featureID,v))
		
		elif myType =="Read Structural Feature Action" :
			sf = node.structuralFeature
			sfContext = "this" if self.inMyContext(sf,node) else sf.owner.getID()
			gl.log("SFCONTEXT - %s" % str(sfContext))
			sfID = "%s_%s" % (sf.name,sf.getID())
			sfFullName = "%s.%s" % (sfContext,sfID)
			objectOut = node.result
			outID = objectOut.getID()
			try: tname = EU.type2java(sf.type.name)
			except:tname = "Object"
			append = ".getValue(startTime)" if StereotypesHelper.hasStereotype(sf,TVM) and EU.getStypePropValue(sf, TVM, "projection")[0] else ""
			if StereotypesHelper.hasStereotype(node,SSMAT):
				t = node.object.getID()
				self.dependencies[outID] = (tname,"%s.getValue(%s)%s" % (sfID,t,append))
			elif StereotypesHelper.hasStereotype(node,GSM):
				tvOut = ("%s&lt;%s&gt;" % (objectOut.type.name, EU.type2java(sf.type.name))) if objectOut.type else ("TimeVaryingMap&lt;%s&gt;" % sf.type.name)
				self.dependencies[outID] = (tvOut,sfID + append)
				if outID in self.members.keys():
					x = self.members[outID]
					x = (tvOut,x[1],x[2])
					self.members[outID] = x
			else:
				sfContext = node.object.getID() + "." if node.object else ""
				gl.log("SFContext2 %s" % str(sfContext))
				if isinstance(sf.type,DataType): self.dependencies[objectOut.getID()]=(tname, sfContext + sfID + ".getValue(startTime)" + append) #call the "field" of the structural feature on the incoming object, which should be correct type for that...
				else: self.dependencies[objectOut.getID()] = (tname,sf.name)
				#if isinstance(sf.type,DataType): self.dependencies[objectOut.getID()]=(tname, sfContext + "." + sfID + ".getValue(startTime)") #call the "field" of the structural feature on the incoming object, which should be correct type for that...
				#else: self.dependencies[objectOut.getID()] = (tname,sfContext + "." + sf.name)
		
		elif myType =="Send Signal Action" :
			sig = node.signal
			port = node.onPort
			prepend = ""
			if node.context in self.constructorArgs.keys(): prepend = self.constructorArgs[node.context].name + "."
			structSig = "x.ss" + port.getID() + "_" + sig.name
			#self.members["signalObject"] = (prepend + "Signal" + sig.name,None,)
			self.members["signalObject"] = (prepend + "Signal" + sig.name,"x.new %sSignal%s()" % (prepend,sig.name),"initialize place holder for constructed signal")
			self.effects.append(structSig + ".send(signalObject,endTime)")
			for signalAttribute in sig.attribute:
				matched = False
				for arg in node.argument:
					if arg.name == signalAttribute.name: 
						self.effects.append("signalObject.%s_%s.setValue(endTime,%s)" % (signalAttribute.name,signalAttribute.getID(),arg.getID()))
						matched = True
				if not matched:
					if len(node.argument)==1 and len(sig.attribute)==1:
						self.effects.append("signalObject.%s_%s.setValue(endTime,%s)" % (signalAttribute.name,signalAttribute.getID(),node.argument[0].getID()))
						matched = True
				if not matched:
					self.errors[node] = "can't match node arguments to signal attributes!!"		
			if len(sig.attribute) == 0: self.effects.append("signalObject.control.setValue(endTime,true)")
	
		elif myType =="Accept Event Action" :
			event = node.trigger[0].event
			if not isinstance(event,TimeEvent):
				sig = event.signal
				context = node.context
				try: 
					ct = self.constructorArgs[node.context]
					prepend=ct.name+"."
				except: prepend = ""
				for res in node.result:
					self.dependencies[res.getID()] = ("%sSignal%s" % (prepend,sig.name),"q_"+context.name+"_"+sig.name + ".receive(startTime)")
				for pin in node.output:
					if pin.type == sig:
						flow = pin.outgoing[0]
						next = flow.target
						if isinstance(next,Pin): next = next.owner
			else: 
				when = event.when
				w = str(when.expr.value)
				tm = str(when.expr.value)
				try: 
					assert w[-1] in ["s","m","h"]
					tm = int(w[0:-1]) #should throw a type error if it's not an int...
					if w[-1] is not "s" : tm = EU.convertTime(w[-1],"s",tm)
				except:
					EU.handleException("**** YOUR TIME EXPRESSION DOES NOT HAVE TIME UNITS!")
				self.dependencies["duration"] = ("Integer", tm)
				gl.log("finished time event")
		
		elif myType =="Value Specification Action" :
			val = node.value
			tname = None
			if isinstance(val,LiteralBoolean): (v,tname) = (str(val.isValue()).lower(),"Boolean")
			elif isinstance(val,LiteralInteger): (v,tname) = (str(val.getValue()),"Integer")
			else: v = str(val)
			objectFlowOut = node.result.outgoing[0]
			if not tname: 
				tname = "Object"
				t = node.value.type
				if t: tname = node.value.type.name
			tname = EU.type2java(tname)
			self.members[node.result.getID()] = (tname,str(v),"value specification VALUE")
			self.dependencies[node.result.getID()] = (tname,str(v))
		
		elif myType =="Opaque Action" :
			self.effects.append("result = " + str(node.body))
		
		elif myType =="Call Behavior Action" :
			if not node.behavior: #blank action...
				pass
			elif node.behavior.humanType == "Opaque Behavior":
				gl.log("*****OPAAAAQUE")
				args = node.argument
				res = node.result
				body = node.behavior.body
				for p in args: 
					if p.type: tname = EU.type2java(p.type.name) #parameter
					else: tname = "Object"
					if p.parameter: self.members[p.parameter.name] = (str(tname),None,"Argument Param: " + p.name)
					if p.parameter: self.dependencies[p.parameter.name] = (str(tname),p.getID())
				for p in res:
					if p.type: tname = EU.type2java(p.type.name)
					else: tname = "Object"
					if p.parameter: self.members[p.parameter.name] = (str(tname),None,"Result Pin: " + p.name)
					if p.parameter: self.dependencies[p.parameter.name] = (str(tname),node.behavior.body[0].split("=")[1])
					if p.parameter: self.dependencies[p.getID()] = (str(tname),p.parameter.name)
			else:
				behav = node.behavior
				owner = behav.owner
				interfaceText = ""
				if len(behav.ownedParameter)>0:
					self.inheritsFrom = str(node.behavior.owner.name + "." + node.behavior.getID()+"_interface")
					interfaceText = node.behavior.getID() + "_interface"
				gl.log("INHERITSFROM : %s" % str(self.inheritsFrom))
				self.elaborations[node.behavior]={
												"args": [("startTime","startTime","Integer"),("caller","this",interfaceText)],
												"enclosingClass" : node.behavior.owner.name+".this"}
				for pin in node.input:
					if pin.type: tname = pin.parameter.type.name
					else: tname = "Object"
					tname = EU.type2java(tname)
					self.elaborations[node.behavior]["args"].extend([(pin.parameter.getID(),pin.parameter.getID(),tname)])
					self.dependencies[pin.parameter.getID()] = (tname,pin.getID())
				for pin in node.output:
					if pin.type: tname = pin.parameter.type.name
					else: tname = "Object"
					tname = EU.type2java(tname)
					self.elaborations[node.behavior]["args"].extend([(pin.parameter.getID(),pin.parameter.getID(),tname)])
					self.dependencies[pin.getID()] = (tname,pin.parameter.getID())

		elif myType =="Start Object Behavior Action":
			inc = node.object.incoming[0]
			flowThing = self.feet[inc]
			if flowThing: 
				if isinstance(flowThing,Element):
					gl.log("ELABORATION= " + str(flowThing) + flowThing.name + node.name)
					flowClass=flowThing
					if isinstance(flowThing,Property): flowClass = flowThing.type
					self.elaborations[flowClass.classifierBehavior] = {
																	"args" : [("startTime","startTime","Integer")],
																	"enclosingClass" : flowThing.name}
				else: gl.log("*****ERROR -- CONTROL FLOW INTO START OBJECT BEHAVIOR OBJECT PIN!!")
			else: gl.log("*****ERROR -- CANNOT ELABORATE TO NONE FROM START OBJECT BEHAVIOR!!")

		elif myType =="Activity Parameter Node":
			tname = EU.type2java(node.parameter.type.name)
			if str(node.parameter.direction)=="in": 
				self.dependencies["objectToPass"] = (tname,node.parameter.getID())
				self.members[node.parameter.getID()] = (tname, None, "Initialize Activity Parameter Node receptacle for incoming value!")
			else: 
				self.members["startTimeMinusOne"] = ("Integer",None,"placeholder for a start time minus one function")
				self.dependencies["startTimeMinusOne"] = ("Integer","startTime-1")
				self.dependencies[node.parameter.getID()]=(tname,"objectToPass")
				self.members["sendDefault"] = ("Boolean","false","initialize whether to send default return value on object flow as false")
				self.dependencies["sendDefault"] = ("Boolean","%s_changed == null || %s_changed == false" % (node.parameter.getID(),node.parameter.getID()))
				self.effects.append("sig%s.sendIf(%s_default,startTimeMinusOne,sendDefault)" % (node.incoming[0].getID(),node.parameter.getID()))
		
		elif myType =="Decision Node":
			dif = node.decisionInputFlow
			if dif:
				try: tname = self.feet[dif].name
				except:tname = "Object"
				for dName,(dType,dVal) in self.dependencies.items():
					if dName.endswith("_exists"):
						dVal = dVal.replace("input","decisionInput")
						dVal = dVal.replace("ALH.getTokenValue()","decisionInput")
						self.dependencies[dName] = (dType,dVal)
					
		elif myType == "Activity Final Node":
			self.dependencies["endTime"] = ("Integer","startTime+duration")
			self.dependencies["finalNode_endTime"] = ("Integer","endTime")
		
		elif myType == "Merge Node": 
			tname = "Object"
			try:
				nextkey = self.nexts[node].keys()[0]
				nextFlow = self.nexts[node][nextkey]
				(t,tname) = self.getObtypeName(nextFlow, node)
				tname = EU.type2java(tname)
			except: gl.log('ARRGHAHGHAHGHAHG')
			self.members["receiveThis"] = ("ObjectFlow&lt;%s&gt;" % tname,None,"Anonymous receive for invoker!")
		gl.log("finished inspecting by type.")
Esempio n. 42
0
def getStypePropValue(element,stereotype,propname):
	return StereotypesHelper.getStereotypePropertyValue(element,stereotype,propname)
Esempio n. 43
0
def validateLocation(modelPackage, validateOnly, ignorePack):
	sterPlace =[]
	custPlace =[]
	if validateOnly!=True: gl.log('[FIXES]: for Package, Stereotypes, and Customization Locations')
###Find profile package
	profilePackage = profilePackCheck(modelPackage)
	if not profilePackage: return ['No Profile Package']
###Find infrastructure package
	infraPack = filter(lambda element: isinstance(element, Package) and "_"==element.getName(), profilePackage.getOwnedElement())
	if len(infraPack)>0: infraPack = infraPack[0]
	elif validateOnly != True:
		infraPack = ef.createPackageInstance()
		infraPack.setOwner(profilePackage)
		infraPack.setName("_")
		gl.log('[FIX]: Created "_" package')
	else: return['No "_" Package']
###Collect other packages	
	stereotypePackage = packageCheck(profilePackage, infraPack, validateOnly, "_Stereotypes")
	depSterPack = packageCheck(profilePackage, infraPack,  validateOnly, "_Deprecated Stereotypes")
	userscriptsPack = packageCheck(profilePackage, infraPack, validateOnly, "_UserScripts")
	customPackage = packageCheck(profilePackage, infraPack, validateOnly, "_Customizations")
	if not isinstance(stereotypePackage, Package) or not isinstance(customPackage, Package): return[stereotypePackage, customPackage, depSterPack]
###Find locations of all stereotypes and customizations
	allStereotypes = filter(lambda element: isinstance(element, Stereotype), getEverything(profilePackage))
	allCustomizations = filter(lambda element: isinstance(element, Class) and StereotypesHelper.hasStereotype(element, StereotypesHelper.getStereotype(project, "Customization")), getEverything(profilePackage))
	sterPlace = filter(lambda element: element.getOwner() != stereotypePackage, allStereotypes)
	sterPlace = filter(lambda element: element.getOwner()!=depSterPack, sterPlace)
	sterPlace = filter(lambda element: element.getOwner() != userscriptsPack, sterPlace)
	for p in ignorePack:
		sterPlace = filter(lambda element: element.getOwner() != p, sterPlace)
	userscriptPlace = filter(lambda element: element.getOwner()!= userscriptsPack and element.getName().find("opsrev")==0, allStereotypes)
	custPlace = filter(lambda element: element.getOwner()!=customPackage, allCustomizations)
###Move locations appropriately if set to fix
	if validateOnly!=True:
		setSterOwner(sterPlace, stereotypePackage, depSterPack, userscriptsPack)
		setSterOwner(userscriptPlace, stereotypePackage, depSterPack, userscriptsPack)
		setSterOwner(custPlace, customPackage, 'cust', 'beh')
###Check for icons
	sters = filter(lambda element: element.getOwner() != userscriptsPack, allStereotypes)
	sters = filter(lambda element: 'port' not in element.getName(), sters)
	sters = filter(lambda element: GeneralizationSet not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Dependency not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Association not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Package not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Operation not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Interface not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Enumeration not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Activity not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Signal not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	sters = filter(lambda element: Reception not in StereotypesHelper.getBaseClassesAsClasses(element), sters)
	for s in sters:
		icon = filter(lambda element: isinstance(element, Image), s.getOwnedElement())
		if not icon:
			gl.log('No icon for stereotype: ' + s.getName())
	return [stereotypePackage, depSterPack, customPackage, sterPlace, custPlace]
Esempio n. 44
0
def stereotypesForElements(modelPackage, validateOnly, elementType, stereotypesIgnore, packagesIgnore):
	if not stereotypesIgnore:
		stereotypesIgnore=[]
	profilePackage = profilePackCheck(modelPackage)
	if not profilePackage: return ['no Profile Package', 'no Profile Package', 'no Profile Package', 'no Profile Package']
	infraPack = filter(lambda element: isinstance(element, Package) and "_"==element.getName(), profilePackage.getOwnedElement())
	if len(infraPack)>0: infraPack = infraPack[0]
	else: return['no underscore pacakage, no underscore pacakage,no underscore pacakage,no underscore pacakage']
	stereotypePackage=packageCheck(profilePackage, infraPack, validateOnly, "_Stereotypes")
	if not stereotypePackage: return ['no Stereotype Package', 'no Stereotype Package', 'no Stereotype Package', 'no Stereotype Package']
	baseClass = getElements(getEverything(modelPackage), profilePackage)
	baseClass = filter(lambda element: "_" not in element.getName(), baseClass)
	if not isinstance(modelPackage, Profile): baseClass.append(modelPackage)
###intialize counts
	sterCreate = 0
	nameChange = 0
	unapply = 0
	apply = 0
###
	if elementType != 'Misc':
		baseClass = filter(lambda element: isinstance(element, elementType), baseClass)
		for s in stereotypesIgnore: baseClass = filter(lambda element: StereotypesHelper.hasStereotypeOrDerived(element, s) == False, baseClass)
		ignoredPackEls = []
		for i in packagesIgnore: baseClass = filter(lambda element: element not in getEverything(i), baseClass)
		result = getMissing(baseClass, filter(lambda element: isinstance(element, NamedElement),stereotypePackage.getOwnedElement()))
		bNoSter = result[0]
		bWrongSter = result[1]
		bWrongMeta = result[2]
		applySter = []
		for n in noApply:
			if n not in bWrongSter and n not in bWrongMeta and n in baseClass: applySter.append(n)
		if validateOnly!=True:
			('[FIXING]:' + str(elementType))
			successful = []
			bWS = []
			bWM=[]
			noFix=[]
			for b in bNoSter:
				bStillMissing = getMissing([b], filter(lambda element: isinstance(element, NamedElement), stereotypePackage.getOwnedElement()))
				bWS = bStillMissing[1]
				bWM = bStillMissing[2]
				if bStillMissing[0]:
					###check if any local stereotype is applied
					bLocalSter =  filter(lambda element: element.getOwner() == stereotypePackage, StereotypesHelper.getStereotypes(b))
					if len(bLocalSter)>0:
						for bL in bLocalSter:
							localSterApply = filter(lambda element:  bL in StereotypesHelper.getStereotypes(element), getElements(getEverything(profilePackage), profilePackage))
							if len(localSterApply)==1:
								###if local stereotype is applied to only this element in the base class then change the name of stereotype. Otherwise create new ster and unapply this one.
								bL.setName(propertyCheck(b))
								gl.log('[FIX]:Stereotype name was changed to match applied element name: ' + b.getQualifiedName())
								nameChange+=1
							elif filter(lambda element: propertyCheck(element) == bL.getName(), getElements(getEverything(profilePackage), profilePackage)):
								createStereotype(stereotypePackage, b, stereotypePackage)
								unapplyStereotypes([b])
								gl.log('[FIX]:Stereotype Created ' +b.getName())
								gl.log('\t\t Location = ' + b.getQualifiedName())	
								sterCreate+=1
							else:
								###get sysml extension, unapply stereotype and apply sysml extension
								bLgeneralizations = getGeneralizationTree(bL)
								bLSysGen = filter(lambda element: StereotypesHelper.getProfileForStereotype(element) == StereotypesHelper.getProfile(project, "SysML") or StereotypesHelper.getProfileForStereotype(element) == StereotypesHelper.getProfile(project, "additional_stereotypes"), bLgeneralizations)
								unapplyStereotypes([b])
								if bLSysGen:
									StereotypesHelper.addStereotype(b, bLSysGen[0])
								gl.log('[FIX]:Stereotype applied to multiple elements, none with matching name.  Unapplied stereotype:' + bL.getName())
								unapply+=1
								createStereotype(stereotypePackage, b, stereotypePackage)
								unapplyStereotypes([b])
								gl.log('[FIX]:Stereotype Created ' +b.getName())
								gl.log('\t\t Location = ' + b.getQualifiedName())
								sterCreate+=1
					else:
						createStereotype(stereotypePackage, b, stereotypePackage)
						unapplyStereotypes([b])
						gl.log('[FIX]:Stereotype Created ' +b.getName())
						gl.log('\t\t Location = ' + b.getQualifiedName())
						sterCreate+=1
			for b in bWS:
				if not isinstance(b, Interface) and StereotypesHelper.getBaseClassAsClasses(b)[0] == Port:
					if b.getName().find("part property")==0:
						bPort = filter(lambda element: element.getName() == b.getName() + " port", filter(lambda element: isinstance(element, NamedElement), stereotypePackage.getOwnedElement()))
						if len(bPort)!=0:
							bApplied = filter(lambda element: StereotypesHelper.isElementStereotypedBy(element, b.getName())==True, baseClass)
							for f in bApplied:
								StereotypesHelper.removeStereotypes(f, [b])
								StereotypesHelper.addStereotype(f, bPort)
			###Apply applicable stereotypes
			for b in noApply:
				if b not in bWrongSter and b not in bWrongMeta and b not in bWS and b not in bWM and b in baseClass:
					if StereotypesHelper.getBaseClasses(noApply[b])[0].getName() != 'Element':
						StereotypesHelper.addStereotype(b, noApply[b])
						unapplyStereotypes([b])
						gl.log('[FIX]: Stereotype Applied ' + b.getName())
						gl.log('\t\t Location = '+b.getQualifiedName())
						apply+=1
			if len(bWrongSter)>0: gl.log('[UNFIXABLE]: Inheritance Mismatch (see validation log for details)')
			for b in bWrongMeta:
					gl.log('[UNFIXABLE]: Metaclass Mismatch: '+ b.getQualifiedName())
#		if elementType == Classifier and validateOnly!=True: localGeneralizations(modelPackage, validateOnly, True)
###Messages Log
		if apply!=0 or sterCreate!=0 or nameChange !=0 or unapply!=0:
			gl.log('[FIX SUMMARY]:')
			gl.log(str(apply) + " existing stereotype(s) applied")
			gl.log(str(sterCreate) + " stereotypes created")
			gl.log(str(nameChange) + " stereotype names changed")
			gl.log(str(unapply) + " stereotypes unapplied")
		else: gl.log('No Fixes Needed')
		if len(bWrongSter)!=0 or bWrongMeta!=0: 
			gl.log('[UNFIXABLE SUMMARY]:')
			if len(bWrongSter)>0: gl.log(str(len(bWrongSter))+ " stereotype inheritance mismatch")
			if len(bWrongMeta)>0: gl.log(str(len(bWrongMeta))+ " stereotype metaclasses and element types not matching")
		else: gl.log('No modeler fixes needed')
################
		return [bNoSter, bWrongSter, bWrongMeta, applySter]
	else:
		baseClass = filter(lambda element: not isinstance(element, Class), baseClass)
		baseClass = filter(lambda element: not isinstance(element, Package), baseClass)
		baseClass = filter(lambda element: not isinstance(element, Property), baseClass)
		baseClass = filter(lambda element: not isinstance(element, Operation), baseClass)
		baseClass = filter(lambda element: not isinstance(element, Diagram), baseClass)
		baseClass = filter(lambda element: not isinstance(element, Dependency), baseClass)
		for s in stereotypesIgnore: baseClass = filter(lambda element: StereotypesHelper.hasStereotypeOrDerived(element, s) == False, baseClass)
		ignoredPackEls = []
		for i in packagesIgnore: baseClass = filter(lambda element: element not in getEverything(i), baseClass)
		resultMisc = getMissing(baseClass, stereotypePackage.getOwnedElement())
		mNoSter = resultMisc[0]
		mWrongSter = resultMisc[1]
		mWrongMeta = resultMisc[2]
		applySter = []
		for n in noApply:
			if n not in mWrongSter and n not in mWrongMeta and n in baseClass: applySter.append(n)
		if validateOnly!=True:
			gl.log('[FIX]:' + str(elementType))
			successful = []
			for b in mNoSter:
				mStillMissing = getMissing([b], stereotypePackage.getOwnedElement())
				if mStillMissing[0]:
					createStereotype(stereotypePackage, b, stereotypePackage)
					unapplyStereotypes([b])
			    	gl.log('\t Stereotype Created ' +b.getName())
			    	gl.log('\t\t Location = ' + b.getQualifiedName())
			for b in noApply:
				if b not in mWrongSter and b not in mWrongMeta and n in baseClass:
					StereotypesHelper.addStereotype(b, noApply[b])
					unapplyStereotypes([b])
					gl.log('\t Stereotype Applied ' + b.getName())
					gl.log('\t\t Location = '+b.getQualifiedName())
			if len(mWrongSter)>0: gl.log('UNFIXABLE: Inheritance Mismatch (see validation log for details)')
			if len(mWrongMeta)>0: gl.log('UNFIXABLE: Metaclass Mismatch (see validation log for details)')
		return [mNoSter, mWrongSter, mWrongMeta, applySter]
Esempio n. 45
0
from com.nomagic.uml2.ext.magicdraw.activities.mdbasicactivities import *
from com.nomagic.uml2.ext.magicdraw.activities.mdintermediateactivities import *
from com.nomagic.uml2.ext.magicdraw.auxiliaryconstructs.mdinformationflows import *
from com.nomagic.uml2.ext.magicdraw.compositestructures.mdports import *
from com.nomagic.uml2.ext.magicdraw.commonbehaviors.mdsimpletime import *
from com.nomagic.uml2.ext.magicdraw.interactions.mdbasicinteractions import Interaction
from com.nomagic.uml2.ext.magicdraw.classes.mdpowertypes import GeneralizationSet
from com.nomagic.uml2.ext.magicdraw.commonbehaviors.mdcommunications import Reception, Signal
from com.nomagic.uml2.ext.magicdraw.activities.mdfundamentalactivities import Activity
from com.nomagic.uml2.ext.jmi.helpers import CoreHelper

gl = Application.getInstance().getGUILog()
project = Application.getInstance().getProject()
ef = project.getElementsFactory()
mem = ModelElementsManager.getInstance()
sysmlProf=StereotypesHelper.getProfile(project,"SysML")
sysmlSt=StereotypesHelper.getStereotypesByProfile(sysmlProf)
datapack=project.getModel()
noApply = {}

def validateLocation(modelPackage, validateOnly, ignorePack):
	sterPlace =[]
	custPlace =[]
	if validateOnly!=True: gl.log('[FIXES]: for Package, Stereotypes, and Customization Locations')
###Find profile package
	profilePackage = profilePackCheck(modelPackage)
	if not profilePackage: return ['No Profile Package']
###Find infrastructure package
	infraPack = filter(lambda element: isinstance(element, Package) and "_"==element.getName(), profilePackage.getOwnedElement())
	if len(infraPack)>0: infraPack = infraPack[0]
	elif validateOnly != True:
Esempio n. 46
0
def stereotypeGenCheck(modelPackage, validateOnly):
###Packages
	profilePackage = profilePackCheck(modelPackage)
	if not profilePackage: return ['No Profile Package']
	infraPack = filter(lambda element: isinstance(element, Package) and "_"==element.getName(), profilePackage.getOwnedElement())
	if len(infraPack)>0: infraPack = infraPack[0]
	else: return['No underscore Package']
	stereotypePackage = packageCheck(profilePackage,  infraPack, validateOnly, "_Stereotypes")
	if not stereotypePackage: return['No Stereotype Package']	
	stereotypes =filter(lambda element: isinstance(element, Stereotype), stereotypePackage.getOwnedElement())
	badG = []
	badGs=[]
	noSys = []
	sBad = []

	for s in stereotypes:
		sGenerals = filter(lambda element: isinstance(element, Generalization), s.getOwnedElement())
		sGeneral =[]
		for sg in sGenerals:
			sGeneral.extend(s.getGeneral())
		sSysML = filter(lambda element: StereotypesHelper.getProfileForStereotype(element) == StereotypesHelper.getProfile(project, "SysML"), sGeneral)
		sAdd = filter(lambda element: StereotypesHelper.getProfileForStereotype(element)==StereotypesHelper.getProfile(project, "additional_stereotypes"), sGeneral)
#		if StereotypesHelper.getProfileForStereotype(sGeneral) in ignoreProfile:
#			sSyMLInh = filter(lambda element: StereotypesHelper.getProfileForStereotype(element)==StereotypesHelper.getProfile(project, "SysML"), SR.getGeneralizationTree(sg))
###Collect stereotypes with no sysml generalization
		if len(sSysML)==0 and len(sAdd)==0: noSys.append(s)
###Collect stereotypes with generalizations to non sysml elements and not part of ignore profiles
		sBad = filter(lambda element: StereotypesHelper.getProfileForStereotype(element) != StereotypesHelper.getProfile(project, "SysML"), sGeneral)
		sBad = filter(lambda element: StereotypesHelper.getProfileForStereotype(element) != StereotypesHelper.getProfile(project, "additional_stereotypes"), sBad)
		sBad = filter(lambda element: StereotypesHelper.getProfileForStereotype(element) != profilePackage, sBad)
		sBad = filter(lambda element: element.getOwner() != stereotypePackage, sBad)
#		for i in ignoreProfile:
#			sBad = filter(lambda element: StereotypesHelper.getProfileForStereotype(element) != StereotypesHelper.getProfile(project, i.getName()), sBad)
		sBad = filter(lambda element: element not in stereotypes, sBad)
		for n in sBad:
			badG.append(filter(lambda element: isinstance(element, Generalization) and element.getGeneral() == n and element.getSpecific() == s, s.get_directedRelationshipOfSource()))
	badG = flatten(badG)			
	if validateOnly!=True:
		for b in badG:
			gl.log('[FIX]: removing generalization between '+ b.getGeneral().getName() + ' and '+ b.getSpecific().getName())
			mem.removeElement(b)
###refine stereotypes with no sysml generalization collection
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Package") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Dependency") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project,"Connector") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Operation") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Diagram") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Port") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Activity") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "DataType") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "GeneralizationSet") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Association") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Reception") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Interaction") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Interface") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Enumeration") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Constraint") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "Signal") not in StereotypesHelper.getBaseClasses(element), noSys)
	noSys = filter(lambda element: StereotypesHelper.getMetaClassByName(project, "SignalEvent") not in StereotypesHelper.getBaseClasses(element), noSys)
	if validateOnly != True: gl.log('['+ str(len(noSys))+'] possible SysML specializations. No codified fix for stereotypes that can specialize SysML.  Modeler must do. ')
	return [sBad, noSys]