package com.neosociety.map; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.UnavailableException; import javax.servlet.http.*; import org.apache.log4j.Logger; import com.bbn.openmap.Environment; import com.bbn.openmap.Layer; import com.bbn.openmap.image.*; import com.bbn.openmap.layer.GraticuleLayer; import com.bbn.openmap.layer.DateLayer; import com.bbn.openmap.layer.daynight.DayNightLayer; import com.bbn.openmap.layer.etopo.ETOPOLayer; import com.bbn.openmap.layer.shape.ShapeLayer; import com.bbn.openmap.plugin.PlugIn; import com.bbn.openmap.plugin.PlugInLayer; import com.bbn.openmap.proj.Mercator; import com.bbn.openmap.proj.Proj; import com.bbn.openmap.proj.Projection; import com.bbn.openmap.proj.ProjectionFactory; import com.bbn.openmap.util.ComponentFactory; import com.bbn.openmap.util.PropUtils; public class MapServlet extends HttpServlet { Logger logger = Logger.getLogger(MapServlet.class); Layer dateLayer; Layer[] layers; AcmeJPEGFormatter formatter = new AcmeJPEGFormatter(); Properties configProperties; Projection defaultProjection; public void createLayers(Properties p) { dateLayer = makeLayer("com.bbn.openmap.layer.DateLayer", "date", p); logger.debug("DateLayer isa " + dateLayer.toString()); layers = new Layer[] { dateLayer }; } public Layer makeLayer(String className, String layerName, Properties p) { Object obj = ComponentFactory.create(className, layerName, p); if (obj instanceof Layer || obj instanceof PlugIn) { Layer l = null; if (obj instanceof PlugIn) { PlugIn pi = (PlugIn) obj; PlugInLayer pil = new PlugInLayer(); pil.setPlugIn(pi); pil.setName(p.getProperty(PropUtils.getScopedPropertyPrefix(pi) + Layer.PrettyNameProperty)); l = pil; } else { l = (Layer) obj; } return l; } return null; } public void init(ServletConfig conf) throws ServletException { super.init(conf); String basePath = getServletContext().getRealPath("/"); String propFile = basePath + conf.getInitParameter("openmap.properties"); logger.debug("Requesting data from properties file: " + propFile); try { File f = new File(propFile); logger.debug("File f = " + f); logger.debug("exists=" + f.exists()); logger.debug("readable=" + f.canRead()); logger.debug("writeable=" + f.canWrite()); FileInputStream fis = new FileInputStream(f); logger.debug("FileInputStream fis = " + fis); configProperties = new Properties(); configProperties.load(fis); createLayers(configProperties); } catch (FileNotFoundException e) { logger.error(e); throw new UnavailableException(e.getLocalizedMessage()); } catch (IOException e) { logger.error(e); throw new UnavailableException(e.getLocalizedMessage()); } defaultProjection = initProjection(configProperties); } /** * @param properties * @return a Projection */ private Projection initProjection(Properties properties) { String projectionName = Environment.get(Environment.Projection, Mercator.MercatorName); projectionName = properties.getProperty("projection", projectionName); int projectionType = ProjectionFactory.getProjType(projectionName); return ProjectionFactory.makeProjection( projectionType, 0f, 0f, Float.POSITIVE_INFINITY, 640, 480); /* Environment.getFloat(); Environment.getFloat(); Environment.getFloat(); ); */ } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("image/jpeg"); Properties requestProperties = new Properties(configProperties); // Add any request-specific properties here. byte[] image = null; Proj projection = ImageServerUtils.createOMProjection(requestProperties, defaultProjection); //ImageServer imageServer = new ImageServer(layers, formatter); ImageServer imageServer = new ImageServer(requestProperties); image = imageServer.createImage(projection); response.setContentLength(image.length); response.getOutputStream().write(image); } }