Doh my bad, I had the components markup in my html as well as in the
fragment, so when I removed them from the html everything works as wanted:)

2011/3/10 nino martinez wael <nino.martinez.w...@gmail.com>

> I've added generics.. Still not working though, it's as if the components
> get added twice (and the fragment never gets added or something like that)
>
>
>
>
> Index:
> branches/1.5/visural-wicket/src/com/visural/wicket/component/viewmode/ViewOrEdit.java
> ===================================================================
> ---
> branches/1.5/visural-wicket/src/com/visural/wicket/component/viewmode/ViewOrEdit.java
>  (revision
> 266)
> +++
> branches/1.5/visural-wicket/src/com/visural/wicket/component/viewmode/ViewOrEdit.java
>  (working
> copy)
> @@ -14,11 +14,8 @@
>   *  limitations under the License.
>   *  under the License.
>   */
> -package com.visural.wicket.component.viewmode;
> +package com.netdesign.ccadmin.components.vieworedit;
>
> -import com.visural.wicket.security.IPrivilege;
> -import com.visural.wicket.security.ISecureEnableInstance;
> -import com.visural.wicket.security.ISecureRenderInstance;
>  import org.apache.wicket.Component;
>  import org.apache.wicket.markup.html.basic.Label;
>  import org.apache.wicket.markup.html.form.AbstractChoice;
> @@ -35,19 +32,19 @@
>  import org.apache.wicket.model.Model;
>
>  /**
> - * A wrapper for a FormComponent which replaces the component with a Label
> - * when the wrapped control is in "view mode".
> - *
> + * A wrapper for a FormComponent which replaces the component with a Label
> when
> + * the wrapped control is in "view mode".
> + *
>   * Apply to a containing DOM element, e.g. `<span></span>` or
> `<div></div>`
>   *
>   * The component you provide to the constructor must be given as ID
> matching
>   * `ViewOrEdit.COMP_ID`.
> - *
> + *
>   * The idea is to allow the rendering of web-like modern applications
> where
>   * non-editable elements are represented in text form, using the same
> wicket
>   * page / form implementation.
> - *
> - * What is "view mode" for a given component is determined by the method
> + *
> + * What is "view mode" for a given component is determined by the method
>   * `isViewMode()`. The default implementation of this method uses the
> component
>   * and its form's `isEnabled()` state to determine view or edit.
>   *
> @@ -59,194 +56,194 @@
>   * apply to form elements wrapped in a `ViewOrEdit` container. Just name
> your
>   * `ViewOrEdit` element as per the property you wish to apply to the child
>   * control.
> - *
> + *
>   * @version $Id$
>   * @author Richard Nichols
>   */
> -public class ViewOrEdit extends FormComponentPanel implements
> ISecureRenderInstance, ISecureEnableInstance {
> -    private static final long serialVersionUID = 1L;
> -    /**
> -     * This is the id of the component to be contained within the
> ViewOrEdit container.
> -     * Any component provided to the ViewOrEdit component should be
> identified as ViewOrEdit.COMP_ID
> -     */
> -    public final static String COMP_ID = "component";
> +public class ViewOrEdit<T> extends FormComponentPanel<T> {
> + private static final long serialVersionUID = 1L;
> + /**
> + * This is the id of the component to be contained within the ViewOrEdit
> + * container. Any component provided to the ViewOrEdit component should
> be
> + * identified as ViewOrEdit.COMP_ID
> + */
> + public final static String COMP_ID = "component";
>
> -    private final FormComponent component;
> -    private Label label;
> + private final FormComponent<T> component;
> + private Label label;
>
> -    public ViewOrEdit(String id, FormComponent component) {
> -        this(id, component, null, null);
> -    }
> + public ViewOrEdit(String id, FormComponent<T> component) {
> + this(id, component, null, null);
> + }
>
> -    public ViewOrEdit(String id, FormComponent component, IModel
> labelModel) {
> -        this(id, component, labelModel, null);
> -    }
> + public ViewOrEdit(String id, FormComponent<T> component,
> + IModel<T> labelModel) {
> + this(id, component, labelModel, null);
> + }
>
> -    public ViewOrEdit(String id, FormComponent component,
> ComponentModelToLabel componentModelToLabel) {
> -        this(id, component, null, componentModelToLabel);
> -    }
> + public ViewOrEdit(String id, FormComponent<T> component,
> + ComponentModelToLabel<T> componentModelToLabel) {
> + this(id, component, null, componentModelToLabel);
> + }
>
> -    protected ViewOrEdit(final String id, final FormComponent component,
> IModel labelModel, final ComponentModelToLabel componentModelToLabel) {
> -        super(id);
> -        this.component = component;
> -
> -        if (labelModel == null && componentModelToLabel != null) {
> -            labelModel = new AbstractReadOnlyModel() {
> + protected ViewOrEdit(final String id, final FormComponent<T> component,
> + IModel labelModel,
> + final ComponentModelToLabel<T> componentModelToLabel) {
> + super(id);
> + this.component = component;
>
> -                private final ComponentModelToLabel converter =
> componentModelToLabel;
> + if (labelModel == null && componentModelToLabel != null) {
> + labelModel = new AbstractReadOnlyModel<String>() {
>
> -                @Override
> -                public Object getObject() {
> -                    return
> converter.convertToLabel(component.getModelObject());
> -                }
> -            };
> -        }
> + private final ComponentModelToLabel<T> converter =
> componentModelToLabel;
>
> -        if (component == null || !component.getId().equals(COMP_ID)) {
> -            throw new IllegalArgumentException("The component provided to
> LabelOnViewOnly(...) must have the id \"" + COMP_ID + "\"");
> -        }
> + @Override
> + public String getObject() {
> + return converter.convertToLabel(component.getModelObject());
> + }
> + };
> + }
>
> -        Fragment f = resolveComponentFragment(labelModel);
> -        if (f == null) {
> -            throw new UnsupportedOperationException("No view mode fragment
> for component of type " + component.getClass().getName());
> -        }
> -        add(f);
> -    }
> + if (component == null || !component.getId().equals(COMP_ID)) {
> + throw new IllegalArgumentException(
> + "The component provided to LabelOnViewOnly(...) must have the id \""
> + + COMP_ID + "\"");
> + }
>
> -    /**
> -     * Provide support for using CompountPropertyModel or similar on form
> -     * and having that property model chain to the form component being
> wrapped
> -     * in a ViewOrEdit.
> -     *
> -     * @return
> -     */
> -    @Override
> -    protected IModel<?> initModel() {
> -        final IModel parentModel = super.initModel();
> -        if (parentModel != null && parentModel instanceof IWrapModel) {
> -            // we want to set this model to wrap the form component
> -            return new WrappedParentModel((IWrapModel)parentModel);
> -        }
> -        // we do this in case there is no parent model to avoid
> -        // "Attempt to set model object on null model of component" errors
> -        return new Model();
> -    }
> + Fragment f = resolveComponentFragment(labelModel);
> + // f.setVisible(false);
> + if (f == null) {
> + throw new UnsupportedOperationException(
> + "No view mode fragment for component of type "
> + + component.getClass().getName());
> + }
> + add(f);
> + }
>
> -    @Override
> -    protected void convertInput() {
> -        // this forces a call to initModel()
> -        getDefaultModel();
> -    }
> + /**
> + * Provide support for using CompountPropertyModel or similar on form and
> + * having that property model chain to the form component being wrapped
> in a
> + * ViewOrEdit.
> + *
> + * @return
> + */
> + @Override
> + protected IModel<?> initModel() {
> + final IModel parentModel = super.initModel();
> + if (parentModel != null && parentModel instanceof IWrapModel) {
> + // we want to set this model to wrap the form component
> + return new WrappedParentModel((IWrapModel<T>) parentModel);
> + }
> + // we do this in case there is no parent model to avoid
> + // "Attempt to set model object on null model of component" errors
> + return new Model();
> + }
>
> -    /**
> -     * Determine whether the component is in view mode or not.
> -     *
> -     * By default, the implementation will assume view mode when this
> component
> -     * is not enabled or the form component is not enabled or the form
> itself
> -     * is not enabled, however this behaviour may be overriden as req'd.
> -     *
> -     * @return
> -     */
> -    public boolean isViewMode() {
> -        return !this.isEnabled() || !component.isEnabled() ||
> !component.getForm().isEnabled();
> -    }
> + @Override
> + protected void convertInput() {
> + // this forces a call to initModel()
> + getDefaultModel();
> + }
>
> -    @Override
> -    protected void onBeforeRender() {
> -        // this forces a call to initModel()
> -        getDefaultModel();
> -        // now proceed as normal
> -        super.onBeforeRender();
> -        boolean isView = this.isViewMode();
> -        label.setVisible(isView);
> -        component.setVisible(!isView);
> -    }
> + /**
> + * Determine whether the component is in view mode or not.
> + *
> + * By default, the implementation will assume view mode when this
> component
> + * is not enabled or the form component is not enabled or the form itself
> is
> + * not enabled, however this behaviour may be overriden as req'd.
> + *
> + * @return
> + */
> + public boolean isViewMode() {
> + return !this.isEnabled() || !component.isEnabled()
> + || !component.getForm().isEnabled();
> + }
>
> -    private Fragment resolveComponentFragment(IModel labelModel) {
> -        if (labelModel == null) {
> -            // TODO: rather than doing this, maybe lookup converter?
> -            labelModel = new IModel() {
> + @Override
> + protected void onBeforeRender() {
> + // this forces a call to initModel()
> + getDefaultModel();
> + // now proceed as normal
> + super.onBeforeRender();
>
> -                public Object getObject() {
> -                    return (component.getModelObject() == null ? null :
> component.getModelObject().toString());
> -                }
> + boolean isView = this.isViewMode();
> + label.setVisible(isView);
> + component.setVisible(!isView);
> + }
>
> -                public void setObject(Object arg0) {
> -                }
> + private Fragment resolveComponentFragment(IModel<String> labelModel) {
> + if (labelModel == null) {
> + // TODO: rather than doing this, maybe lookup converter?
> + labelModel = new AbstractReadOnlyModel<String>() {
> + public String getObject() {
> + return (component.getModelObject() == null ? null
> + : component.getModelObject().toString());
> + }
>
> -                public void detach() {
> -                }
> -            };
> -        }
> -        label = new Label("viewLabel", labelModel);
> -        label.setEscapeModelStrings(isEscapeLabelModelStrings());
> -        if (TextField.class.isAssignableFrom(component.getClass())) {
> -            Fragment f = new Fragment("controlPair", "textfield", this);
> -            f.add(label);
> -            f.add(component);
> -            return f;
> -        }
> -        if (CheckBox.class.isAssignableFrom(component.getClass())) {
> -            Fragment f = new Fragment("controlPair", "checkbox", this);
> -            f.add(label);
> -            f.add(component);
> -            return f;
> -        }
> -        if (TextArea.class.isAssignableFrom(component.getClass())) {
> -            Fragment f = new Fragment("controlPair", "textarea", this);
> -            f.add(label);
> -            f.add(component);
> -            return f;
> -        }
> -        if (AbstractChoice.class.isAssignableFrom(component.getClass())) {
> -            Fragment f = new Fragment("controlPair", "choice", this);
> -            f.add(label);
> -            f.add(component);
> -            return f;
> -        }
> -        return null;
> -    }
> + };
> + }
>
> -    public FormComponent getComponent() {
> -        return component;
> -    }
> + label = new Label("viewLabel", labelModel);
> + label.setEscapeModelStrings(isEscapeLabelModelStrings());
> + if (TextField.class.isAssignableFrom(component.getClass())) {
> + Fragment f = new Fragment("controlPair", "textfield", this);
> + f.add(label);
> + f.add(component);
> + return f;
> + }
> + if (CheckBox.class.isAssignableFrom(component.getClass())) {
> + Fragment f = new Fragment("controlPair", "checkbox", this);
> + f.add(label);
> + f.add(component);
> + return f;
> + }
> + if (TextArea.class.isAssignableFrom(component.getClass())) {
> + Fragment f = new Fragment("controlPair", "textarea", this);
> + f.add(label);
> + f.add(component);
> + return f;
> + }
> + if (AbstractChoice.class.isAssignableFrom(component.getClass())) {
> + Fragment f = new Fragment("controlPair", "choice", this);
> + f.add(label);
> + f.add(component);
> + return f;
> + }
> + return null;
> + }
>
> -    public boolean isEscapeLabelModelStrings() {
> -        return false;
> -    }
> + public FormComponent<T> getComponent() {
> + return component;
> + }
>
> -    class WrappedParentModel implements IComponentInheritedModel {
> -        private final IWrapModel realParent;
> + public boolean isEscapeLabelModelStrings() {
> + return false;
> + }
>
> -        public WrappedParentModel(IWrapModel realParent) {
> -            this.realParent = realParent;
> -        }
> + class WrappedParentModel implements IComponentInheritedModel {
> + private final IWrapModel realParent;
>
> -        public IWrapModel wrapOnInheritance(Component arg0) {
> -            if (arg0 == ViewOrEdit.this.component) {
> -                return realParent;
> -            } else {
> -                return null;
> -            }
> -        }
> + public WrappedParentModel(IWrapModel realParent) {
> + this.realParent = realParent;
> + }
>
> -        public Object getObject() {
> -            return null;
> -        }
> + public IWrapModel wrapOnInheritance(Component arg0) {
> + if (arg0 == ViewOrEdit.this.component) {
> + return realParent;
> + } else {
> + return null;
> + }
> + }
>
> -        public void setObject(Object arg0) {
> -        }
> + public Object getObject() {
> + return null;
> + }
>
> -        public void detach() {
> -        }
> -    }
> + public void setObject(Object arg0) {
> + }
>
> -    public IPrivilege getRenderPrivilege() {
> -        return IPrivilege.NULL;
> -    }
> + public void detach() {
> + }
> + }
>
> -    public IPrivilege getEnablePrivilege() {
> -        return IPrivilege.NULL;
> -    }
> -
> -}
> +}
> \ No newline at end of file
>
>
> 2011/3/10 nino martinez wael <nino.martinez.w...@gmail.com>
>
> Ok I've given it a run.. And are having problems :(
>>
>> It still does'nt seem like ViewOrEdit honors the fact that it is either
>> ViewOrEdit.
>> So it either looks like:
>> http://img826.imageshack.us/i/greenshot20110310111030.png/
>> Or
>> http://img689.imageshack.us/i/greenshot20110310111207.png/
>>
>> If I try to run the examples I get and error:
>> http://img833.imageshack.us/i/greenshot20110310111126.png/
>>
>>
>> Also I had to add the servlet api inorder to run the ant build, as well as
>> putting the jar files besides the other wicket dependencies.
>>
>> Index: branches/1.5/visural-wicket-examples/lib/nblibraries.properties
>> ===================================================================
>> --- branches/1.5/visural-wicket-examples/lib/nblibraries.properties (revision
>> 266)
>> +++ branches/1.5/visural-wicket-examples/lib/nblibraries.properties (working
>> copy)
>> @@ -20,6 +20,7 @@
>>  libs.visural-wicket.src=\
>>      ${base}/visural-wicket/visural-wicket-0.5-sources.jar
>>  libs.Wicket.classpath=\
>> + ${base}/Wicket/servlet-api-2.5-20081211.jar;\
>>      ${base}/Wicket/slf4j-api-1.4.2.jar;\
>>      ${base}/Wicket/slf4j-jdk14-1.4.2.jar;\
>>      ${base}/Wicket/wicket-core-1.5-rc2.jar;\
>>
>>
>>
>>
>>
>> 2011/3/9 nino martinez wael <nino.martinez.w...@gmail.com>
>>
>> Thanks. I'll give feedback if needed
>>> On Mar 9, 2011 4:22 AM, "Richard Nichols" <r...@visural.com> wrote:
>>> > I've committed what appears to be a mostly working visural-wicket with
>>> 1.5
>>> > (rc2) compatibility.
>>> >
>>> >
>>> http://code.google.com/p/visural-wicket/source/browse/#svn%2Fbranches%2F1.5
>>> >
>>> > If there are any issues found, please report them at
>>> > http://code.google.com/p/visural-wicket/
>>> >
>>> > cheers,
>>> > Richard.
>>> >
>>> > On Wed, Mar 9, 2011 at 4:30 AM, nino martinez wael <
>>> > nino.martinez.w...@gmail.com> wrote:
>>> >
>>> >> ok great.. I'll probably take at look at it monday then..
>>> >>
>>> >> 2011/3/8 Richard Nichols <r...@visural.com>
>>> >>
>>> >> > Hi Nino,
>>> >> >
>>> >> > The version in the public respository 1.5 branch is still a direct
>>> copy
>>> >> of
>>> >> > 1.4 - sorry I haven't commited the WIP 1.5 changes yet.
>>> >> >
>>> >> > I'll aim to get the WIP committed in this week.
>>> >> >
>>> >> > cheers,
>>> >> > Richard.
>>> >> >
>>> >> > On Mon, Mar 7, 2011 at 6:47 PM, nino martinez wael <
>>> >> > nino.martinez.w...@gmail.com> wrote:
>>> >> >
>>> >> > > Strange it compiles well, but does not work as wanted.. Any idea
>>> on
>>> >> which
>>> >> > > parts are causing the problems? On my dropdowns the dropdowns are
>>> >> empty,
>>> >> > > and in my textfields both the text and the span are added if in
>>> view
>>> >> > mode,
>>> >> > > and if not 2 textfields are added.
>>> >> > >
>>> >> > > 2011/3/5 Richard Nichols <r...@richardnichols.net>
>>> >> > >
>>> >> > > > I've created a 1.5 branch and it's in the works. 1.5 broke more
>>> stuff
>>> >> > > > than expected :)
>>> >> > > >
>>> >> > > > Hopefully I can have a beta 1.5 branch functional within a few
>>> weeks
>>> >> > > >
>>> >> > > > Sent from my iPhone
>>> >> > > >
>>> >> > > > On 05/03/2011, at 6:15 AM, nino martinez wael
>>> >> > > > <nino.martinez.w...@gmail.com> wrote:
>>> >> > > >
>>> >> > > > > So does has anybody run it on wicket 1.5, or is there
>>> something in
>>> >> > the
>>> >> > > > works
>>> >> > > > > for it?
>>> >> > > > >
>>> >> > > > > regards Nino
>>> >> > > >
>>> >> > > >
>>> ---------------------------------------------------------------------
>>> >> > > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>> >> > > > For additional commands, e-mail: users-h...@wicket.apache.org
>>> >> > > >
>>> >> > > >
>>> >> > >
>>> >> >
>>> >> >
>>> >> >
>>> >> > --
>>> >> > Richard Nichols
>>> >> > http://www.richardnichols.net/ :: http://onmydoorstep.com.au/
>>> >> >
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > Richard Nichols
>>> > http://www.richardnichols.net/ :: http://onmydoorstep.com.au/
>>>
>>
>>
>

Reply via email to