@Override
 public Schema getSchema() {
   SchemaFactory sm = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
   try {
     File sFx = StreamUtil.copyStreamToTempFile(getSchemaInputStream());
     Schema schema = sm.newSchema(sFx);
     return schema;
   } catch (Exception e) {
     NeptusLog.pub().warn(ReflectionUtil.getCallerStamp() + e.getMessage());
   }
   return null;
 }
  /* (non-Javadoc)
   * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

    if (req.getPathInfo().equals("/location")) {
      resp.setContentType("application/neptus+xml");
      PrintWriter page = resp.getWriter();
      LocationType start = MyState.getLocation();
      page.write(start.asXML(ImcMsgManager.getManager().getLocalId() + " Location"));
      page.close();
      return;
    } else if (req.getPathInfo().equals("/console") || req.getPathInfo().equals("/console.png")) {
      if (System.currentTimeMillis() - consoleLastRTime > 10000) {
        File logImages = new File("log/images");
        File[] fileList =
            logImages.listFiles(
                new FileFilter() {
                  @Override
                  public boolean accept(File pathname) {
                    if (pathname.isFile()
                        && "png".equalsIgnoreCase(FileUtil.getFileExtension(pathname))) return true;
                    else return false;
                  }
                });
        Vector<File> fileVec = new Vector<File>();
        for (File f : fileList) {
          fileVec.add(f);
        }
        Collections.sort(fileVec);
        if (fileVec.size() > 0) console = fileVec.lastElement();
        else console = null;
        consoleLastRTime = System.currentTimeMillis();
      }

      if (req.getPathInfo().equals("/console.png")) {
        if (console != null && console.exists() && allowConsoleExposure) {
          resp.setContentType("image/png");
          FileInputStream fxStream = new FileInputStream(console);
          StreamUtil.copyStreamToStream(fxStream, resp.getOutputStream());
          fxStream.close();
        }
        resp.getOutputStream().close();
      } else {
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("<html><head><meta http-equiv='refresh' content='30'></head><body>");
        if (console != null && console.exists() && allowConsoleExposure)
          resp.getWriter()
              .write(
                  "<img src=\"/localstate/console.png\" alt=\""
                      + console.getName()
                      + "\" "
                      + "id=\""
                      + console.getName()
                      + " border=\"0\">");
        else resp.getWriter().write("No consoles active.");
        resp.getWriter().write("</body></html>");
        resp.getWriter().close();
        // <img src="guides.ign.com4_files/header220001101.gif" alt="IGNguides.com" usemap="#HEADER"
        // width="590" border="0" height="90">
      }
    } else if (req.getPathInfo().equals("/")) {
      resp.setContentType("text/html;charset=UTF-8");
      if (!ImcMsgManager.getManager().isRunning()) {
        resp.getWriter()
            .write(
                "<html><head><meta http-equiv='refresh' content='30'>"
                    + "<body>Comms are not running.</body></html>");
        resp.getWriter().close();
        return;
      }

      ImcId16 idImc = ImcMsgManager.getManager().getLocalId();

      String ret = "<html>";

      ret += "<h2>Location</h2><blockquote>";
      LocationType home = MyState.getLocation();
      String homeLoc = home.getLatitudeAsPrettyString() + ", " + home.getLongitudeAsPrettyString();
      // ret += homeLoc+"<br/>";
      ret += "<a href='/localstate/location'>" + homeLoc + "</a><br/>";
      ret += "</blockquote><br>";

      ret += "<h2>State</h2>";
      ret += "<b>ID:</b> " + idImc + "<br>";
      ret +=
          "<b>Services:</b> "
              + ImcMsgManager.getManager().getAllServicesString().replaceAll(";", ";<br>")
              + "<br><br>";

      ret += "<b>Comms info:</b><br>" + ImcMsgManager.getManager().getCommStatusAsHtmlFragment();

      if (System.currentTimeMillis() - ImcMsgManager.getManager().getAnnounceLastArriveTime()
          > DateTimeUtil.MINUTE * 5) {
        ret += "<b color='red'>Announce not arriving for some time</b><br>";
      }

      ret += "</html>";

      resp.getWriter().write(ret);
      resp.getWriter().close();
    }
  }