Search in sources :

Example 1 with Collector

use of org.sireum.awas.awasfacade.Collector 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 Collector

use of org.sireum.awas.awasfacade.Collector 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)

Example 3 with Collector

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

the class AwasUtil method highlightDiagrams.

@SuppressWarnings("restriction")
public static void highlightDiagrams(Set<AgeEditor> ads, Collector qres, Boolean isImpleDiagram, SymbolTable st, Resource resource) {
    // AtomicBoolean isNode = new AtomicBoolean(true);
    Set<String> uris = new HashSet<String>();
    if (qres.getResultType().isPresent()) {
        if (qres.getResultType().get() == ResultType.Node()) {
            uris.addAll(qres.getNodes().stream().map(it -> it.getUri()).collect(Collectors.toSet()));
        } else {
            uris.addAll(qres.getPorts());
            uris.addAll(qres.getFlows());
            uris.addAll(qres.getNodes().stream().filter(it -> it.getResourceType() == NodeType.CONNECTION()).map(it -> it.getUri()).collect(Collectors.toSet()));
        // isNode.getAndSet(false);
        }
    } else if (!qres.getNodes().isEmpty()) {
        uris.addAll(qres.getNodes().stream().map(it -> it.getUri()).collect(Collectors.toSet()));
    }
    Set<InstanceObject> ios = awasUri2AadlInstObj(uris, st, resource);
    Set<URI> aadlUris = new HashSet<URI>();
    if (isImpleDiagram) {
        Set<Element> elems = instObjs2Elements(ios);
        aadlUris.addAll(elems.stream().map(it -> new EObjectURIWrapper(it).getUri()).collect(Collectors.toSet()));
    } else {
        aadlUris.addAll(ios.stream().map(it -> new EObjectURIWrapper(it).getUri()).collect(Collectors.toSet()));
    }
    Set<DiagramElement> des = new HashSet<DiagramElement>();
    ads.forEach(ad -> {
        // getDiagram()));
        des.addAll(getAllDiagramElements(ad.getDiagram()));
    });
    des.forEach(de -> {
        if (de.getBusinessObject() instanceof EObject && aadlUris.contains(new EObjectURIWrapper((EObject) de.getBusinessObject()).getUri())) {
            de.setStyle(StyleBuilder.create(de.getStyle()).backgroundColor(org.osate.ge.graphics.Color.ORANGE).outlineColor(org.osate.ge.graphics.Color.MAGENTA).build());
        }
    });
    ads.forEach(ad -> {
        ad.getActionExecutor().execute("highlight diagram", ExecutionMode.NORMAL, () -> {
            ad.updateNowIfModelHasChanged();
            ad.updateDiagram();
            ad.getGefDiagram().refreshDiagramStyles();
            ad.doSave(new NullProgressMonitor());
            return null;
        });
    });
}
Also used : ComponentInstance(org.osate.aadl2.instance.ComponentInstance) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) Element(org.osate.aadl2.Element) URI(org.eclipse.emf.common.util.URI) Node(org.sireum.awas.ast.Node) ComponentImplementation(org.osate.aadl2.ComponentImplementation) AgeGefRuntimeException(org.osate.ge.gef.AgeGefRuntimeException) ResultType(org.sireum.awas.collector.ResultType) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) AgeEditor(org.osate.ge.gef.ui.editor.AgeEditor) InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) Collector(org.sireum.awas.awasfacade.Collector) EObjectURIWrapper(org.osate.aadl2.modelsupport.EObjectURIWrapper) InstanceUtil(org.osate.aadl2.instance.util.InstanceUtil) SystemInstance(org.osate.aadl2.instance.SystemInstance) NodeType(org.sireum.awas.flow.NodeType) AadlUtil(org.osate.aadl2.modelsupport.util.AadlUtil) DiagramService(org.osate.ge.internal.services.DiagramService) SymbolTable(org.sireum.awas.symbol.SymbolTable) Set(java.util.Set) EObject(org.eclipse.emf.ecore.EObject) Option(scala.Option) Collectors(java.util.stream.Collectors) StyleBuilder(org.osate.ge.graphics.StyleBuilder) AgeDiagram(org.osate.ge.internal.diagram.runtime.AgeDiagram) DiagramReference(org.osate.ge.internal.services.DiagramService.DiagramReference) EditorUtil(org.osate.ge.internal.ui.util.EditorUtil) List(java.util.List) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) GraphicalEditor(org.osate.ge.GraphicalEditor) ExecutionMode(org.osate.ge.internal.services.ActionExecutor.ExecutionMode) Resource(org.eclipse.emf.ecore.resource.Resource) SymbolTableHelper(org.sireum.awas.symbol.SymbolTableHelper) InstanceObject(org.osate.aadl2.instance.InstanceObject) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) Element(org.osate.aadl2.Element) URI(org.eclipse.emf.common.util.URI) InstanceObject(org.osate.aadl2.instance.InstanceObject) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) EObjectURIWrapper(org.osate.aadl2.modelsupport.EObjectURIWrapper) EObject(org.eclipse.emf.ecore.EObject) HashSet(java.util.HashSet)

Aggregations

ArrayList (java.util.ArrayList)3 List (java.util.List)3 Set (java.util.Set)3 Collectors (java.util.stream.Collectors)3 Resource (org.eclipse.emf.ecore.resource.Resource)3 Element (org.osate.aadl2.Element)3 InstanceObject (org.osate.aadl2.instance.InstanceObject)3 SystemInstance (org.osate.aadl2.instance.SystemInstance)3 AgeEditor (org.osate.ge.gef.ui.editor.AgeEditor)3 DiagramElement (org.osate.ge.internal.diagram.runtime.DiagramElement)3 DiagramService (org.osate.ge.internal.services.DiagramService)3 Collector (org.sireum.awas.awasfacade.Collector)3 SymbolTable (org.sireum.awas.symbol.SymbolTable)3 IOException (java.io.IOException)2 URISyntaxException (java.net.URISyntaxException)2 Map (java.util.Map)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