
org.holoeverywhere.addon.IAddonBasicAttacher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of addon-facebook Show documentation
Show all versions of addon-facebook Show documentation
Facebook SDK special for using with HoloEverywhere library
The newest version!
package org.holoeverywhere.addon;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.holoeverywhere.addon.IAddon.Addon;
public final class IAddonBasicAttacher, Z> implements IAddonAttacher {
private final class AddonComparator implements Comparator {
@Override
public int compare(V lhs, V rhs) {
final int i1 = getWeight(lhs.getParent());
final int i2 = getWeight(rhs.getParent());
return i1 > i2 ? 1 : i1 < i2 ? -1 : 0;
}
private int getWeight(IAddon addon) {
if (addon.getClass().isAnnotationPresent(Addon.class)) {
return addon.getClass().getAnnotation(Addon.class).weight();
}
return -1;
}
}
private final Map, V> mAddons = new HashMap, V>();
private final Set mAddonsList = new TreeSet(new AddonComparator());
private boolean mLockAttaching = false;
private Z mObject;
public IAddonBasicAttacher(Z object) {
mObject = object;
}
@Override
@SuppressWarnings("unchecked")
public T addon(Class extends IAddon> clazz) {
T addon = (T) mAddons.get(clazz);
if (addon == null) {
if (mLockAttaching) {
throw new AttachException(mObject, clazz);
}
addon = IAddon.obtain(clazz, mObject);
if (addon == null) {
return null;
}
mAddons.put(clazz, addon);
mAddonsList.add(addon);
}
return addon;
}
@Override
public void addon(Collection> classes) {
if (classes == null) {
return;
}
for (Class extends IAddon> clazz : classes) {
addon(clazz);
}
}
@Override
public T addon(String classname) {
return addon(IAddon.makeAddonClass(classname));
}
public void inhert(Collection> sourceClasses) {
if (sourceClasses == null || sourceClasses.size() == 0) {
return;
}
List> classes = new ArrayList>();
for (Class extends IAddon> clazz : sourceClasses) {
if (!clazz.isAnnotationPresent(Addon.class)) {
continue;
}
Addon addon = clazz.getAnnotation(Addon.class);
if (addon.inhert()) {
classes.add(clazz);
}
}
addon(classes);
}
public void inhert(IAddonAttacher> attacher) {
inhert(attacher == null ? null : attacher.obtainAddonsList());
}
@Override
public boolean isAddonAttached(Class extends IAddon> clazz) {
return mAddons.containsKey(clazz);
}
@Override
public void lockAttaching() {
mLockAttaching = true;
}
@Override
public Collection> obtainAddonsList() {
return new ArrayList>(mAddons.keySet());
}
@Override
public boolean performAddonAction(AddonCallback callback) {
if (mAddons.size() == 0) {
return false;
}
callback.pre();
boolean result = false;
for (V addon : mAddonsList) {
result = callback.performAction(addon);
if (callback.mStopped) {
return result;
}
}
return callback.post();
}
public void reset() {
mAddons.clear();
mAddonsList.clear();
mLockAttaching = false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy