package com.sap.runlet.expressionpad.views;
import java.io.IOException;
import java.net.InetSocketAddress;
import behavioral.actions.Block;
import behavioral.actions.Statement;
import com.sap.runlet.abstractexpressionpad.views.ConsoleView;
import com.sap.runlet.expressionpad.RunletEvaluator;
import com.sap.runlet.interpreter.RunletInterpreter;
import com.sap.runlet.interpreter.RunletStackFrame;
import com.sun.net.httpserver.HttpServer;
import data.classes.Association;
import data.classes.AssociationEnd;
import data.classes.ClassTypeDefinition;
import data.classes.NamedValue;
import data.classes.NativeImpl;
import data.classes.SapClass;
import data.classes.SignatureImplementation;
import data.classes.TypeDefinition;
import dataaccess.expressions.Expression;
/**
* This sample class demonstrates how to plug-in a new workbench view. The view
* shows data obtained from the model. The sample creates a dummy model on the
* fly, but a real implementation would connect to the model available either in
* this or another plug-in (e.g. the workspace). The view is connected to the
* model using a content provider.
* <p>
* The view uses a label provider to define how model objects should be
* presented in the view. Each view can present the same model objects using
* different labels and icons, if needed. Alternatively, a single label provider
* can be shared between views in order to ensure that objects of the same type
* are presented in the same way everywhere.
* <p>
*/
public class RunletConsoleView
extends ConsoleView<Association, AssociationEnd, SapClass, TypeDefinition, ClassTypeDefinition,
Statement, Expression, SignatureImplementation, RunletStackFrame,
NativeImpl, RunletInterpreter, Block, NamedValue> {
/**^
* TODO: will be moved into its own
*/
private HttpServer runletHTTPServer;
/*
* The content provider class is responsible for providing objects to the
* view. It can wrap existing objects in adapters or simply return objects
* as-is. These objects may be sensitive to the current input of the view,
* or ignore it and always show the same content (like Task List, for
* example).
*/
/**
* The constructor.
*/
public RunletConsoleView() {
super(new RunletBlockService());
}
@Override
protected void createEvaluator() {
evaluator = new RunletEvaluator("ngpm.stdlib", //$NON-NLS-1$
com.sap.runlet.interpreter.Activator.getDefault().getRunletDataStore());
}
@Override
protected void shutdownHTTPServer() {
runletHTTPServer.stop(0);
runletHTTPServer = null;
}
@Override
protected void reloadHttp() {
RunletHTTPHandler handler = (RunletHTTPHandler) runletHTTPServer.getExecutor();
handler.loadHTTPBindings(evaluator.getInterpreter().getConnection());
output.append("HTTP binding reloaded."); //$NON-NLS-1$
}
@Override
protected void initializeHTTPServer() {
try {
runletHTTPServer = HttpServer.create(new InetSocketAddress(8123), 8123);
RunletHTTPHandler handler = new RunletHTTPHandler((RunletInterpreter) evaluator.getInterpreter());
runletHTTPServer.createContext("/", handler); //$NON-NLS-1$
runletHTTPServer.setExecutor(handler); // creates a default executor
runletHTTPServer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected String getLanguageName() {
return "Runlet";
}
}