Skip to content

Commit

Permalink
Initial code commit
Browse files Browse the repository at this point in the history
  • Loading branch information
slominskir committed Feb 7, 2017
1 parent c49a814 commit eff47f8
Show file tree
Hide file tree
Showing 37 changed files with 2,276 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
/build.xml
/nbproject/
/lib/nblibraries.properties
/build/
2 changes: 2 additions & 0 deletions src/conf/MANIFEST.MF
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Manifest-Version: 1.0

15 changes: 15 additions & 0 deletions src/java/logging.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

org.apache.juli.FileHandler.level = FINEST
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = epics2web.

java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

org.jlab.level = FINEST
78 changes: 78 additions & 0 deletions src/java/org/jlab/epics2web/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package org.jlab.epics2web;

import org.jlab.epics2web.websocket.WebSocketSessionManager;
import org.jlab.epics2web.epics.ChannelMonitorManager;
import org.jlab.epics2web.epics.ContextFactory;
import com.cosylab.epics.caj.CAJContext;
import gov.aps.jca.CAException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
* Main class that ties into application lifecycle; creates and destroys key resources.
*
* @author ryans
*/
@WebListener
public class Application implements ServletContextListener {

public static ChannelMonitorManager channelManager = null;
public static WebSocketSessionManager sessionManager = new WebSocketSessionManager();

private static final int EXECUTOR_POOL_SIZE = 2;
private static final Logger LOGGER = Logger.getLogger(Application.class.getName());
private static ScheduledExecutorService executor = null;
private static ContextFactory factory = null;
private static CAJContext context = null;

@Override
public void contextInitialized(ServletContextEvent sce) {
LOGGER.log(Level.INFO, ">>>>>>>>>>>>>>>>>>>>>>>>>> CONTEXT INITIALIZED");

factory = new ContextFactory();
try {
context = factory.getContext();
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Unable to obtain EPICS CA context", e);
}
executor = Executors.newScheduledThreadPool(EXECUTOR_POOL_SIZE);
channelManager = new ChannelMonitorManager(context, executor);
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
LOGGER.log(Level.INFO, ">>>>>>>>>>>>>>>>>>>>>>>>>> CONTEXT DESTROYED");

if (context != null && factory != null) {
try {
factory.returnContext(context);
} catch (CAException e) {
LOGGER.log(Level.WARNING, "Unable to return EPICS CA Context", e);
}
}

if(factory != null) {
factory.shutdown();
}

if (executor != null) {
executor.shutdown();

try {
if (!executor.awaitTermination(5, TimeUnit.SECONDS)) {
LOGGER.log(Level.WARNING, "Thread ExecutorService is not stopping...");
executor.shutdownNow();
}
} catch (InterruptedException e) {
LOGGER.log(Level.SEVERE, "Interrupted while waiting for threads to stop", e);
}
}
}

}
33 changes: 33 additions & 0 deletions src/java/org/jlab/epics2web/controller/Overview.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.jlab.epics2web.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Controller for the Overview page.
*
* @author ryans
*/
@WebServlet(name = "Overview", urlPatterns = {"/overview"})
public class Overview extends HttpServlet {

/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.getRequestDispatcher("/WEB-INF/views/overview.jsp").forward(request, response);
}
}
33 changes: 33 additions & 0 deletions src/java/org/jlab/epics2web/controller/Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.jlab.epics2web.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Controller for the Test page.
*
* @author ryans
*/
@WebServlet(name = "Test", urlPatterns = {"/test"})
public class Test extends HttpServlet {

/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.getRequestDispatcher("/WEB-INF/views/test.jsp").forward(request, response);
}
}
50 changes: 50 additions & 0 deletions src/java/org/jlab/epics2web/controller/WebConsole.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package org.jlab.epics2web.controller;

import java.io.IOException;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.websocket.Session;
import org.jlab.epics2web.Application;
import org.jlab.epics2web.websocket.WebSocketSessionManager;
import org.jlab.epics2web.epics.ChannelMonitor;
import org.jlab.epics2web.epics.ChannelMonitorManager;

/**
* Controller for the Console page.
*
* @author ryans
*/
@WebServlet(name = "WebConsole", urlPatterns = {"/console"})
public class WebConsole extends HttpServlet {

private final ChannelMonitorManager channelManager = Application.channelManager;
private final WebSocketSessionManager sessionManager = Application.sessionManager;

/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


Map<String, ChannelMonitor> monitorMap = channelManager.getMonitorMap();
Map<Session, Set<String>> clientMap = sessionManager.getClientMap();

request.setAttribute("monitorMap", monitorMap);
request.setAttribute("clientMap", clientMap);

request.getRequestDispatcher("/WEB-INF/views/console.jsp").forward(request, response);
}
}
Loading

0 comments on commit eff47f8

Please sign in to comment.