001 // Copyright May 4, 2006 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 package net.sf.tacos.components.dojo.form; 015 016 import java.util.ArrayList; 017 import java.util.HashMap; 018 import java.util.List; 019 import java.util.Map; 020 import org.apache.tapestry.IMarkupWriter; 021 import org.apache.tapestry.IRequestCycle; 022 import org.apache.tapestry.IScript; 023 import org.apache.tapestry.PageRenderSupport; 024 import org.apache.tapestry.TapestryUtils; 025 import org.apache.tapestry.dojo.form.AbstractFormWidget; 026 import org.apache.tapestry.engine.IEngineService; 027 import org.apache.tapestry.form.TranslatedField; 028 import org.apache.tapestry.form.TranslatedFieldSupport; 029 import org.apache.tapestry.form.ValidatableFieldSupport; 030 import org.apache.tapestry.json.JSONObject; 031 import org.apache.tapestry.services.DataSqueezer; 032 import org.apache.tapestry.valid.ValidatorException; 033 034 /** 035 * An html field similar to a <code>textarea</code> field that 036 * is wrapped by a dojo Editor2 widget.<p/> 037 * This component adds javascript that makes the dojo widget 038 * update the value of the textarea (to support async submits) it is bound to. 039 * 040 * @author andyhot 041 */ 042 public abstract class HtmlArea extends AbstractFormWidget implements TranslatedField 043 { 044 /** 045 * 046 * {@inheritDoc} 047 */ 048 protected void renderFormWidget(IMarkupWriter writer, IRequestCycle cycle) 049 { 050 String value = getTranslatedFieldSupport().format(this, getValue()); 051 052 renderDelegatePrefix(writer, cycle); 053 054 writer.begin("textarea"); 055 writer.attribute("name", getName()); 056 057 if (isDisabled()) 058 writer.attribute("disabled", "disabled"); 059 060 renderIdAttribute(writer, cycle); 061 062 renderDelegateAttributes(writer, cycle); 063 064 getTranslatedFieldSupport().renderContributions(this, writer, cycle); 065 getValidatableFieldSupport().renderContributions(this, writer, cycle); 066 067 renderInformalParameters(writer, cycle); 068 069 if (value != null) writer.print(value); 070 071 writer.end(); 072 073 renderDelegateSuffix(writer, cycle); 074 075 Map parms = new HashMap(); 076 parms.put("id", getClientId()); 077 078 JSONObject json = new JSONObject(); 079 json.put((Object)"widgetId", getName()); 080 json.put((Object)"name", getName()); 081 json.put((Object)"disabled", isDisabled()); 082 if (getToolbarTemplatePath()!=null) 083 json.put((Object)"toolbarTemplatePath", getToolbarTemplatePath()); 084 085 parms.put("props", json.toString()); 086 parms.put("widget", this); 087 088 PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, this); 089 getScript().execute(this, cycle, prs, parms); 090 } 091 092 /** 093 * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle) 094 */ 095 protected void rewindFormWidget(IMarkupWriter writer, IRequestCycle cycle) 096 { 097 String value = cycle.getParameter(getName()); 098 099 try 100 { 101 String text = (String) getTranslatedFieldSupport().parse(this, value); 102 103 getValidatableFieldSupport().validate(this, writer, cycle, text); 104 105 setValue(text); 106 } 107 catch (ValidatorException e) 108 { 109 getForm().getDelegate().record(e); 110 } 111 } 112 113 public abstract String getToolbarTemplatePath(); 114 115 /** @since 2.2 * */ 116 public abstract Object getValue(); 117 118 /** @since 2.2 * */ 119 public abstract void setValue(Object value); 120 121 /** Injected. */ 122 public abstract DataSqueezer getDataSqueezer(); 123 124 /** 125 * Injected. 126 */ 127 public abstract ValidatableFieldSupport getValidatableFieldSupport(); 128 129 /** 130 * Injected. 131 */ 132 public abstract TranslatedFieldSupport getTranslatedFieldSupport(); 133 134 /** 135 * Injected. 136 */ 137 public abstract IEngineService getDirectService(); 138 139 /** 140 * Injected. 141 */ 142 public abstract IScript getScript(); 143 144 /** 145 * @see org.apache.tapestry.form.AbstractFormComponent#isRequired() 146 */ 147 public boolean isRequired() 148 { 149 return getValidatableFieldSupport().isRequired(this); 150 } 151 152 /** 153 * {@inheritDoc} 154 */ 155 public List getUpdateComponents() 156 { 157 List comps = new ArrayList(); 158 comps.add(getClientId()); 159 160 return comps; 161 } 162 163 /** 164 * {@inheritDoc} 165 */ 166 public boolean isAsync() 167 { 168 return false; 169 } 170 171 /** 172 * {@inheritDoc} 173 */ 174 public boolean isJson() 175 { 176 return false; 177 } 178 }