POC finalized

This commit is contained in:
BoykoAlex
2019-08-26 18:58:56 -04:00
parent 7dfb35b335
commit c49a9f0c83
10 changed files with 21 additions and 359 deletions

View File

@@ -17,11 +17,11 @@ import org.eclipse.sprotty.SEdge;
import org.eclipse.sprotty.SGraph;
import org.eclipse.sprotty.SLabel;
import org.eclipse.sprotty.SModelElement;
import org.eclipse.sprotty.SModelRoot;
import org.eclipse.sprotty.SNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp;
import org.springframework.ide.vscode.commons.boot.app.cli.livebean.LiveBean;
@@ -37,6 +37,11 @@ import com.google.common.cache.CacheBuilder;
@Component
public class LiveBeansDiagramServerManager implements DiagramServerManager {
public static final SGraph EMPTY_GRAPH = new SGraph(((Consumer<SGraph>) (SGraph it) -> {
it.setType("NONE");
it.setId("EMPTY");
}));
private static final Logger log = LoggerFactory.getLogger(LiveBeansDiagramServerManager.class);
private Cache<String, IDiagramServer> servers = CacheBuilder.newBuilder().build();
@@ -47,9 +52,11 @@ public class LiveBeansDiagramServerManager implements DiagramServerManager {
@Autowired
private ILayoutEngine layoutEngine;
@Autowired
private ApplicationContext appContext;
private Consumer<ActionMessage> remoteEndpoint;
// @Override
private IDiagramServer getDiagramServer(String clientId) {
try {
return servers.get(clientId, () -> {
@@ -82,7 +89,7 @@ public class LiveBeansDiagramServerManager implements DiagramServerManager {
}
}
private SModelRoot generateModel(String clientId) {
private SGraph generateModel(String clientId) {
try {
Collection<SpringBootApp> apps = runningAppProvider.getAllRunningSpringApps();
if (!apps.isEmpty()) {
@@ -97,11 +104,11 @@ public class LiveBeansDiagramServerManager implements DiagramServerManager {
} catch (Exception e) {
log.error("{}", e);
}
return SGraph.EMPTY_ROOT;
return EMPTY_GRAPH;
}
private SModelRoot toSprottyGraph(SpringBootApp app) throws Exception {
SModelRoot graph = new SModelRoot();
private SGraph toSprottyGraph(SpringBootApp app) throws Exception {
SGraph graph = new SGraph();
graph.setId(app.getProcessName());
graph.setType("graph");

View File

@@ -1,94 +0,0 @@
package org.springframework.ide.vscode.boot.app.diagram;
import java.util.ArrayList;
import org.eclipse.sprotty.Dimension;
import org.eclipse.sprotty.IDiagramServer;
import org.eclipse.sprotty.Point;
import org.eclipse.sprotty.SCompartment;
import org.eclipse.sprotty.SEdge;
import org.eclipse.sprotty.SLabel;
import org.eclipse.sprotty.SModelRoot;
import org.eclipse.sprotty.SNode;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import net.bytebuddy.utility.RandomString;
//@Component
public class MockDiagramServerModel implements InitializingBean {
@Autowired
IDiagramServer diagramServer;
@Autowired
@Qualifier("taskScheduler")
private TaskScheduler taskScheduler;
@Override
public void afterPropertiesSet() throws Exception {
// taskScheduler.scheduleAtFixedRate(() -> diagramServer.setModel(generateModel()), Duration.ofSeconds(5));
diagramServer.setModel(generateModel(10));
}
public static SModelRoot generateModel(int nodesNum) {
SModelRoot graph = new SModelRoot();
graph.setId("graph");
graph.setType("graph");
SNode node0 = createBean("node0", "main", new Point(100, 100), new Dimension(120, 40));
graph.setChildren(new ArrayList<>());
graph.getChildren().add(node0);
for (int i = 1; i < nodesNum; i++) {
SNode node = createBean("node" + i, RandomString.make(((int) Math.round(Math.random()* 10 + 1))), new Point(Math.random() * 1024, Math.random() * 768), new Dimension(120, 40));
SEdge edge = createEdge("edge-" + i, node0.getId(), node.getId());
graph.getChildren().add(edge);
graph.getChildren().add(node);
}
return graph;
}
private static SNode createBean(String id, String labelText, Point location, Dimension size) {
SNode node = new SNode();
node.setId(id);
node.setType("node:bean");
node.setLayout("vbox");
node.setPosition(new Point(Math.random() * 1024, Math.random() * 768));
node.setSize(new Dimension(80, 80));
node.setChildren(new ArrayList<>());
SCompartment compartment = new SCompartment();
compartment.setId(id + "-comp");
compartment.setType("compartment");
compartment.setLayout("hbox");
compartment.setChildren(new ArrayList<>());
SLabel label = new SLabel();
label.setId(id + "-lanbel");
label.setType("node:label");
label.setText(labelText);
compartment.getChildren().add(label);
node.getChildren().add(compartment);
return node;
}
private static SEdge createEdge(String id, String sourceId, String targetId) {
SEdge edge = new SEdge();
edge.setId(id);
edge.setType("edge:straight");
edge.setSourceId(sourceId);
edge.setTargetId(targetId);
return edge;
}
}

View File

@@ -1,36 +0,0 @@
package org.springframework.ide.vscode.boot.app.diagram;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.sprotty.IDiagramServer;
import org.eclipse.sprotty.IPopupModelFactory;
import org.eclipse.sprotty.RequestPopupModelAction;
import org.eclipse.sprotty.SGraph;
import org.eclipse.sprotty.SLabel;
import org.eclipse.sprotty.SModelElement;
import org.eclipse.sprotty.SModelRoot;
import org.springframework.stereotype.Component;
@Component
public class PopupModelFactory implements IPopupModelFactory {
@Override
public SModelRoot createPopupModel(SModelElement element, RequestPopupModelAction request, IDiagramServer server) {
// SGraph graph = new SGraph();
// graph.setId("popup");
// List<SModelElement> children = new ArrayList<>();
//
// SLabel label = new SLabel();
// label.setType("node:label");
// label.setText("I'm a tooltip!");
// children.add(label);
//
// graph.setChildren(children);
//
// return graph;
return null;
}
}

View File

@@ -1,54 +0,0 @@
package org.springframework.ide.vscode.boot.test;
import static org.junit.Assert.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.elk.alg.layered.options.LayeredMetaDataProvider;
import org.eclipse.elk.core.RecursiveGraphLayoutEngine;
import org.eclipse.elk.core.data.LayoutMetaDataService;
import org.eclipse.elk.core.util.BasicProgressMonitor;
import org.eclipse.elk.graph.ElkNode;
import org.eclipse.sprotty.Point;
import org.eclipse.sprotty.SModelRoot;
import org.junit.Test;
import org.springframework.ide.vscode.boot.app.diagram.MockDiagramServerModel;
import org.springframework.ide.vscode.commons.sprotty.elk.ElkUtils;
public class LayoutTest {
@Test
public void testCreateGraph() throws Exception {
SModelRoot modelRoot = MockDiagramServerModel.generateModel(10);
ElkNode graph = new ElkUtils(modelRoot).graph;
assertNotNull(graph);
assertEquals(10, graph.getChildren().size());
assertEquals(9, graph.getContainedEdges().size());
}
@Test
public void testLayout() throws Exception {
LayoutMetaDataService.getInstance().registerLayoutMetaDataProviders(new LayeredMetaDataProvider());
SModelRoot modelRoot = MockDiagramServerModel.generateModel(10);
ElkNode graph = new ElkUtils(modelRoot).graph;
Map<String, Point> locations = new HashMap<>();
for (ElkNode child : graph.getChildren()) {
locations.put(child.getIdentifier(), new Point(child.getX(), child.getY()));
}
new RecursiveGraphLayoutEngine().layout(graph, new BasicProgressMonitor());
for (ElkNode child : graph.getChildren()) {
assertNotEquals(locations.get(child.getIdentifier()), new Point(child.getX(), child.getY()));
}
}
}