Search in sources :

Example 1 with AwasGraphImpl

use of org.sireum.awas.awasfacade.AwasGraphImpl in project osate-plugin by sireum.

the class ReachBackwardHandler method execute.

@SuppressWarnings("restriction")
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    final Boolean isImplDiagram = false;
    IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
    List<DiagramElement> des = SelectionUtil.getSelectedDiagramElements(SelectionHelper.getDiagramSelection(), // getSelectedDiagramElem(event)
    true);
    List<InstanceObject> ios = des.stream().flatMap(de -> {
        Object bo = de.getBusinessObject();
        List<InstanceObject> io = new ArrayList<InstanceObject>();
        if (bo != null && bo instanceof InstanceObject) {
            io.add(((InstanceObject) bo));
        }
        return io.stream();
    }).collect(Collectors.toList());
    List<String> criterions = ios.stream().map(io -> io.getInstanceObjectPath()).collect(Collectors.toList());
    if (!ios.isEmpty()) {
        MessageConsole console = displayConsole("Awas Console");
        try {
            Aadl model = Util.getAir(ios.get(0).getSystemInstance(), true, console);
            Model awasModel = org.sireum.awas.slang.Aadl2Awas$.MODULE$.apply(model);
            SymbolTable st = org.sireum.awas.symbol.SymbolTable$.MODULE$.apply(awasModel, new ConsoleTagReporter());
            FlowGraph<FlowNode, FlowEdge<FlowNode>> graph = org.sireum.awas.flow.FlowGraph$.MODULE$.apply(awasModel, st, false);
            AwasGraph awasgraph = new AwasGraphImpl(graph, st);
            String query = "t = reach backward " + "{" + String.join(",", criterions) + "}";
            Map<String, Collector> qres = awasgraph.queryEvaluator(query);
            if (qres.isEmpty()) {
                MessageDialog.openError(window.getShell(), "Sireum", "Empty result");
            } else {
                final DiagramService diagramService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(DiagramService.class);
                SystemInstance si = ios.get(0).getSystemInstance();
                Resource resource = si.eResource();
                List<Collector> lc = new ArrayList<Collector>(qres.values());
                Set<AgeEditor> ads = AwasUtil.awasGraphUri2AgeDiagramEditor(lc.get(0).getGraph(), isImplDiagram, st, resource, diagramService);
                AwasUtil.highlightDiagrams(ads, lc.get(0), isImplDiagram, st, resource);
            }
        } catch (URISyntaxException e1) {
            // // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (Exception e3) {
            e3.printStackTrace();
            String m2 = "Could not invoke visualizer.  Please make sure Awas is configured correctly.\n\n" + e3.getLocalizedMessage();
            MessageDialog.openError(window.getShell(), "Sireum", m2);
        }
    } else {
        String m3 = "Please select a component or port from the instance diagram";
        MessageDialog.openError(window.getShell(), "Sireum", m3);
    }
    return null;
}
Also used : ExecutionEvent(org.eclipse.core.commands.ExecutionEvent) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) Element(org.osate.aadl2.Element) AbstractSireumHandler(org.sireum.aadl.osate.handlers.AbstractSireumHandler) URISyntaxException(java.net.URISyntaxException) AwasGraphImpl(org.sireum.awas.awasfacade.AwasGraphImpl) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) ArrayList(java.util.ArrayList) HandlerUtil(org.eclipse.ui.handlers.HandlerUtil) AgeEditor(org.osate.ge.gef.ui.editor.AgeEditor) IStatus(org.eclipse.core.runtime.IStatus) SelectionHelper(org.sireum.aadl.osate.util.SelectionHelper) Map(java.util.Map) Collector(org.sireum.awas.awasfacade.Collector) FlowGraph(org.sireum.awas.flow.FlowGraph) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) AwasUtil(org.sireum.aadl.osate.awas.util.AwasUtil) SystemInstance(org.osate.aadl2.instance.SystemInstance) Shell(org.eclipse.swt.widgets.Shell) PlatformUI(org.eclipse.ui.PlatformUI) DiagramService(org.osate.ge.internal.services.DiagramService) Aadl(org.sireum.hamr.ir.Aadl) SelectionUtil(org.osate.ge.internal.ui.util.SelectionUtil) SymbolTable(org.sireum.awas.symbol.SymbolTable) Set(java.util.Set) IOException(java.io.IOException) ExecutionException(org.eclipse.core.commands.ExecutionException) MessageConsole(org.eclipse.ui.console.MessageConsole) Model(org.sireum.awas.ast.Model) Collectors(java.util.stream.Collectors) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) FlowEdge(org.sireum.awas.flow.FlowEdge) FlowNode(org.sireum.awas.flow.FlowNode) List(java.util.List) Util(org.sireum.aadl.osate.util.Util) Resource(org.eclipse.emf.ecore.resource.Resource) ConsoleTagReporter(org.sireum.util.ConsoleTagReporter) AwasGraph(org.sireum.awas.awasfacade.AwasGraph) InstanceObject(org.osate.aadl2.instance.InstanceObject) AwasGraph(org.sireum.awas.awasfacade.AwasGraph) ArrayList(java.util.ArrayList) URISyntaxException(java.net.URISyntaxException) ConsoleTagReporter(org.sireum.util.ConsoleTagReporter) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) InstanceObject(org.osate.aadl2.instance.InstanceObject) AwasGraphImpl(org.sireum.awas.awasfacade.AwasGraphImpl) Shell(org.eclipse.swt.widgets.Shell) AgeEditor(org.osate.ge.gef.ui.editor.AgeEditor) SystemInstance(org.osate.aadl2.instance.SystemInstance) Aadl(org.sireum.hamr.ir.Aadl) Collector(org.sireum.awas.awasfacade.Collector) ArrayList(java.util.ArrayList) List(java.util.List) FlowEdge(org.sireum.awas.flow.FlowEdge) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) MessageConsole(org.eclipse.ui.console.MessageConsole) Resource(org.eclipse.emf.ecore.resource.Resource) SymbolTable(org.sireum.awas.symbol.SymbolTable) IOException(java.io.IOException) URISyntaxException(java.net.URISyntaxException) IOException(java.io.IOException) ExecutionException(org.eclipse.core.commands.ExecutionException) Model(org.sireum.awas.ast.Model) InstanceObject(org.osate.aadl2.instance.InstanceObject) DiagramService(org.osate.ge.internal.services.DiagramService) FlowNode(org.sireum.awas.flow.FlowNode)

Example 2 with AwasGraphImpl

use of org.sireum.awas.awasfacade.AwasGraphImpl in project osate-plugin by sireum.

the class ReachForwardHandler method execute.

@SuppressWarnings("restriction")
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    final Boolean isImplDiagram = false;
    IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
    List<DiagramElement> des = SelectionUtil.getSelectedDiagramElements(SelectionHelper.getDiagramSelection(), // getSelectedDiagramElem(event)
    true);
    List<InstanceObject> ios = des.stream().flatMap(de -> {
        Object bo = de.getBusinessObject();
        List<InstanceObject> io = new ArrayList();
        if (bo != null && bo instanceof InstanceObject) {
            io.add(((InstanceObject) bo));
        }
        return io.stream();
    }).collect(Collectors.toList());
    List<String> criterions = ios.stream().map(io -> io.getInstanceObjectPath()).collect(Collectors.toList());
    if (!ios.isEmpty()) {
        MessageConsole console = displayConsole("Awas Console");
        try {
            Aadl model = Util.getAir(ios.get(0).getSystemInstance(), true, console);
            Model awasModel = org.sireum.awas.slang.Aadl2Awas$.MODULE$.apply(model);
            SymbolTable st = org.sireum.awas.symbol.SymbolTable$.MODULE$.apply(awasModel, new ConsoleTagReporter());
            FlowGraph<FlowNode, FlowEdge<FlowNode>> graph = org.sireum.awas.flow.FlowGraph$.MODULE$.apply(awasModel, st, false);
            AwasGraph awasgraph = new AwasGraphImpl(graph, st);
            String query = "t = reach forward " + "{" + String.join(",", criterions) + "}";
            Map<String, Collector> qres = awasgraph.queryEvaluator(query);
            if (qres.isEmpty()) {
                MessageDialog.openError(window.getShell(), "Sireum", "Empty result");
            } else {
                final DiagramService diagramService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(DiagramService.class);
                SystemInstance si = ios.get(0).getSystemInstance();
                Resource resource = si.eResource();
                ComponentImplementation cii = InstanceUtil.getComponentImplementation(si, 0, null);
                // cii.eResource().getResourceSet().get
                List<Collector> lc = new ArrayList<Collector>(qres.values());
                Set<AgeEditor> ads = AwasUtil.awasGraphUri2AgeDiagramEditor(lc.get(0).getGraph(), isImplDiagram, st, resource, diagramService);
                AwasUtil.highlightDiagrams(ads, lc.get(0), isImplDiagram, st, resource);
            }
        } catch (URISyntaxException e1) {
            // // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (Exception e3) {
            e3.printStackTrace();
            String m2 = "Could not invoke visualizer.  Please make sure Awas is configured correctly.\n\n" + e3.getLocalizedMessage();
            MessageDialog.openError(window.getShell(), "Sireum", m2);
        }
    } else {
        String m3 = "Please select a component or port from the instance diagram";
        MessageDialog.openError(window.getShell(), "Sireum", m3);
    }
    return null;
}
Also used : ExecutionEvent(org.eclipse.core.commands.ExecutionEvent) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) Element(org.osate.aadl2.Element) AbstractSireumHandler(org.sireum.aadl.osate.handlers.AbstractSireumHandler) URISyntaxException(java.net.URISyntaxException) AwasGraphImpl(org.sireum.awas.awasfacade.AwasGraphImpl) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) ComponentImplementation(org.osate.aadl2.ComponentImplementation) ArrayList(java.util.ArrayList) HandlerUtil(org.eclipse.ui.handlers.HandlerUtil) AgeEditor(org.osate.ge.gef.ui.editor.AgeEditor) IStatus(org.eclipse.core.runtime.IStatus) SelectionHelper(org.sireum.aadl.osate.util.SelectionHelper) Map(java.util.Map) Collector(org.sireum.awas.awasfacade.Collector) FlowGraph(org.sireum.awas.flow.FlowGraph) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) AwasUtil(org.sireum.aadl.osate.awas.util.AwasUtil) InstanceUtil(org.osate.aadl2.instance.util.InstanceUtil) SystemInstance(org.osate.aadl2.instance.SystemInstance) Shell(org.eclipse.swt.widgets.Shell) PlatformUI(org.eclipse.ui.PlatformUI) DiagramService(org.osate.ge.internal.services.DiagramService) Aadl(org.sireum.hamr.ir.Aadl) SelectionUtil(org.osate.ge.internal.ui.util.SelectionUtil) SymbolTable(org.sireum.awas.symbol.SymbolTable) Set(java.util.Set) IOException(java.io.IOException) ExecutionException(org.eclipse.core.commands.ExecutionException) MessageConsole(org.eclipse.ui.console.MessageConsole) Model(org.sireum.awas.ast.Model) Collectors(java.util.stream.Collectors) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) FlowEdge(org.sireum.awas.flow.FlowEdge) FlowNode(org.sireum.awas.flow.FlowNode) List(java.util.List) Util(org.sireum.aadl.osate.util.Util) Resource(org.eclipse.emf.ecore.resource.Resource) ConsoleTagReporter(org.sireum.util.ConsoleTagReporter) AwasGraph(org.sireum.awas.awasfacade.AwasGraph) InstanceObject(org.osate.aadl2.instance.InstanceObject) ComponentImplementation(org.osate.aadl2.ComponentImplementation) AwasGraph(org.sireum.awas.awasfacade.AwasGraph) ArrayList(java.util.ArrayList) URISyntaxException(java.net.URISyntaxException) ConsoleTagReporter(org.sireum.util.ConsoleTagReporter) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) InstanceObject(org.osate.aadl2.instance.InstanceObject) AwasGraphImpl(org.sireum.awas.awasfacade.AwasGraphImpl) Shell(org.eclipse.swt.widgets.Shell) AgeEditor(org.osate.ge.gef.ui.editor.AgeEditor) SystemInstance(org.osate.aadl2.instance.SystemInstance) Aadl(org.sireum.hamr.ir.Aadl) Collector(org.sireum.awas.awasfacade.Collector) ArrayList(java.util.ArrayList) List(java.util.List) FlowEdge(org.sireum.awas.flow.FlowEdge) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) MessageConsole(org.eclipse.ui.console.MessageConsole) Resource(org.eclipse.emf.ecore.resource.Resource) SymbolTable(org.sireum.awas.symbol.SymbolTable) IOException(java.io.IOException) URISyntaxException(java.net.URISyntaxException) IOException(java.io.IOException) ExecutionException(org.eclipse.core.commands.ExecutionException) Model(org.sireum.awas.ast.Model) InstanceObject(org.osate.aadl2.instance.InstanceObject) DiagramService(org.osate.ge.internal.services.DiagramService) FlowNode(org.sireum.awas.flow.FlowNode)

Aggregations

IOException (java.io.IOException)2 URISyntaxException (java.net.URISyntaxException)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 Map (java.util.Map)2 Set (java.util.Set)2 Collectors (java.util.stream.Collectors)2 ExecutionEvent (org.eclipse.core.commands.ExecutionEvent)2 ExecutionException (org.eclipse.core.commands.ExecutionException)2 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)2 IStatus (org.eclipse.core.runtime.IStatus)2 Resource (org.eclipse.emf.ecore.resource.Resource)2 MessageDialog (org.eclipse.jface.dialogs.MessageDialog)2 Shell (org.eclipse.swt.widgets.Shell)2 IWorkbenchWindow (org.eclipse.ui.IWorkbenchWindow)2 PlatformUI (org.eclipse.ui.PlatformUI)2 MessageConsole (org.eclipse.ui.console.MessageConsole)2 HandlerUtil (org.eclipse.ui.handlers.HandlerUtil)2 Element (org.osate.aadl2.Element)2 InstanceObject (org.osate.aadl2.instance.InstanceObject)2