Chapter 7: PodTextFilterRenderer for new Pod filter example

Figure 1. This renderer will create the text filter that we use in Chapter 7 when we demonstrate how to create new filters for Pods
001  package sample;
002
003  import org.w3c.dom.DocumentFragment;
004  import curam.util.client.ClientException;
005  import curam.util.client.model.Component;
006  import curam.util.client.model.ComponentBuilderFactory;
007  import curam.util.client.model.Field;
008  import curam.util.client.model.FieldBuilder;
009  import curam.util.client.view.RendererContext;
010  import curam.util.client.view.RendererContract;
011  import curam.util.common.path.DataAccessException;
012  import curam.util.common.path.Path;
013  import curam.util.common.plugin.PlugInException;
014  import curam.widget.render.infrastructure.AbstractComponentRenderer;
015
016  /**
017   * Creates a text input for use with a Pod Filter
018   */
019  public class PodTextFilterRenderer extends AbstractComponentRenderer {
020
021    public void render(Component component, DocumentFragment fragment,
022      RendererContext context, RendererContract contract)
023      throws ClientException, DataAccessException, PlugInException {
024
025      Field field = ((Field)component);
026
027      final FieldBuilder fieldBuilder =
028        ComponentBuilderFactory.createFieldBuilder();
029      fieldBuilder.copy(field);
030
031      // Update the source path to point at the text node
032      String sourcePathExt = "text-filter";
033      Path sourcePath =
034        field.getBinding().getSourcePath().extendPath(sourcePathExt);
035      fieldBuilder.setSourcePath(sourcePath);
036
037      // Update the target path to use the Pod filter id
038      String targetPathExt =
039        "choice/" + field.getID() + "/selected-options";
040      Path targetPath =
041        field.getBinding().getTargetPath().extendPath(targetPathExt);
042      fieldBuilder.setTargetPath(targetPath);
043
044      // Use TextRenderer to create input box
045      fieldBuilder.setDomain(context.getDomain("TEXT_NODE"));
046      DocumentFragment textFilter =
047        fragment.getOwnerDocument().createDocumentFragment();
048      context.render(fieldBuilder.getComponent(), fragment, contract);
049
050      fragment.appendChild(textFilter);
051    }
052  }