/* * The contents of this file are subject to the Mozilla Public License Version 1.1 * (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at . * * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT * WARRANTY OF ANY KIND, either express or implied. See the License for the specific * language governing rights and limitations under the License. * * The Original Code is the Venice Web Communities System. * * The Initial Developer of the Original Code is Eric J. Bowersox , * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ package com.silverwrist.venice.ui.dlg; import java.io.IOException; import org.w3c.dom.*; import com.silverwrist.util.*; import com.silverwrist.venice.except.*; import com.silverwrist.venice.ui.*; import com.silverwrist.venice.util.XMLLoader; public abstract class BaseDialogField implements DialogField, ColorSelectors { /*-------------------------------------------------------------------------------- * Attributes *-------------------------------------------------------------------------------- */ private boolean reverse; // if true, field is on left, false = right private String name; // field name (parameter name) private String caption; // primary caption private String caption2; // secondary caption private boolean required; // is this field required? private String value = null; // string representation of value private boolean enabled; // are we enabled? /*-------------------------------------------------------------------------------- * Constructors *-------------------------------------------------------------------------------- */ protected BaseDialogField(boolean reverse, String name, String caption, String caption2, boolean required) { this.reverse = reverse; this.name = name; this.caption = caption; this.caption2 = caption2; this.required = required; this.enabled = true; } // end constructor protected BaseDialogField(boolean reverse, Element elt, boolean get_caption2, boolean get_required) throws ConfigException { XMLLoader loader = XMLLoader.get(); this.reverse = reverse; this.name = loader.configGetAttribute(elt,"name"); this.caption = loader.configGetAttribute(elt,"capt"); if (get_caption2) this.caption2 = elt.getAttribute("capt2"); else this.caption2 = null; DOMElementHelper h = new DOMElementHelper(elt); if (get_required) this.required = h.hasAttribute("required"); else this.required = false; this.enabled = !(h.hasAttribute("disabled")); } // end constructor protected BaseDialogField(BaseDialogField other) { this.reverse = other.reverse; this.name = other.name; this.caption = other.caption; this.caption2 = other.caption2; this.required = other.required; this.enabled = other.enabled; // N.B.: do NOT copy value! } // end constructor /*-------------------------------------------------------------------------------- * Internal operations *-------------------------------------------------------------------------------- */ private final void renderCaption(RequestOutput out) throws IOException { out.write(out.getFontTag(enabled ? CONTENT_FOREGROUND : CONTENT_DISABLED,"content") + StringUtil.encodeHTML(caption)); if (!(StringUtil.isStringEmpty(caption2))) out.write(" " + StringUtil.encodeHTML(caption2)); if (!reverse) out.write(":"); out.write(""); if (required) out.write(out.getFontTag("red","content") + "*"); } // end renderCaption protected String getCaption() { return caption; } // end getCaption protected String getStringValue() { return value; } // end getStringValue protected void setCaption2(String s) { caption2 = s; } // end setCaption2 /*-------------------------------------------------------------------------------- * Abstract functions which MUST be overriden *-------------------------------------------------------------------------------- */ protected abstract void renderField(RequestOutput out) throws IOException; /*-------------------------------------------------------------------------------- * Overridable operations *-------------------------------------------------------------------------------- */ protected void validateContents(String value) throws ValidationException { // this is a do-nothing value } // end validateContents /*-------------------------------------------------------------------------------- * Implementations from interface RenderDirect *-------------------------------------------------------------------------------- */ public void render(RequestOutput out) throws IOException { out.write("\n"); if (reverse) renderField(out); else renderCaption(out); out.write("\n"); if (reverse) renderCaption(out); else renderField(out); out.write("\n\n"); } // end render /*-------------------------------------------------------------------------------- * Implementations from interface DialogField *-------------------------------------------------------------------------------- */ public String getName() { return name; } // end getName public Object getValue() { return value; } // end getValue public void setValue(Object o) { value = (o==null) ? null : o.toString(); } // end setValue public void setValueFrom(RequestInput ri) { value = ri.getParameter(name); } // end setValueFrom public boolean isRequired() { return required; } // end isRequired public boolean isFile() { return false; } // end isFile public boolean isHidden() { return false; } // end isHidden public void validate() throws ValidationException { if (required && enabled && StringUtil.isStringEmpty(value)) throw new ValidationException("The '" + caption + "' field is required."); if (enabled) validateContents(value); } // end validate public boolean isEnabled() { return enabled; } // end isEnabled public void setEnabled(boolean flag) { enabled = flag; } // end setEnabled public Object sendMessage(String msg, Object data) { return null; } // end sendMessage } // end class BaseDialogField