def run(mode): selected = None if mode == 'b': selected = Application.getInstance().getMainFrame().getBrowser( ).getActiveTree().getSelectedNode().getUserObject() if mode == 'd': selected = Application.getInstance().getProject().getActiveDiagram( ).getSelected().get(0).getElement() if not isinstance(selected, Class): gl.log("You must select a block!!!") return try: SessionManager.getInstance().createSession("generalize") choice = JOptionPane.showConfirmDialog( None, "If you undo specializations you may lose default values on blocks since they'll be deleted, continue?", "Continue?", JOptionPane.YES_NO_OPTION) if choice == JOptionPane.YES_OPTION: undo(selected) SessionManager.getInstance().closeSession() except: SessionManager.getInstance().cancelSession() exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() messages = traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback) for message in messages: gl.log(message)
def replaceString(s): replaced = s results = slotre.findall(replaced) for result in results: instance = project.getElementByID(result) if instance is not None: id = Converters.getElementToIdConverter().apply(instance) replaced = replaced.replace(result, id) Application.getInstance().getGUILog().log('[INFO] replacing ' + result + ' with ' + id) return replaced
def getSelectedElementsInBrowser(complain): elements = [] tree = Application.getInstance().getMainFrame().getBrowser().getActiveTree( ) if tree == None: gl.log("No active tree!") return elements if debug: logInfo("tree", tree) nodes = tree.getSelectedNodes() if debug: logInfo("nodes", nodes) if nodes != None and len(nodes) > 0: for selectedNode in nodes: if selectedNode != None: if debug: logInfo("selected node", selectedNode) selected = selectedNode.getUserObject() if selected != None: elements.append(selected) if debug: logInfo("selected", selected) elif complain: gl.log("selected = None") elif complain: gl.log("selectedNode = None") elif complain: gl.log("No selected nodes!") return elements
def getSelectedElementsInDiagram(): project = Application.getInstance().getProject() diagram = None selectedList = None if project != None: diagram = project.getActiveDiagram() if diagram != None: selectedList = diagram.getSelected() if selectedList != None: selectedElements = [ x.getElement() for x in selectedList ] return selectedElements
def run(s): #get the user's selection - the element that should be top level and contain (recursively) all other systems/behaviors you wish to reason about. selectedNode1 = Application.getInstance().getMainFrame().getBrowser().getActiveTree().getSelectedNodes()[0] #gl.log(str(dir(selectedNode1))) firstSelected = selectedNode1.getUserObject() #gl.log(str(dir(firstSelected))) gl.log( "selected name = " + firstSelected.name ) gl.log( "selected id = " + str(firstSelected.getID()) )
def getSelectedElementsInDiagram(): project = Application.getInstance().getProject() diagram = None selectedList = None if project != None: diagram = project.getActiveDiagram() if diagram != None: selectedList = diagram.getSelected() if selectedList != None: selectedElements = [x.getElement() for x in selectedList] return selectedElements
def run(s): #get the user's selection - the element that should be top level and contain (recursively) all other systems/behaviors you wish to reason about. selectedNode1 = Application.getInstance().getMainFrame().getBrowser( ).getActiveTree().getSelectedNodes()[0] #gl.log(str(dir(selectedNode1))) firstSelected = selectedNode1.getUserObject() #gl.log(str(dir(firstSelected))) gl.log("selected name = " + firstSelected.name) gl.log("selected id = " + str(firstSelected.getID()))
def setup(): ''' I use this to store anything handy I want to use. This script is pretty simple so far so it's very small... ''' global gl gl = Application.getInstance().getGUILog() gl.clearLog() return True
def __init__(self): gl.log("Initializing the Magic Draw Animator!") #project is used to find element by ID #SEM is key to getting symbols (usages on diagram) from elements self.project = Application.getInstance().getProjectsManager().getActiveProject() self.SEM = self.project.getSymbolElementMap() self.knownComponents = {} #{componentID,symbol} self.defaults = {} #{sym: (fill color, line color)} self.activeDiagrams = [] #probably don't need the active diagram tracker either but maybe later. self.paintEvents={} #keeps track of ActionListener thing for each symbol
def actionPerformed(self, event): filename = pluginDescriptor.getPluginDirectory().getAbsolutePath()+os.sep+self.getName()+".py" try: execfile( filename ) except : gl = Application.getInstance().getGUILog() exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() gl.log("*** EXCEPTION:") messages=traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback) for message in messages: gl.log(message)
def actionPerformed(self, event): gl = Application.getInstance().getGUILog() try: #gl.log("blah") mod = __import__(self.getName().replace(" ", "_")) reload(mod) mod.run(self.s) except: exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() gl.log("*** EXCEPTION:") messages=traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback) for message in messages: gl.log(message)
def __init__(self): gl.log("Initializing the Magic Draw Animator!") # project is used to find element by ID # SEM is key to getting symbols (usages on diagram) from elements self.project = Application.getInstance().getProjectsManager().getActiveProject() self.SEM = self.project.getSymbolElementMap() self.knownComponents = {} # {componentID,symbol} self.defaults = {} # {sym: (fill color, line color)} self.activeDiagrams = [] # probably don't need the active diagram tracker either but maybe later. self.paintEvents = {} # keeps track of the PaintEvent thing for each symbol self.currentPaintEvents = [] # the collection of events to be painted together self.currentDiagram = None # to avoid potential overhead of opening an already open diagram.
def run(x): gl.clearLog() project = Application.getInstance().getProjectsManager().getActiveProject() SEM = project.getSymbolElementMap() possibilities = None id = JOptionPane.showInputDialog( None, "Element ID", "Find Element", JOptionPane.PLAIN_MESSAGE, None, possibilities, None) if id and len(id)>0: id = id.strip() id = id.lstrip("sig") gl.log("looking for %s" % id) try: element = project.getElementByID(id) except: MPUtils.handleException("Can't find an element matching this ID.") return if not element: gl.log("Can't find element matching this ID.") return gl.log("Found Element with ID = " + str(id) + ": ") try: gl.log(" Name: %s" % element.name) except: try: gl.log(" HumanName: %s" % element.humanName) except: pass gl.log(" Type: %s" % element.humanType) try: symbols = SEM.getAllPresentationElements(element) except: MPUtils.handleException("Can't find symbols matching this ID.") return if symbols: if len(symbols)>1: for s in symbols: if s: gl.log("MULTIPLE SYMBOLS!! " + str(s) + " in diagram " + str(s.getDiagramPresentationElement())) else: gl.log("MULTIPLE SYMBOLS!! " + str(s) ) gl.log("choosing first symbol") if len(symbols)>0: sym = symbols[0] if sym: diagram = sym.getDiagramPresentationElement() diagram.open() sym.setSelected(True) else: gl.log("wtf?") else: gl.log("No symbols found for componentId=" + str(id)) else: gl.log("barrrf")
def __init__(self, namespace={}): """ Create a MagicDraw Jython Console. namespace is an optional and should be a dictionary or Map """ # populate with the application and current project namespace['app'] = Application.getInstance() # TODO: probably need to listen for this changing, huh? namespace['proj'] = namespace['app'].getProject() # TODO: probably need to listen for this changing, huh? namespace['model'] = namespace['proj'].getModel() Console.__init__(self, namespace)
def __init__(self): gl.log("Initializing the Magic Draw Animator!") #project is used to find element by ID #SEM is key to getting symbols (usages on diagram) from elements self.project = Application.getInstance().getProjectsManager( ).getActiveProject() self.SEM = self.project.getSymbolElementMap() self.knownComponents = {} #{componentID,symbol} self.defaults = {} #{sym: (fill color, line color)} self.activeDiagrams = [ ] #probably don't need the active diagram tracker either but maybe later. self.paintEvents = { } #keeps track of ActionListener thing for each symbol
def actionPerformed(self, event): filename = pluginDescriptor.getPluginDirectory().getAbsolutePath( ) + os.sep + self.getName() + ".py" try: execfile(filename) except: gl = Application.getInstance().getGUILog() exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() gl.log("*** EXCEPTION:") messages = traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback) for message in messages: gl.log(message)
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 __init__(self): self.events = [] self.timeScale = float(3.0) #animation sped up by this factor ts = JOptionPane.showInputDialog(None, "Increase speed by factor of...", "Set Timescale", JOptionPane.PLAIN_MESSAGE, None, None, "3.0") try: if ts and float(ts): self.timeScale = float(ts) except: pass gl.log("using timescale: %s" % str(self.timeScale)) self.frame = None if usingDialogs: self.frame = Application.getInstance().getMainFrame()
def collectElementsByStereotypes(source, filters): """ get all owned elements of model element (diagram or package) with given stereotypes (including derived) if source is diagram, gives all model elements on that diagram (not presentation elements) params: a model element (can be diagram or Package) list of stereotype elements returns: list of elements that fits stereotypes, or empty list""" alls = [] if isinstance(source, Diagram): project = Application.getInstance().getProject() alls.extend(project.getDiagram(source).getUsedModelElements(False)) else: _collectRecursiveOwnedElements(source, alls) return filterElementsByStereotypes(alls, filters)
def __init__(self): gl.log("Initializing the Magic Draw Animator!") #project is used to find element by ID #SEM is key to getting symbols (usages on diagram) from elements self.project = Application.getInstance().getProjectsManager( ).getActiveProject() self.SEM = self.project.getSymbolElementMap() self.knownComponents = {} #{componentID,symbol} self.defaults = {} #{sym: (fill color, line color)} self.activeDiagrams = [ ] #probably don't need the active diagram tracker either but maybe later. self.paintEvents = { } #keeps track of the PaintEvent thing for each symbol self.currentPaintEvents = [ ] #the collection of events to be painted together self.currentDiagram = None #to avoid potential overhead of opening an already open diagram.
def run(mode): if mode == 'b': selected = Application.getInstance().getMainFrame().getBrowser( ).getActiveTree().getSelectedNode().getUserObject() try: SessionManager.getInstance().createSession("syncProfile") deprecateStereotypes(selected) SessionManager.getInstance().closeSession() except: if SessionManager.getInstance().isSessionCreated(): SessionManager.getInstance().cancelSession() exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() gl.log("*** EXCEPTION:") messages = traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback) for message in messages: gl.log(message)
def __init__(self): self.events = [] self.timeScale = float(3.0) #animation sped up by this factor ts = JOptionPane.showInputDialog( None, "Increase speed by factor of...", "Set Timescale", JOptionPane.PLAIN_MESSAGE, None, None, "3.0") try: if ts and float(ts): self.timeScale = float(ts) except: pass gl.log("using timescale: %s" % str(self.timeScale)) self.frame = None if usingDialogs: self.frame = Application.getInstance().getMainFrame();
def run(mode): if mode == 'b': selected = Application.getInstance().getMainFrame().getBrowser().getActiveTree().getSelectedNode().getUserObject() try: SessionManager.getInstance().createSession("syncProfile") A = getPackages(selected) D = validateLocation(A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]) B = validateBaseClass(A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]) C = validateStereotypes(A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]) E = elementClassifierValidation(A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]) F = stereotypeClassifierValidation(A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]) G = nameMismatch(A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]) H = multipleStereotypes(A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]) validationSummary(D[0], D[1], D[2], D[3], C[0], C[1],B[0], B[1], B[2], B[3], E[0], F[0], G[0], H[0]) SessionManager.getInstance().closeSession() except: if SessionManager.getInstance().isSessionCreated(): SessionManager.getInstance().cancelSession() exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() gl.log("*** EXCEPTION:") messages=traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback) for message in messages: gl.log(message)
def getSelectedElementsInBrowser(complain): elements = [] tree = Application.getInstance().getMainFrame().getBrowser().getActiveTree() if tree == None: gl.log("No active tree!") return elements if debug: logInfo("tree", tree) nodes = tree.getSelectedNodes() if debug: logInfo("nodes", nodes) if nodes != None and len(nodes) > 0: for selectedNode in nodes: if selectedNode != None: if debug: logInfo("selected node", selectedNode) selected = selectedNode.getUserObject() if selected != None: elements.append(selected) if debug: logInfo("selected", selected) elif complain: gl.log("selected = None") elif complain: gl.log("selectedNode = None") elif complain: gl.log("No selected nodes!") return elements
from gov.nasa.jpl.mbee import DocGen3Profile from gov.nasa.jpl.mgss.mbee.docgen.docbook import DBParagraph from gov.nasa.jpl.mgss.mbee.docgen.docbook import DBSection import messaging from com.nomagic.magicdraw.core import Application from com.nomagic.magicdraw.core import Project from com.nomagic.uml2.ext.jmi.helpers import StereotypesHelper from com.nomagic.uml2.ext.jmi.helpers import ModelHelper targets = scriptInput['DocGenTargets'] output = [] thisProject = Application.getInstance().getProject() INSPIREReqS = StereotypesHelper.getStereotype(thisProject, "INSPIRE.Requirement") for t in targets: messaging.DBG(t.getName()) idSlot = StereotypesHelper.getSlot(t, INSPIREReqS, "Id", False) coreText = '' for myVal in idSlot.getValue(): coreText = myVal.getValue() output.append(DBParagraph(coreText + ' ' + t.getName())) textSlot = StereotypesHelper.getSlot(t, INSPIREReqS, "Text", False)
#this is where the actual animator class lives import MagicDrawAnimatorUtils2 reload (MagicDrawAnimatorUtils2) import MPUtils reload (MPUtils) import os from os.path import expanduser homeDir = expanduser("~") #homeDir = '/home/bclement' gitDir = homeDir + os.sep + 'git' projectPath = gitDir + os.sep + 'bae' filepath = projectPath + os.sep + 'simulationSnapshot.example.txt' global gl gl = Application.getInstance().getGUILog() def setup(): ''' I use this to store anything handy I want to use. This script is pretty simple so far so it's very small... ''' global gl gl = Application.getInstance().getGUILog() gl.clearLog() return True def run(x): ''' Do whatever can be done in normal MD thread here.
def run(s): starttime = time.time() if not setup(): return gl.log("Last Exporter Modification Date: March 4, 2013") #get the user's selection - the element that should be top level and contain (recursively) all other systems/behaviors you wish to reason about. firstSelected = Application.getInstance().getMainFrame().getBrowser().getActiveTree().getSelectedNodes()[0].getUserObject() gl.log(str(time.time()) + "You have selected " + firstSelected.name + " as the highest level element in your system.") global firstSelected #make sure the user picked a class... if not isinstance(firstSelected,Class): gl.log("***ERROR: you must select some kind of class as your top level element.") return systemBehavior = firstSelected.classifierBehavior try: gl.log(systemBehavior.name) except: gl.log("***ERROR: your top level system doesn't have a classifier behavior!") return inspected = [] classifiersToInspect = [firstSelected] toInspect = [firstSelected] classesToTranslate = [] constructorArgs = {} global data global inspected global toInspect global classifiersToInspect global constructorArgs #collect and inspect everybody based on top classifier! count = 0 while len(classifiersToInspect)>0: if count > 50: gl.log("***LOOP LIMIT REACHED!") return thing = classifiersToInspect.pop(0) classesToTranslate.append(inspect(thing)) count += 1 inspecttime = time.time() gl.log("finished inspecting - time: %s" % str(inspecttime-starttime)) #write everything out log_dir = getLogDirectory() os.chdir(log_dir) log_file_name = "Scenario_XML_" + str(EU.formatCurrentTime()) + ".xml" log_file = EW.makeLog(firstSelected,classesToTranslate,log_file_name) latestDir = getLatestDirectory() ffile = "Demo_Scenario_Latest.xml" gl.log("time to write scenario: %s" % str(time.time()-inspecttime)) generatedXmlFileName = getFileName(latestDir,ffile) if generatedXmlFileName: shutil.copyfile(log_file_name, generatedXmlFileName) gl.log("copied file from " + os.getcwd() + " copied " + log_file_name + " to " + generatedXmlFileName ) #gl.log("\nERRORS:") #for thing in classesToTranslate: # if len(thing.errors.keys())>0: # gl.log("errors in %s" % thing.name) # gl.log(" %s" % str(thing.errors)) gl.log("\nThe log file for this execution is located at: " + str(os.getcwd()) ) gl.log("The log file: %s" % str(generatedXmlFileName) ) gl.log("time to do everything: %s" % str(time.time()-starttime)) return generatedXmlFileName
from com.nomagic.magicdraw.core import Application from com.nomagic.magicdraw.core import Project import re import os import sys import traceback import time import xmlrpclib import xml.parsers.expat xml.parsers.expat._xerces_parser = "com.sun.org.apache.xerces.internal.parsers.SAXParser" ####################################### ##set up project / script parameters ####################################### gl = Application.getInstance().getGUILog() project = Application.getInstance().getProjectsManager().getActiveProject() #ah=ActHi(project) #ah.highlight("Activity1","A1","on") #ah.highlight("Activity1","A2","on") #ah.highlight("Activity1","A2","off") #ah.clearAll() XMLRPC_PORT = 8150 # Main test code try: gl.log("Starting XML-RPC client, project %s..." % project) ## ## This also serves as an example of client's interaction with the
from com.nomagic.magicdraw.openapi.uml import ModelElementsManager from com.nomagic.magicdraw.uml import ClassTypes from com.nomagic.magicdraw.uml import ElementFinder from com.nomagic.magicdraw.actions import * 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):
beforeName = element.getName() afterName = replaceString(beforeName) if (afterName == beforeName): return False element.setName(afterName) return True def replaceString(s): replaced = s results = slotre.findall(replaced) for result in results: instance = project.getElementByID(result) if instance is not None: id = Converters.getElementToIdConverter().apply(instance) replaced = replaced.replace(result, id) Application.getInstance().getGUILog().log('[INFO] replacing ' + result + ' with ' + id) return replaced project = Application.getInstance().getProject() if (SessionManager.getInstance().isSessionCreated(project)): SessionManager.getInstance().cancelSession(project) SessionManager.getInstance().createSession( project, 'Fixing twc server ids in cfs to local ids') replaceElementsRecursively(project.getModel()) SessionManager.getInstance().closeSession(project) Application.getInstance().getGUILog().log( '[INFO] Fixed cross-reference(s) in ' + str(replacementCount) + ' element(s).')
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")
from com.nomagic.uml2.ext.magicdraw.classes.mdkernel import * from com.nomagic.uml2.ext.magicdraw.classes.mddependencies import * from com.nomagic.uml2.ext.magicdraw.classes.mdinterfaces import * from com.nomagic.uml2.ext.magicdraw.actions.mdbasicactions import * 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']
from gov.nasa.jpl.mgss.mbee.docgen.table import EditableTable from gov.nasa.jpl.mgss.mbee.docgen.table import PropertyEnum from gov.nasa.jpl.mgss.mbee.docgen.docbook import DBParagraph from com.nomagic.uml2.ext.magicdraw.classes.mdkernel import * from gov.nasa.jpl.mbee.lib import Utils from com.nomagic.uml2.ext.jmi.helpers import StereotypesHelper from com.nomagic.magicdraw.core import Application proj = Application.getInstance().getProject() targets = scriptInput['DocGenTargets'] model = [] #this is for the editable table body headers = ['Document', 'Doc ID'] #this is for the editable table header editable = [True, True] #this is whether the table cells are editable prop = [PropertyEnum.NAME, PropertyEnum.VALUE] #this is what should be edited for each cell stereotype = StereotypesHelper.getStereotype(proj, "Product", "Document Profile") #this is needed to get the slots for t in targets: for doc in t.getOwnedElement(): if StereotypesHelper.hasStereotype(doc, stereotype): #in this case, we want to edit the name and the JPL Document ID slot (stereotype tag) value #editing values can also apply to property default values - substitute the property element in model.append([doc, StereotypesHelper.getSlot(doc, stereotype, "JPL Document ID", False, False)]) # the None arguments can be replace with 2d lists if you want to specify 'editable' and 'prop' for each cell table = EditableTable("Documents and Their ID", model, headers, None, None, None) table.setEditableCol(editable) #specify editability by column table.setWhatToShowCol(prop) #specify what property to edit by column table.prepareTable() # if you have a simple table that should render the same in docgen as the popup table,