Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,26 @@

import java.util.Scanner;

import org.dataflowanalysis.standalone.websocket.WebSocketServerUtils;
import org.dataflowanalysis.standalone.server.ApiServer;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;

public class Application implements IApplication {
@Override
public Object start(IApplicationContext context) throws Exception {
try {
Thread webSocketServer = WebSocketServerUtils.startWebSocketServer();
ApiServer.start();

Scanner scanner = new Scanner(System.in);
String input = "";

System.out.println("Type 'exit' to quit the program.");

// Loop until user types "exit"

while(webSocketServer.isAlive()) {
while (!input.equalsIgnoreCase("exit")) {
input = scanner.nextLine();
}
scanner.close();
return IApplication.EXIT_OK;
};
scanner.close();
while (!input.equalsIgnoreCase("exit")) {
input = scanner.nextLine();
}
scanner.close();
return IApplication.EXIT_OK;
} catch (Exception e) {
e.printStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package org.dataflowanalysis.standalone;

import org.dataflowanalysis.standalone.websocket.WebSocketServerUtils;

import org.dataflowanalysis.standalone.server.ApiServer;

public class Main {
public static void main(String[] args) {
try {
Thread webSocketServer = WebSocketServerUtils.startWebSocketServer();

while(webSocketServer.isAlive());

ApiServer.start();
} catch (Exception e) {
e.printStackTrace();
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.dataflowanalysis.standalone.api;

import org.dataflowanalysis.standalone.services.AnalyzeService;

import com.fasterxml.jackson.core.JsonProcessingException;

public class AnalyzeServlet extends Servlet {
private static final long serialVersionUID = 1L;
private final AnalyzeService analysisService = new AnalyzeService();

protected String doSpecific(String message, String name){
try {
return analysisService.analyzeAnnotate(message);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("Json unparsable");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.dataflowanalysis.standalone.api;

import org.dataflowanalysis.standalone.services.LoadDDService;

public class LoadDDServlet extends Servlet {

private static final long serialVersionUID = 1L;
private final LoadDDService loadDDService = new LoadDDService();

protected String doSpecific(String message, String name){
return loadDDService.safeLoadAndConvertDFDString(message, name);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.dataflowanalysis.standalone.api;

import org.dataflowanalysis.standalone.services.LoadPCMService;

public class LoadPCMServlet extends Servlet {

private static final long serialVersionUID = 1L;
private final LoadPCMService loadPCMService = new LoadPCMService();

protected String doSpecific(String message, String name){
return loadPCMService.safeLoadAndConvertPCMString(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.dataflowanalysis.standalone.api;

import org.dataflowanalysis.standalone.services.SaveDDService;


public class SaveDDServlet extends Servlet {

private static final long serialVersionUID = 1L;
private final SaveDDService saveDDService = new SaveDDService();

protected String doSpecific(String message, String name){
return saveDDService.convertToDFDandStringify(message, name);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.dataflowanalysis.standalone.api;

import java.io.IOException;
import java.util.stream.Collectors;

import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public abstract class Servlet extends HttpServlet{
private static final long serialVersionUID = 1L;

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
String message = request.getReader()
.lines()
.collect(Collectors.joining(System.lineSeparator()));

String name = message.split(":")[0];
message = message.replaceFirst(name + ":", "");

try {
var result = doSpecific(message, name);
writeText(response, HttpServletResponse.SC_OK, name + ":" + result);
} catch (IllegalArgumentException e) {
writeText(response, HttpServletResponse.SC_BAD_REQUEST, e.getMessage());

} catch (Exception e) {
writeText(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal server error");
}
}

private void writeText(HttpServletResponse response, int status, String message) throws IOException {
response.setStatus(status);
response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write(message);
}

/**
* Servlet specific activities
* @param message Incoming message content
* @param name Name of the diagram
* @return result
*/
protected abstract String doSpecific(String message, String name);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.dataflowanalysis.standalone.server;

import java.net.InetSocketAddress;

import org.dataflowanalysis.standalone.api.AnalyzeServlet;
import org.dataflowanalysis.standalone.api.LoadDDServlet;
import org.dataflowanalysis.standalone.api.LoadPCMServlet;
import org.dataflowanalysis.standalone.api.SaveDDServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;

public class ApiServer {
public static void start() throws Exception {
Server server = new Server(new InetSocketAddress("localhost", 3000));

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
context.setContextPath("/");

context.addServlet(AnalyzeServlet.class, "/api/analyze");
context.addServlet(LoadDDServlet.class, "/api/loadDD");
context.addServlet(LoadPCMServlet.class, "/api/loadPCM");
context.addServlet(SaveDDServlet.class, "/api/saveDD");

server.setHandler(context);
server.start();
server.join();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.dataflowanalysis.standalone.services;

import org.dataflowanalysis.converter.dfd2web.DFD2WebConverter;
import org.dataflowanalysis.converter.web2dfd.Web2DFDConverter;
import org.dataflowanalysis.converter.web2dfd.WebEditorConverterModel;

import com.fasterxml.jackson.core.JsonProcessingException;

public class AnalyzeService {
/**
* Analyzes a Model in WebEditor Json Representation and returns the analyzed Model
* @param webEditorDfd Model to be analyzed
* @return Analyzed Model
* @throws JsonProcessingException
*/
public String analyzeAnnotate(String diagramMessage) throws JsonProcessingException {
var webEditorDfd = Util.deserializeJson(diagramMessage);

var webEditorConverter = new Web2DFDConverter();
var dd = webEditorConverter.convert(new WebEditorConverterModel(webEditorDfd));
var dfdConverter = new DFD2WebConverter();
if (webEditorDfd.constraints() != null && !webEditorDfd.constraints().isEmpty()) {
var constraints = Util.parseConstraints(webEditorDfd);
dfdConverter.setConstraints(constraints);
}
var newJson = dfdConverter.convert(dd).getModel();

for (var child : newJson.model().children()) {
if (child.type().startsWith("node") && child.annotations() != null) {
var oldNode = webEditorDfd.model().children().stream().filter(node -> node.id().equals(child.id())).findAny().orElseThrow();
//Necessary if ugly if we want to preserver custom annotations
var annotationsToRemove = oldNode.annotations().stream().filter(a -> a.message().startsWith("Propagated") || a.message().startsWith("Incoming") || a.message().startsWith("Constraint")).toList();
oldNode.annotations().removeAll(annotationsToRemove);
oldNode.annotations().addAll(child.annotations());
}
}
return Util.serializeJson(webEditorDfd);
}
}
Loading
Loading