package com.google.gwt.gwtpages.client.page; import java.util.HashMap; import com.google.gwt.gwtpages.client.page.loader.PageLoader; /** * Meta data that can be used to provide additional information related to a * page that is actually decoupled from the page. This is information which is * provided by the {@link PageLoader}. * * It is meant to be context sensitive. All information referenced with the meta * data is keyed by the object class and can then by retrieved using the object * class as a key. * * @author Joe Hudson * */ public class PageAttributes { private HashMap<Class<?>, Object> impls = new HashMap<Class<?>, Object>(); private HashMap<Object, Object> data = new HashMap<Object, Object>(); /** * Add a data attribute * * @param <R> * the class type * @param context * the class (used to key the data) * @param data * the data class implementation * @return this for chaining */ public <R> PageAttributes put(Class<R> context, R data) { impls.put(context, data); return this; } /** * Add a data attribute * * @param <R> * the class type * @param context * the class (used to key the data) * @param data * the data class implementation * @return this for chaining */ public <R> PageAttributes put(Object key, Object data) { this.data.put(key, data); return this; } /** * Return the keyed data using the class as the token key * * @param <R> * the class type * @param context * the data class * @return the data instance */ @SuppressWarnings("unchecked") public <R> R get(Class<R> context) { return (R) impls.get(context); } public Object get(Object key) { return data.get(key); } public HashMap<Object, Object> getData() { return data; } public PageAttributes copy() { PageAttributes rtn = new PageAttributes(); rtn.impls.putAll(impls); rtn.data.putAll(data); return rtn; } }