Figure 1. This renderer will create the text filter that we use in Chapter 7 when we demonstrate how to create new filters for Pods001 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 }