博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wiquery ResizePanel 2
阅读量:7090 次
发布时间:2019-06-28

本文共 17843 字,大约阅读时间需要 59 分钟。

hot3.png

----------------------Options-----------------------------

import java.util.Iterator;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.wicket.Component;
import org.apache.wicket.model.IDetachable;
import org.apache.wicket.model.IModel;
import org.odlabs.wiquery.core.javascript.JsScope;
/**
 * $Id: Options.java 1714M 2012-01-17 08:38:19Z (local) $
 * <p>
 * Wraps a set of options possibly defined for a WiQuery { Component}.
 * </p>
 *
 * <p>
 * By default, Options are rendered as a JavaScript object like this:
 *
 * <pre>
 *  {
 *      option1: 'value1',
 *      option2: 'value2
 *  }
 * </pre>
 *
 * This rendering can be customized by creating a { IOptionsRenderer}.
 * </p>
 *
 * Lionel Armanet
 * Hielke Hoeve
 * Ernesto Reinaldo Barreiro
 * 0.5
 */
public class Options implements IModel<Options>
{
    private static final long serialVersionUID = 1L;
    private Component owner;
    /**
     * The internal structure is a map associating each option label with each option
     * value.
     */
    private final Map<String, Object> options = new LinkedHashMap<String, Object>();
    /**
     * The { IOptionsRenderer} to use.
     */
    private IOptionsRenderer optionsRenderer;
    /**
     * Build a new empty { Options} instance that does not bind to a component. This
     * does not allow the usage of IComponentAssignedModels as option values.
     */
    public Options()
    {
        this(null);
    }
    /**
     * Build a new empty { Options} instance that binds to a component
     */
    public Options(Component owner)
    {
        this.owner = owner;
        this.optionsRenderer = DefaultOptionsRenderer.get();
    }
    public void setOwner(Component owner)
    {
        if (this.owner != null && this.owner != owner)
            throw new IllegalArgumentException(
                "Cannot use the same Options for multiple components");
        this.owner = owner;
    }
    /**
     * <p>
     * Returns if the given option is defined or not.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public boolean containsKey(Object key)
    {
        return options.containsKey(key);
    }
    /**
     * <p>
     * Returns the given option value as a String.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public String get(String key)
    {
        String ret = getValueFromOptions(key, StringOption.class);
        if (ret == null && options.containsKey(key))
            ret = options.get(key).toString();
        return ret;
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public Boolean getBoolean(String key)
    {
        return getValueFromOptions(key, BooleanOption.class);
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public JsScope getJsScope(String key)
    {
        return (JsScope) this.options.get(key);
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     * the complex option
     */
    public IComplexOption getComplexOption(String key)
    {
        Object object = this.options.get(key);
        if (object instanceof IComplexOption)
            return (IComplexOption) object;
        return null;
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public Double getDouble(String key)
    {
        return getValueFromOptions(key, DoubleOption.class);
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public Float getFloat(String key)
    {
        return getValueFromOptions(key, FloatOption.class);
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public Integer getInt(String key)
    {
        return getValueFromOptions(key, IntegerOption.class);
    }
    /**
     * Returns the JavaScript statement corresponding to options.
     */
    public CharSequence getJavaScriptOptions()
    {
        StringBuilder sb = new StringBuilder();
        this.optionsRenderer.renderBefore(sb);
        int count = 0;
        for (Entry<String, Object> entry : options.entrySet())
        {
            String key = entry.getKey();
            Object value = entry.getValue();
            if (value instanceof IModelOption< ? >)
                value = ((IModelOption< ? >) value).wrapOnAssignment(owner);
            boolean isLast = !(count < options.size() - 1);
            if (value instanceof JsScope)
            {
                // Case of a JsScope
                sb.append(this.optionsRenderer.renderOption(key, ((JsScope) value).render(), isLast));
            }
            else if (value instanceof ICollectionItemOptions)
            {
                // Case of an ICollectionItemOptions
                sb.append(this.optionsRenderer.renderOption(key,
                    ((ICollectionItemOptions) value).getJavascriptOption(), isLast));
            }
            else if (value instanceof IComplexOption)
            {
                // Case of an IComplexOption
                sb.append(this.optionsRenderer.renderOption(key,
                    ((IComplexOption) value).getJavascriptOption(), isLast));
            }
            else if (value instanceof ITypedOption< ? >)
            {
                // Case of an ITypedOption
                sb.append(this.optionsRenderer.renderOption(key,
                    ((ITypedOption< ? >) value).getJavascriptOption(), isLast));
            }
            else
            {
                // Other cases
                sb.append(this.optionsRenderer.renderOption(key, value, isLast));
            }
            count++;
        }
        this.optionsRenderer.renderAfter(sb);
        return sb;
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     * the list
     */
    public ICollectionItemOptions getListItemOptions(String key)
    {
        Object object = this.options.get(key);
        if (object instanceof ICollectionItemOptions)
            return (ICollectionItemOptions) object;
        return null;
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public String getLiteral(String key)
    {
        return getValueFromOptions(key, LiteralOption.class);
    }
    /**
     * <p>
     * Returns the given option value.
     * </p>
     *
     * @param key
     *            the option name.
     */
    public Short getShort(String key)
    {
        return getValueFromOptions(key, ShortOption.class);
    }
    /**
     * true if no options are defined, false otherwise.
     */
    public boolean isEmpty()
    {
        return this.options.isEmpty();
    }
    private <T, O extends IModelOption<T>> T getValueFromOptions(String key, Class<O> optionClass)
    {
        Object object = this.options.get(key);
        if (optionClass.isInstance(object))
        {
            O option = optionClass.cast(object);
            return option.wrapOnAssignment(owner).getValue();
        }
        return null;
    }
    private void putOption(String key, IModelOption< ? > option)
    {
        options.put(key, option);
    }
    /**
     * <p>
     * Put an boolean value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the boolean value.
     */
    public Options put(String key, boolean value)
    {
        putOption(key, new BooleanOption(value));
        return this;
    }
    /**
     * <p>
     * Put an boolean value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the boolean value.
     */
    public Options putBoolean(String key, IModel<Boolean> value)
    {
        putOption(key, new BooleanOption(value));
        return this;
    }
    /**
     * <p>
     * Puts an double value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the float double.
     */
    public Options put(String key, double value)
    {
        putOption(key, new DoubleOption(value));
        return this;
    }
    /**
     * <p>
     * Puts an IModel &lt;Double&gt; value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the float value.
     */
    public Options putDouble(String key, IModel<Double> value)
    {
        putOption(key, new DoubleOption(value));
        return this;
    }
    /**
     * <p>
     * Puts an float value for the given option name.
     * </p>
     *
     * @param key
     *            the option name
     * @param value
     *            The float value
     *
     */
    public Options put(String key, float value)
    {
        putOption(key, new FloatOption(value));
        return this;
    }
    /**
     * <p>
     * Puts an IModel &lt;Double&gt; value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the float double.
     */
    public Options putFloat(String key, IModel<Float> value)
    {
        putOption(key, new FloatOption(value));
        return this;
    }
    /**
     * <p>
     * Puts a list of IListItemOption value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the IListItemOption list.
     */
    public Options put(String key, ICollectionItemOptions value)
    {
        options.put(key, value);
        return this;
    }
    /**
     * <p>
     * Puts a complex option value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the IComplexOption.
     */
    public Options put(String key, IComplexOption value)
    {
        options.put(key, value);
        return this;
    }
    /**
     * <p>
     * Puts an int value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the int value.
     */
    public Options put(String key, int value)
    {
        putOption(key, new IntegerOption(value));
        return this;
    }
    /**
     * <p>
     * Puts an int value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the int value.
     */
    public Options putInteger(String key, IModel<Integer> value)
    {
        putOption(key, new IntegerOption(value));
        return this;
    }
    /**
     * <p>
     * Puts a { JsScope} value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the { JsScope} value.
     */
    public Options put(String key, JsScope value)
    {
        options.put(key, value);
        return this;
    }
    /**
     * <p>
     * Puts an short value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the short value.
     */
    public Options put(String key, short value)
    {
        putOption(key, new ShortOption(value));
        return this;
    }
    /**
     * <p>
     * Puts an short value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the short value.
     */
    public Options putShort(String key, IModel<Short> value)
    {
        putOption(key, new ShortOption(value));
        return this;
    }
    /**
     * <p>
     * Puts a { String} value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the { String} value.
     */
    public Options put(String key, String value)
    {
        putOption(key, new StringOption(value));
        return this;
    }
    /**
     * <p>
     * Puts a { String} value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the { String} value.
     */
    public Options putString(String key, IModel<String> value)
    {
        putOption(key, new StringOption(value));
        return this;
    }
    /**
     * <p>
     * Puts a { Long} value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the { Long} value.
     */
    public Options put(String key, long value)
    {
        putOption(key, new LongOption(value));
        return this;
    }
    /**
     * <p>
     * Puts a { Long} value for the given option name.
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the { Long} value.
     */
    public Options putLong(String key, IModel<Long> value)
    {
        putOption(key, new LongOption(value));
        return this;
    }
    /**
     * <p>
     * Puts a { String} value as a JavaScript literal for the given name.
     * <p>
     * Note that the JavaScript resulting from this options will be <code>'value'</code>
     * </p>
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the { LiteralOption} value.
     */
    public Options putLiteral(String key, String value)
    {
        putOption(key, new LiteralOption(value));
        return this;
    }
    /**
     * <p>
     * Puts a { String} value as a JavaScript literal for the given name.
     * <p>
     * Note that the JavaScript resulting from this options will be <code>'value'</code>
     * </p>
     * </p>
     *
     * @param key
     *            the option name.
     * @param value
     *            the { LiteralOption} value.
     */
    public Options putLiteral(String key, IModel<String> value)
    {
        putOption(key, new LiteralOption(value));
        return this;
    }
    /**
     * <p>
     * Removes an option for a given name.
     * </p>
     *
     * @param key
     *            the option's key to remove.
     */
    public void removeOption(String key)
    {
        this.options.remove(key);
    }
    /**
     * Sets the renderer to use.
     */
    public void setRenderer(IOptionsRenderer optionsRenderer)
    {
        this.optionsRenderer = optionsRenderer;
    }
    @Override
    public Options getObject()
    {
        return this;
    }
    @Override
    public void setObject(Options object)
    {
        throw new UnsupportedOperationException(
            "The setObject() function is not supported for object Options.");
    }
    @Override
    public void detach()
    {
        onDetach(this.options);
    }
    @SuppressWarnings("unchecked")
    private void onDetach(Object detachable)
    {
        if (detachable instanceof Component)
            ((Component) detachable).detach();
        else if (detachable instanceof IDetachable)
            ((IDetachable) detachable).detach();
        else if (detachable instanceof Map< ? , ? >)
        {
            for (Map.Entry< ? , ? > entry : ((Map< ? , ? >) detachable).entrySet())
            {
                onDetach(entry.getKey());
                onDetach(entry.getValue());
            }
        }
        else if (detachable instanceof Iterable< ? >)
        {
            Iterator<Object> iter = ((Iterable<Object>) detachable).iterator();
            while (iter.hasNext())
            {
                onDetach(iter.next());
            }
        }
    }

}

-----------------------------------ResizableJavaScriptResourceReference------------------------------

import org.apache.wicket.markup.head.HeaderItem;

import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.odlabs.wiquery.core.resources.JavaScriptHeaderItems;
import org.odlabs.wiquery.ui.core.CoreUIJavaScriptResourceReference;
import org.odlabs.wiquery.ui.mouse.MouseJavaScriptResourceReference;
/**
 * $Id$
 * <p>
 * References the JavaScript resource to apply resizable behavior to any HTML element.
 * </p>
 *
 * Lionel Armanet
 * 0.5
 */
public class ResizableJavaScriptResourceReference extends JavaScriptResourceReference
{
    // Constants
    /** Constant of serialization */
    private static final long serialVersionUID = 3423205998397680042L;
    /**
     * Singleton instance.
     */
    private static ResizableJavaScriptResourceReference instance =
        new ResizableJavaScriptResourceReference();
    /**
     * Builds a new instance of {
ResizableJavaScriptResourceReference}.
     */
    private ResizableJavaScriptResourceReference()
    {
        super(ResizableJavaScriptResourceReference.class, "jquery.ui.resizable.js");
    }
    /**
     * Returns the {
ResizableJavaScriptResourceReference} instance.
     */
    public static ResizableJavaScriptResourceReference get()
    {
        return instance;
    }
    @Override
    public Iterable< ? extends HeaderItem> getDependencies()
    {
        return JavaScriptHeaderItems.forReferences(CoreUIJavaScriptResourceReference.get(),
            MouseJavaScriptResourceReference.get());
    }
}
----------------------------------JsQuery--------------------------------------------------

import java.io.Serializable;

import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.request.IRequestHandler;
import org.odlabs.wiquery.core.util.WiQueryUtil;
/**
 * $Id: JsQuery.java 1721M 2012-01-17 17:43:37Z (local) $
 * <p>
 * {
JsQuery} is the main entry point of WickeXt's JavaScript integration. This class
 * is used to link JavaScript to a component and to render it.
 * </p>
 * <p>
 * This class implements the {
IHeaderContributor} interface, so if you want to
 * append the generated JavaScript, just do this:
 *
 * <pre>
 *      <code>
 * JsQuery jsq = new JsQuery(myComponent);
 * jsq.$().chain(&quot;css&quot;, &quot;border&quot;, &quot;1px solid red&quot;);
 * myComponent.add(new HeaderContributor(jsq));
 * </code>
 * </pre>
 *
 * </p>
 * <p>
 * If you want to generate a statement concerning a component, do it as below:
 * <p>
 * <code>new JsQuery(yourComponent).$().chain("css", "border", "1px solid red"));</code>
 * </p>
 * </p>
 *
 * Lionel Armanet
 * 0.7
 */
public class JsQuery extends Behavior implements Serializable
{
    private static final long serialVersionUID = -5351600688981395614L;
    /**
     * The component attached to the statement.
     */
    private Component component;
    /**
     * The built statement.
     */
    private JsStatement statement;
    /**
     * Creates a new {
JsQuery} linked to a {
Component}.
     */
    public JsQuery(Component component)
    {
        super();
        this.component = component;
        this.component.setOutputMarkupId(true);
    }
    /**
     * Creates a new {
JsQuery}.
     */
    public JsQuery()
    {
    }
    /**
     * a new {
JsStatement} initialized with the <code>$</code> statement.
     */
    public JsStatement $()
    {
        return statement = new JsStatement().$(component);
    }
    /**
     * Same as {
#$()} but with a specified CSS selector. If this {
JsQuery} is
     * linked to a component, the resulting JavaScript code will be
     * <p>
     * <code>$("#yourComponentId cssSelector")</code>
     * </p>
     *
     * @param selector
     *
     */
    public JsStatement $(String selector)
    {
        return statement = new JsStatement().$(component, selector);
    }
    /**
     * a new {
JsStatement} initialized with the <code>document</code>
     *         statement.
     */
    public JsStatement document()
    {
        return statement = new JsStatement().document();
    }
    @Override
    public void renderHead(Component component, IHeaderResponse response)
    {
        final String js = statement == null ? null : statement.render().toString();
        if (js != null && js.trim().length() > 0)
        {
            response.render(JavaScriptHeaderItem.forReference(WiQueryUtil
                .getJQueryResourceReference()));
            response.render(OnDomReadyHeaderItem.forScript(js));
        }
    }
    @Override
    public final void bind(Component hostComponent)
    {
        if (hostComponent == null)
        {
            throw new IllegalArgumentException("Argument hostComponent must be not null");
        }
        if (component != null && component != hostComponent)
        {
            throw new IllegalStateException("this kind of handler cannot be attached to "
                + "multiple components; it is already attached to component " + component
                + ", but component " + hostComponent + " wants to be attached too");
        }
        component = hostComponent;
        // call the callback
        onBind();
    }
    /**
     * Called when the component was bound to it's host component. You can get the bound
     * host component by calling getComponent.
     */
    protected void onBind()
    {
        component.setOutputMarkupId(true);
    }
    /**
     * the statement
     */
    public JsStatement getStatement()
    {
        return statement;
    }
    /**
     * FOR FRAMEWORK'S INTERNAL USE ONLY
     */
    public void setStatement(JsStatement jsStatement)
    {
        this.statement = jsStatement;
    }
    /**
     * Adds this statement as Behavior to the component. When the page or ajax request is
     * rendered this statement will be added.
     *
     * @deprecated use {
Component#add(Behavior...)}.
     */
    @Deprecated
    public void contribute(Component component)
    {
        component.add(this);
    }
    /**
     * FOR FRAMEWORK'S INTERNAL USE ONLY
     */
    public void renderHead(IHeaderResponse response, IRequestHandler requestHandler)
    {
        final String js = statement == null ? null : statement.render().toString();
        if (js != null && js.trim().length() > 0)
        {
            response.render(OnDomReadyHeaderItem.forScript(js));
        }
    }
}

转载于:https://my.oschina.net/u/1047983/blog/130022

你可能感兴趣的文章
简述Session 、Cookie、cache 区别
查看>>
FMX 模态窗体
查看>>
Winsock IO模型之select模型
查看>>
渲染机制/页面性能/错误监控
查看>>
程序员如何优雅的记录笔记(同步云端,图床,多端发布)
查看>>
Rss订阅
查看>>
Mac - gdb配置
查看>>
ART世界探险(16) - 快速编译器下的方法编译
查看>>
ubuntu安装经典的Gnome桌面
查看>>
Nginx unknown directive "xxxx" 错误解决办法
查看>>
Windows下查看文件MD5值
查看>>
Spring 异步消息
查看>>
杭电2017
查看>>
ElasticSearch5.* 删除index/type 数据restful API调用
查看>>
建立共享存储实验记录
查看>>
笨方法学python VII
查看>>
myeclipse控制台不显示tomcat信息
查看>>
cent os 下载地址
查看>>
SyntaxNet 中文模型的使用
查看>>
对libevent+多线程服务器模型的C++封装类
查看>>