Package pl.net.bluesoft.rnd.processtool.plugins

Source Code of pl.net.bluesoft.rnd.processtool.plugins.StepExposureServlet

package pl.net.bluesoft.rnd.processtool.plugins;

import com.thoughtworks.xstream.XStream;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig.Feature;
import pl.net.bluesoft.rnd.processtool.steps.ProcessToolProcessStep;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AutoWiredProperty;
import pl.net.bluesoft.util.lang.Classes;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.util.*;
import java.util.logging.Logger;

public class StepExposureServlet extends HttpServlet {
  public enum Format {
    JSON, XML
  }

  private static final String      NAME      = "name";
  private static final String      TYPE      = "type";
  private static final String      PARAMETERS    = "parameters";
  private static final String      REQUIRED    = "required";
  private static Logger        logger      = Logger.getLogger(StepExposureServlet.class.getName());
  private static final ObjectMapper  mapper      = new ObjectMapper();
  private static final XStream    xstream      = new XStream();
  private static final Format      DEFAULT_FORMAT  = Format.JSON;

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ProcessToolRegistry reg = (ProcessToolRegistry) getServletContext().getAttribute(ProcessToolRegistry.class.getName());
    resp.setContentType("text/plain");

    List<Map<String, Object>> steps = new LinkedList<Map<String, Object>>();

        Map<String,ProcessToolProcessStep> availableSteps = reg.getAvailableSteps();
        Set<Class> classes = new HashSet<Class>();
               
        for (ProcessToolProcessStep stepInstance : availableSteps.values()) {
            Class stepClass = stepInstance.getClass();
            classes.add(stepClass);
        }

        for (Class stepClass : classes) {
            Map<String, Object> map = new HashMap<String, Object>();
            AliasName a = Classes.getClassAnnotation(stepClass, AliasName.class);
            map.put(NAME, a.name());
            List<Field> fields = Classes.getFieldsWithAnnotation(stepClass, AutoWiredProperty.class);
            List<Map<String, Object>> parameters = new ArrayList<Map<String, Object>>();
            if (fields != null) {
                for (Field field : fields) {
                    Map<String, Object> parameter = new HashMap<String, Object>();
                    parameter.put(NAME, field.getName());
                    parameter.put(TYPE, field.getType());
                    AutoWiredProperty awp = field.getAnnotation(AutoWiredProperty.class);
                    parameter.put(REQUIRED, awp != null && awp.required());
                    parameters.add(parameter);
                }
            }
            map.put(PARAMETERS, parameters);
            steps.add(map);
        }

    PrintWriter out = resp.getWriter();
    String formatString = req.getParameter("format");
    Format format;
    if (formatString == null) {
      format = DEFAULT_FORMAT;
    } else {
      format = Format.valueOf(formatString.toUpperCase());
    }

    switch (format) {
      case XML: {
        out.write(xstream.toXML(steps));
        break;
      }
      case JSON: {
        mapper.configure(Feature.INDENT_OUTPUT, true);
        mapper.writeValue(out, steps);
        break;
      }
    }

    out.close();

    logger.info(this.getClass().getSimpleName() + " GET");
  }

  @Override
  public void init() throws ServletException {
    super.init();
    logger.info(this.getClass().getSimpleName() + " INITIALIZED: " + getServletContext().getContextPath());
  }

  @Override
  public void destroy() {
    super.destroy();
    logger.info(this.getClass().getSimpleName() + " DESTROYED");
  }
}
TOP

Related Classes of pl.net.bluesoft.rnd.processtool.plugins.StepExposureServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.