Package de.iritgo.aktera.struts

Source Code of de.iritgo.aktera.struts.BeanResponse

/**
* This file is part of the Iritgo/Aktera Framework.
*
* Copyright (C) 2005-2011 Iritgo Technologies.
* Copyright (C) 2003-2005 BueroByte GbR.
*
* Iritgo licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package de.iritgo.aktera.struts;


import de.iritgo.aktera.core.exception.NestedException;
import de.iritgo.aktera.model.Command;
import de.iritgo.aktera.model.DefaultCommand;
import de.iritgo.aktera.model.DefaultInput;
import de.iritgo.aktera.model.DefaultOutput;
import de.iritgo.aktera.model.Input;
import de.iritgo.aktera.model.ModelException;
import de.iritgo.aktera.model.Output;
import de.iritgo.aktera.model.ResponseElement;
import de.iritgo.aktera.ui.UIResponse;
import de.iritgo.simplelife.string.StringTools;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;


public class BeanResponse implements UIResponse
{
  /** The controller forward */
  private String forward;

  /** Response elements */
  private Map<String, ResponseElement> elements = new LinkedHashMap();

  private Map errors = new LinkedHashMap();

  private Map errorTypes = new LinkedHashMap();

  private Map throwables = new LinkedHashMap();

  private transient short errorDupCount = 1;

  /**
   * @see de.iritgo.aktera.ui.UIResponse#setForward(java.lang.String)
   */
  public void setForward(String forward)
  {
    this.forward = forward;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#getForward()
   */
  public String getForward()
  {
    return forward;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#get(java.lang.String)
   */
  public ResponseElement get(String name)
  {
    return elements.get(name);
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#remove(java.lang.String)
   */
  public void remove(String name)
  {
    synchronized (elements)
    {
      elements.remove(name);
    }
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#remove(de.iritgo.aktera.model.ResponseElement)
   */
  public void remove(ResponseElement element)
  {
    remove(element.getName());
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#getAll()
   */
  public Iterator<ResponseElement> getAll()
  {
    return elements.values().iterator();
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#getElements()
   */
  public Map<String, ResponseElement> getElements()
  {
    return elements;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#add(de.iritgo.aktera.model.ResponseElement)
   */
  public void add(ResponseElement element)
  {
    assert element != null;
    assert StringTools.isNotTrimEmpty(element.getName());

    synchronized (elements)
    {
      elements.put(element.getName(), element);
    }
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#createOutput(java.lang.String)
   */
  public Output createOutput(String name)
  {
    assert StringTools.isNotTrimEmpty(name);

    Output output = new DefaultOutput();

    output.setName(name);

    return output;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#createOutput(java.lang.String,
   *      java.lang.String)
   */
  public Output createOutput(String name, String content)
  {
    Output output = createOutput(name);

    output.setContent(content);

    return output;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#createInput(java.lang.String)
   */
  public Input createInput(String name)
  {
    assert StringTools.isNotTrimEmpty(name);

    Input input = new DefaultInput();

    input.setName(name);

    return input;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#createCommand(java.lang.String,
   *      java.lang.String)
   */
  public Command createCommand(String name, String bean)
  {
    assert StringTools.isNotTrimEmpty(name);
    Command command = new DefaultCommand();
    command.setName(name);
    command.setBean(bean);
    command.setLabel(name);
    return command;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#createCommand(java.lang.String,
   *      java.lang.String, java.lang.String)
   */
  public Command createCommand(String name, String bean, String label)
  {
    assert StringTools.isNotTrimEmpty(name);

    Command command = new DefaultCommand();

    command.setName(name);
    command.setBean(bean);
    command.setLabel(label);

    return command;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addOutput(java.lang.String)
   */
  public Output addOutput(String name)
  {
    Output newOutput = createOutput(name);

    add(newOutput);

    return newOutput;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addOutput(java.lang.String,
   *      java.lang.String)
   */
  public Output addOutput(String name, String content)
  {
    Output newOutput = addOutput(name);

    newOutput.setContent(content);

    return newOutput;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addInput(java.lang.String)
   */
  public Input addInput(String name)
  {
    return addInput(name, name);
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addInput(java.lang.String,
   *      java.lang.String)
   */
  public Input addInput(String name, String label)
  {
    Input newInput = createInput(name);
    assert label != null;
    newInput.setLabel(label);
    add(newInput);

    return newInput;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addCommand(java.lang.String,
   *      java.lang.String)
   */
  public Command addCommand(String name, String bean)
  {
    return addCommand(name, bean, name);
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addCommand(java.lang.String,
   *      java.lang.String)
   */
  public Command addCommand(String name, String bean, String label)
  {
    Command command = createCommand(name, bean);

    command.setLabel(label);
    add(command);

    return command;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addCommandWithModel(java.lang.String,
   *      java.lang.String)
   */
  public Command addCommandWithModel(String name, String model)
  {
    Command command = createCommand(name, null);

    command.setLabel(name);
    command.setModel(model);
    add(command);

    return command;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addError(java.lang.String, java.lang.String)
   */
  public void addError(String errorName, String errorMessage)
  {
    assert errorName != null;

    ModelException ne = new ModelException("Application Error");

    ne.fillInStackTrace();

    Throwable existing = (Throwable) throwables.get(errorName);

    if ((existing != null) && (! existing.equals(ne)))
    {
      synchronized (throwables)
      {
        throwables.put(errorName, ne);
      }
    }

    addError(errorName, errorMessage, ne);
  }

  private String uniqueErrorName(String errorName)
  {
    String errorNameToUse = errorName;

    if (errors.containsKey(errorName))
    {
      errorNameToUse = errorNameToUse + errorDupCount;
      errorDupCount++;
    }

    return errorNameToUse;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addError(java.lang.String,
   *      java.lang.String, java.lang.Throwable)
   */
  public void addError(String errorName, String errorMessage, Throwable t)
  {
    String errorNameToUse = uniqueErrorName(errorName);

    if ((errorMessage == null) || errorMessage.equals(""))
    {
      errorMessage = "No Message Supplied";
    }

    String existing = (String) errors.get(errorNameToUse);

    if ((existing == null) || (existing.equals(errorMessage)))
    {
      synchronized (errors)
      {
        errors.put(errorNameToUse, errorMessage);
      }
    }

    if (t != null)
    {
      Throwable existingThrowable = (Throwable) throwables.get(errorNameToUse);

      if ((existingThrowable == null) || (! existingThrowable.equals(t)))
      {
        synchronized (throwables)
        {
          throwables.put(errorNameToUse, t);
        }
      }

      String errorType = t.getClass().getName();

      if (t instanceof NestedException)
      {
        errorType = ((NestedException) t).getNestedExceptionType();
      }

      synchronized (errorTypes)
      {
        errorTypes.put(errorNameToUse, errorType);
      }
    }
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addError(java.lang.String,
   *      java.lang.Throwable)
   */
  public void addError(String errorName, Throwable t)
  {
    addError(errorName, t.getMessage(), t);
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#addErrors(java.util.Map)
   */
  public void addErrors(Map newErrors)
  {
    if (newErrors == null)
    {
      return;
    }

    String oneKey = null;
    Object o = null;

    for (Iterator i = newErrors.keySet().iterator(); i.hasNext();)
    {
      oneKey = (String) i.next();
      o = newErrors.get(oneKey);

      if (o instanceof Throwable)
      {
        Throwable t = (Throwable) o;

        addError(oneKey, t.getMessage(), t);
      }
      else if (o instanceof String)
      {
        addError(oneKey, (String) o);
      }
    }
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#clearErrors()
   */
  public void clearErrors()
  {
    synchronized (errors)
    {
      errors.clear();
    }
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#getErrors()
   */
  public Map<String, String> getErrors()
  {
    return errors;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#getThrowable(java.lang.String)
   */
  public Throwable getThrowable(String oneKey)
  {
    assert oneKey != null;

    return (Throwable) throwables.get(oneKey);
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#getStackTrace(java.lang.String)
   */
  public String getStackTrace(String errorName)
  {
    assert errorName != null;

    Throwable throwable = getThrowable(errorName);

    if (throwable != null)
    {
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);

      throwable.printStackTrace(pw);

      return sw.toString();
    }

    return null;
  }

  /**
   * @see de.iritgo.aktera.ui.UIResponse#getErrorType(java.lang.String)
   */
  public String getErrorType(String errorName)
  {
    return (String) errorTypes.get(errorName);
  }
}
TOP

Related Classes of de.iritgo.aktera.struts.BeanResponse

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.