Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/addon/IAddon.java')
-rw-r--r--android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/addon/IAddon.java99
1 files changed, 99 insertions, 0 deletions
diff --git a/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/addon/IAddon.java b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/addon/IAddon.java
new file mode 100644
index 0000000000..fa7383ae8d
--- /dev/null
+++ b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/addon/IAddon.java
@@ -0,0 +1,99 @@
+
+package org.holoeverywhere.addon;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.holoeverywhere.HoloEverywhere;
+import org.holoeverywhere.util.WeaklyMap;
+
+public abstract class IAddon {
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface Addon {
+ public boolean inhert() default false;
+
+ public int weight() default -1;
+ }
+
+ private static final Map<Class<? extends IAddon>, IAddon> sAddonsMap = new HashMap<Class<? extends IAddon>, IAddon>();
+
+ @SuppressWarnings("unchecked")
+ public static <T extends IAddon> T addon(Class<T> clazz) {
+ try {
+ T t = (T) sAddonsMap.get(clazz);
+ if (t == null) {
+ t = clazz.newInstance();
+ sAddonsMap.put(clazz, t);
+ }
+ return t;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static <T extends IAddon> T addon(String classname) {
+ Class<T> clazz = makeAddonClass(classname);
+ return addon(clazz);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T extends IAddon> Class<T> makeAddonClass(String classname) {
+ if (classname.contains(".")) {
+ try {
+ return (Class<T>) Class.forName(classname);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ } else {
+ return makeAddonClass(HoloEverywhere.PACKAGE + ".addon.Addon" + classname);
+ }
+ }
+
+ public static <T extends IAddon, Z extends IAddonBase<V>, V> Z obtain(Class<T> clazz, V object) {
+ return addon(clazz).obtain(object);
+ }
+
+ public static <T extends IAddon, Z extends IAddonBase<V>, V> Z obtain(String classname, V object) {
+ return addon(classname).obtain(object);
+ }
+
+ private final Map<Object, Object> mStatesMap = new WeaklyMap<Object, Object>();
+ private final Map<Class<?>, Class<? extends IAddonBase<?>>> mTypesMap = new HashMap<Class<?>, Class<? extends IAddonBase<?>>>();
+
+ @SuppressWarnings("unchecked")
+ public <T, V extends IAddonBase<T>> V obtain(T object) {
+ try {
+ V addon = (V) mStatesMap.get(object);
+ if (addon != null) {
+ return addon;
+ }
+ Class<?> clazz = object.getClass();
+ while (!mTypesMap.containsKey(clazz)) {
+ if (clazz == Object.class) {
+ // Nothing was found
+ return null;
+ }
+ clazz = clazz.getSuperclass();
+ }
+ addon = ((Class<V>) mTypesMap.get(clazz)).newInstance();
+ addon.attach(object, this);
+ mStatesMap.put(object, addon);
+ return addon;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public <T> void register(Class<T> clazz, Class<? extends IAddonBase<T>> addonClazz) {
+ mTypesMap.put(clazz, addonClazz);
+ }
+
+ public void unregister(Class<?> clazz) {
+ mTypesMap.remove(clazz);
+ }
+}