Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.google.sitebricks.rendering.control;
  
 
 import java.util.*;

Widget renders an XML-like tag

Author(s):
Dhanji R. Prasanna (dhanji@gmail.com)
 
 class XmlWidget implements Renderable {
   private final WidgetChain widgetChain;
   private final boolean selfClosed;
   private final String name;
   private final Map<StringList<Token>> attributes;
 
   // HACK Extremely ouch! Replace with Assisted inject.
   private static volatile Provider<Requestrequest;
 
   private static final Set<StringCONTEXTUAL_ATTRIBS;
 
   static {
     Set<Stringset = new HashSet<String>();
 
     set.add("href");
     set.add("action");
     set.add("src");
 
      = Collections.unmodifiableSet(set);
   }
 
 
   XmlWidget(WidgetChain widgetChainString nameEvaluatorCompiler compiler,
             @Attributes Map<StringStringattributesthrows ExpressionCompileException {
     this. = widgetChain;
     this. = name;
     this. = Collections.unmodifiableMap(compile(attributescompiler));
 
     //hacky. Script tags should not be self-closed due to IE insanity.
     this. =
         widgetChain instanceof TerminalWidgetChain && !"script".equalsIgnoreCase(name);
   }
 
   //compiles a map of name:value attrs into a map of name:token renderables
   static Map<StringList<Token>> compile(Map<StringStringattributes,
                                           EvaluatorCompiler compiler)
       throws ExpressionCompileException {
 
     Map<StringList<Token>> map = new LinkedHashMap<StringList<Token>>();
 
     for (Map.Entry<StringStringattribute : attributes.entrySet()) {
       map.put(attribute.getKey(), compiler.tokenizeAndCompile(attribute.getValue()));
     }
 
     return map;
   }
 
   public void render(Object boundRespond respond) {
     writeOpenTag(boundrespond);
 
     //write children
     if () {
       respond.write("/>");    //write self-closed tag
     } else {
       respond.write('>');
       .render(boundrespond);
 
       //close tag
       respond.write("</");
       respond.write();
       respond.write('>');
     }
   }
 
   static void writeOpenTag(Object boundRespond respondString name,
                            Map<StringList<Token>> attributes) {
     respond.write('<');
     respond.write(name);
 
     respond.write(' ');
 
     //write attributes
     for (Map.Entry<StringList<Token>> attribute : attributes.entrySet()) {
       respond.write(attribute.getKey());
       respond.write("=\"");
 
      final List<TokentokenList = attribute.getValue();
      for (int i = 0; i < tokenList.size(); i++) {
        Token token = tokenList.get(i);
        if (token.isExpression()) {
          respond.write(token.render(bound));
        } else {
          respond.write(
              contextualizeIfNeeded(attribute.getKey(), (0 == i), token.render(bound)));
        }
      }
      respond.write("\" ");
    }
    respond.chew();
  }
  static String contextualizeIfNeeded(String attributeboolean isFirstTokenString raw) {
    if (isFirstToken && .contains(attribute)) {
      //add context to path if needed
      if (raw.startsWith("/")) {
        if (!raw.startsWith("//"))    // Ignore protocol-relative paths.
          raw = .get().context() + raw;
      }
    }
    return raw;
  }
  public <T extends RenderableSet<T> collect(Class<T> clazz) {
    return .collect(clazz);
  }
  public void setRequestProvider(Provider<RequestrequestProvider) {
    . = requestProvider;
  }
New to GrepCode? Check out our FAQ X