ViewParamsFixer.java :  » Web-Framework » RSF » uk » org » ponder » rsf » componentprocessor » Java Open Source

Java Open Source » Web Framework » RSF 
RSF » uk » org » ponder » rsf » componentprocessor » ViewParamsFixer.java
/*
 * Created on Oct 25, 2005
 */
package uk.org.ponder.rsf.componentprocessor;

import uk.org.ponder.conversion.StaticLeafParser;
import uk.org.ponder.htmlutil.HTMLUtil;
import uk.org.ponder.rsf.components.UIComponent;
import uk.org.ponder.rsf.components.UIInitBlock;
import uk.org.ponder.rsf.components.UIInternalLink;
import uk.org.ponder.rsf.components.UIOutput;
import uk.org.ponder.rsf.uitype.UITypes;
import uk.org.ponder.rsf.viewstate.AnyViewParameters;
import uk.org.ponder.rsf.viewstate.InternalURLRewriter;
import uk.org.ponder.rsf.viewstate.RawViewParameters;
import uk.org.ponder.rsf.viewstate.ViewParameters;
import uk.org.ponder.rsf.viewstate.ViewParamsInterceptor;
import uk.org.ponder.rsf.viewstate.ViewStateHandler;

public class ViewParamsFixer implements ComponentProcessor {
  private ViewStateHandler viewstatehandler;
  private InternalURLRewriter inturlrewriter;
  private ViewParamsInterceptor environmentalInterceptor;

  public void setEnvironmentalInterceptor(
      ViewParamsInterceptor environmentalInterceptor) {
    this.environmentalInterceptor = environmentalInterceptor;
  }

  public void setViewStateHandler(ViewStateHandler viewstatehandler) {
    this.viewstatehandler = viewstatehandler;
  }

  public void setInternalURLRewriter(InternalURLRewriter inturlrewriter) {
    this.inturlrewriter = inturlrewriter;
  }

  public void processComponent(UIComponent toprocesso) {
    if (toprocesso instanceof UIInternalLink) {
      UIInternalLink toprocess = (UIInternalLink) toprocesso;
      // any navigation link is assumed to interrupt flow session, so set
      // IUPS parameters to null.
      if (toprocess.target == null) {
        toprocess.target = new UIOutput();
      }
      if (toprocess.viewparams != null) {
        toprocess.target.setValue(viewstatehandler
            .getFullURL(toprocess.viewparams));
      }
      else {
        String target = toprocess.target.getValue();
        if (target == null || UITypes.isPlaceholder(target)) {
          throw new IllegalArgumentException("UIInternalLink with fullID "
              + toprocesso.getFullID()
              + " discovered with neither ViewParameters nor URL");
        }
        toprocess.target.setValue(inturlrewriter.rewriteRenderURL(target));
      }
    }
    else if (toprocesso instanceof UIInitBlock) {
      UIInitBlock toprocess = (UIInitBlock) toprocesso;
      String[] rendered = new String[toprocess.arguments.length];
      for (int i = 0; i < toprocess.arguments.length; ++i) {
        rendered[i] = convertInitArgument(toprocess.arguments[i]);
      }
      toprocess.markup = HTMLUtil.emitJavascriptCall(toprocess.functionname,
          rendered);
    }
  }

  private String convertInitArgument(Object object) {
    // TODO: upgrade this to an implementation capable of rendering JSON
    StaticLeafParser parser = StaticLeafParser.instance();
    if (parser.isLeafType(object.getClass())) {
      return parser.render(object);
    }
    if (object instanceof UIComponent) {
      return ((UIComponent) object).getFullID();
    }
    if (object instanceof AnyViewParameters) {
      AnyViewParameters viewparams = (AnyViewParameters) object;
      if (object instanceof ViewParameters) {
        AnyViewParameters intercepted = environmentalInterceptor
            .adjustViewParameters((ViewParameters) viewparams);
        if (intercepted != null) {
          viewparams = intercepted;
        }
      }
      if (viewparams instanceof ViewParameters) {
        return viewstatehandler.getFullURL((ViewParameters) viewparams);
      }
      object = viewparams;
    }
    if (object instanceof RawViewParameters) {
      return ((RawViewParameters) object).URL;
    }
    throw new IllegalArgumentException(
        "Cannot render init block argument of unrecognised "
            + object.getClass());
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.