Source Code for the Details Widget

public class PersonDetailsViewRenderer
       extends AbstractViewRenderer {

  public void render(
    Field field, DocumentFragment fragment,
    RendererContext context, RendererContract contract)
    throws ClientException, DataAccessException, PlugInException {

    String name = context.getDataAccessor().get(
      field.getBinding().getSourcePath()
                              .extendPath("/details/name"));
    String reference = context.getDataAccessor().get(
      field.getBinding().getSourcePath()
                              .extendPath("/details/reference"));
    String address = context.getDataAccessor().get(
      field.getBinding().getSourcePath()
                              .extendPath("/details/address"));
    String gender = context.getDataAccessor().get(
      field.getBinding().getSourcePath()
                              .extendPath("/details/gender"));
    String dateOfBirth = context.getDataAccessor().get(
      field.getBinding().getSourcePath()
                              .extendPath("/details/dob"));
    String age = context.getDataAccessor().get(
      field.getBinding().getSourcePath()
                              .extendPath("/details/age"));
    String phone = context.getDataAccessor().get(
      field.getBinding().getSourcePath()
                              .extendPath("/details/phone"));
    String email = context.getDataAccessor().get(
      field.getBinding().getSourcePath()
                              .extendPath("/details/e-mail"));

    Document doc = fragment.getOwnerDocument();

    Element detailsPanelDiv = doc.createElement("div");
    detailsPanelDiv.setAttribute("class",
      "person-details-container");
    fragment.appendChild(detailsPanelDiv);

    Element div;
    Element image;

    div = doc.createElement("div");
    div.setAttribute("class", "header-info");
    div.appendChild(doc.createTextNode(name));
    div.appendChild(doc.createTextNode(" - "));
    div.appendChild(doc.createTextNode(reference));
    detailsPanelDiv.appendChild(div);

    div = doc.createElement("div");
    div.appendChild(doc.createTextNode(address));
    detailsPanelDiv.appendChild(div);

    div = doc.createElement("div");
    div.appendChild(doc.createTextNode(gender));
    detailsPanelDiv.appendChild(div);

    div = doc.createElement("div");
    div.appendChild(doc.createTextNode("Born "));
    div.appendChild(doc.createTextNode(dateOfBirth));
    div.appendChild(doc.createTextNode(", Age "));
    div.appendChild(doc.createTextNode(age));
    detailsPanelDiv.appendChild(div);

    div = doc.createElement("div");
    div.setAttribute("class", "contact-info");
    detailsPanelDiv.appendChild(div);
    image = doc.createElement("img");
    image.setAttribute("src", "../Images/phone_icon.png");
    div.appendChild(image);
    div.appendChild(doc.createTextNode(phone));

    FieldBuilder fb =
      ComponentBuilderFactory.createFieldBuilder();
    fb.setDomain(
      context.getDomain("SAMPLE_EMAIL"));
    fb.setSourcePath(
      field.getBinding().getSourcePath()
                            .extendPath("/details/e-mail"));
    DocumentFragment emailFragment = doc.createDocumentFragment();
    context.render(fb.getComponent(), emailFragment,
                   contract.createSubcontract());
    div.appendChild(emailFragment);
  }
}