001    package net.databinder.components;
002    
003    import org.apache.wicket.Component;
004    import org.apache.wicket.markup.html.link.Link;
005    import org.apache.wicket.model.IModel;
006    
007    /**
008     * Links to set the model of a target component.
009     * @author Nathan Hamblen
010     */
011    public class ModelSourceLink extends Link {
012            private Component target;
013            /**
014             * Construct link to set model of component.
015             * @param id component id
016             * @param target set model of this component
017             * @param model the model to set
018             */
019            public ModelSourceLink(String id, Component target, IModel model) {
020                    super(id, model);
021                    this.target = target;
022            }
023            /** return false when model is already set to target and is visible */
024            @Override
025            public boolean isEnabled() {
026                    if (!target.isVisible()) 
027                            return true;
028                    
029                    return !getModelObject().equals(target.getModelObject());
030            }
031            /**
032             * Set model of target, and set target to visible in case it has hide before use behavior.
033             */
034            @Override
035            public void onClick() {
036                    target.setModelObject(getModelObject());
037                    target.setVisible(true);
038            }
039    }