POC finalized
This commit is contained in:
@@ -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");
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user