/******************************************************************************* * Copyright (c) 2009 Paul VanderLei, Simon Archer, Jeff McAffer and others. All * rights reserved. This program and the accompanying materials are made available * under the terms of the Eclipse Public License v1.0 and Eclipse Distribution License * v1.0 which accompanies this distribution. The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License * is available at http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Paul VanderLei, Simon Archer, Jeff McAffer - initial API and implementation *******************************************************************************/ package org.eclipse.examples.toast.devsim.fw; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SimulatedDevice { private static final String ACTION_PARAMETER = "action"; // $NON-NLS-1$ private static final String PARAMETER_PARAMETER = "parameter"; //$NON-NLS-1$ private static final String REFRESH_VALUES_ACTION = "refresh"; //$NON-NLS-1$ private static final String CONTENT_TYPE_PLAIN = "text/plain"; //$NON-NLS-1$ private static final String RUN_ACTION = "run"; //$NON-NLS-1$ private static final String RESET_ACTION = "reset"; //$NON-NLS-1$ private List parameters; private String label; private String name; private boolean evenOdd; private HtmlGenerator gen; public SimulatedDevice(String name, String label) { super(); parameters = new ArrayList(37); this.name = name; this.label = label; } public void generate(HttpServletRequest request, HttpServletResponse response, String id) throws IOException { String parameterName = request.getParameter(PARAMETER_PARAMETER); SimulatedParameter parameter = getParameterForName(parameterName); String action = request.getParameter(ACTION_PARAMETER); PrintWriter writer = response.getWriter(); if (parameter == null) { if (REFRESH_VALUES_ACTION.equals(action)) { response.setContentType(CONTENT_TYPE_PLAIN); generateRefreshValues(writer); return; } else if (RUN_ACTION.equals(action)) { runAll(); } else if (RESET_ACTION.equals(action)) { resetAll(); } } else { parameter.performAction(action); } generatePage(writer, id); } public void addParameter(SimulatedParameter parameter) { parameters.add(parameter); } public int getIntegerValue(String parameterName) { return ((IntegerSensor) getParameterForName(parameterName)).getValue(); } public boolean getBooleanValue(String parameterName) { return ((BooleanSensor) getParameterForName(parameterName)).getValue(); } public void setBooleanValue(String parameterName, boolean value) { ((BooleanActuator) getParameterForName(parameterName)).setValue(value); } public void setIntegerValue(String parameterName, int value) { ((IntegerActuator) getParameterForName(parameterName)).setValue(value); } public String getLabel() { return label; } // Private private SimulatedParameter getParameterForName(String parameterName) { for (Iterator iter = parameters.iterator(); iter.hasNext();) { SimulatedParameter parameter = (SimulatedParameter) iter.next(); if (parameter.getName().equals(parameterName)) return parameter; } return null; } private void generateRefreshValues(PrintWriter writer) { String prefix = "{ "; for (int i = 0; i < parameters.size(); i++) { SimulatedParameter parameter = (SimulatedParameter) parameters.get(i); if (parameter.generateRefreshValue(writer, prefix)) prefix = ", "; } writer.print(" }"); } private void generatePage(PrintWriter writer, String id) { gen = new HtmlGenerator(writer); gen.replace("id", id); gen.replace("deviceName", name); gen.replace("deviceLabel", label); gen.write("/templates/DevicePageTop.template", getClass()); generateParameters(); gen.write("/templates/DevicePageBottom.template", getClass()); } private void generateParameters() { resetEvenOdd(); for (int i = 0; i < parameters.size(); i++) { SimulatedParameter parameter = (SimulatedParameter) parameters.get(i); gen.replace("evenOdd", nextEvenOdd()); parameter.generate(gen); } } private void resetEvenOdd() { evenOdd = true; } private String nextEvenOdd() { evenOdd = !evenOdd; return evenOdd ? "even" : "odd"; } private void resetAll() { for (int i = 0; i < parameters.size(); i++) { SimulatedParameter parameter = (SimulatedParameter) parameters.get(i); parameter.resetToDefault(); } } private void runAll() { for (int i = 0; i < parameters.size(); i++) { SimulatedParameter parameter = (SimulatedParameter) parameters.get(i); parameter.run(); } } }