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<%s>" % (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<Boolean>",'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<Signal%s>" % 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<Signal%s>" % 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)
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]
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]
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
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
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
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
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
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
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
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
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
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
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)
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]
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
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
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
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
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
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
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
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
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]
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
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
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
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
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
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 ")
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
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
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
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
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
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)
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")
def createCustomization(stereotypeName, owner): new = ef.createClassInstance() new.setOwner(owner) new.setName(stereotypeName) StereotypesHelper.addStereotype(new, StereotypesHelper.getStereotype(project, "Customization")) return new
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
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]
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<%s>" % (objectOut.type.name, EU.type2java(sf.type.name))) if objectOut.type else ("TimeVaryingMap<%s>" % 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<%s>" % tname,None,"Anonymous receive for invoker!") gl.log("finished inspecting by type.")
def getStypePropValue(element,stereotype,propname): return StereotypesHelper.getStereotypePropertyValue(element,stereotype,propname)
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]
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]
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:
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]