This commit is contained in:
@@ -54,20 +54,21 @@ public final class ResourceFactory {
|
|||||||
this.store.clear();
|
this.store.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(final Class clazz, final Object rs) {
|
public <A> A register(final Class<? extends A> clazz, final A rs) {
|
||||||
register(true, clazz, rs);
|
return register(true, clazz, rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(final boolean autoSync, final Class clazz, final Object rs) {
|
public <A> A register(final boolean autoSync, final Class<? extends A> clazz, final A rs) {
|
||||||
register(autoSync, "", clazz, rs);
|
return register(autoSync, "", clazz, rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(final Object rs) {
|
public <A> A register(final A rs) {
|
||||||
register(true, rs);
|
return register(true, rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(final boolean autoSync, final Object rs) {
|
public <A> A register(final boolean autoSync, final A rs) {
|
||||||
if (rs != null) register(autoSync, "", rs.getClass(), rs);
|
if (rs == null) return null;
|
||||||
|
return (A) register(autoSync, "", rs.getClass(), rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(final Type clazz, final ResourceLoader rs) {
|
public void add(final Type clazz, final ResourceLoader rs) {
|
||||||
@@ -131,32 +132,36 @@ public final class ResourceFactory {
|
|||||||
register(autoSync, name, double.class, value);
|
register(autoSync, name, double.class, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(final String name, final Object rs) {
|
public <A> A register(final String name, final A rs) {
|
||||||
register(true, name, rs);
|
return register(true, name, rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(final boolean autoSync, final String name, final Object rs) {
|
public <A> A register(final boolean autoSync, final String name, final A rs) {
|
||||||
final Class claz = rs.getClass();
|
final Class claz = rs.getClass();
|
||||||
ResourceType rtype = (ResourceType) claz.getAnnotation(ResourceType.class);
|
ResourceType rtype = (ResourceType) claz.getAnnotation(ResourceType.class);
|
||||||
if (rtype == null) {
|
if (rtype == null) {
|
||||||
register(autoSync, name, claz, rs);
|
return (A) register(autoSync, name, claz, rs);
|
||||||
} else {
|
} else {
|
||||||
|
A old = null;
|
||||||
for (Class cl : rtype.value()) {
|
for (Class cl : rtype.value()) {
|
||||||
register(autoSync, name, cl, rs);
|
A t = (A) register(autoSync, name, cl, rs);
|
||||||
|
if (t != null) old = t;
|
||||||
}
|
}
|
||||||
|
return old;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public <A> void register(final String name, final Class<? extends A> clazz, final A rs) {
|
public <A> A register(final String name, final Class<? extends A> clazz, final A rs) {
|
||||||
register(true, name, clazz, rs);
|
return register(true, name, clazz, rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <A> void register(final boolean autoSync, final String name, final Class<? extends A> clazz, final A rs) {
|
public <A> A register(final boolean autoSync, final String name, final Class<? extends A> clazz, final A rs) {
|
||||||
ConcurrentHashMap<String, ResourceEntry> map = this.store.get(clazz);
|
ConcurrentHashMap<String, ResourceEntry> map = this.store.get(clazz);
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
ConcurrentHashMap<String, ResourceEntry> sub = new ConcurrentHashMap();
|
ConcurrentHashMap<String, ResourceEntry> sub = new ConcurrentHashMap();
|
||||||
sub.put(name, new ResourceEntry(rs));
|
sub.put(name, new ResourceEntry(rs));
|
||||||
store.put(clazz, sub);
|
store.put(clazz, sub);
|
||||||
|
return null;
|
||||||
} else {
|
} else {
|
||||||
ResourceEntry re = map.get(name);
|
ResourceEntry re = map.get(name);
|
||||||
if (re == null) {
|
if (re == null) {
|
||||||
@@ -164,23 +169,22 @@ public final class ResourceFactory {
|
|||||||
} else {
|
} else {
|
||||||
map.put(name, new ResourceEntry(rs, re.elements, autoSync));
|
map.put(name, new ResourceEntry(rs, re.elements, autoSync));
|
||||||
}
|
}
|
||||||
|
return re == null ? null : (A) re.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public <A> void register(final String name, final Type clazz, final A rs) {
|
public <A> A register(final String name, final Type clazz, final A rs) {
|
||||||
register(true, name, clazz, rs);
|
return register(true, name, clazz, rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <A> void register(final boolean autoSync, final String name, final Type clazz, final A rs) {
|
public <A> A register(final boolean autoSync, final String name, final Type clazz, final A rs) {
|
||||||
if (clazz instanceof Class) {
|
if (clazz instanceof Class) return register(autoSync, name, (Class<A>) clazz, rs);
|
||||||
register(autoSync, name, (Class) clazz, rs);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ConcurrentHashMap<String, ResourceEntry> map = this.gencstore.get(clazz);
|
ConcurrentHashMap<String, ResourceEntry> map = this.gencstore.get(clazz);
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
ConcurrentHashMap<String, ResourceEntry> sub = new ConcurrentHashMap();
|
ConcurrentHashMap<String, ResourceEntry> sub = new ConcurrentHashMap();
|
||||||
sub.put(name, new ResourceEntry(rs));
|
sub.put(name, new ResourceEntry(rs));
|
||||||
gencstore.put(clazz, sub);
|
gencstore.put(clazz, sub);
|
||||||
|
return null;
|
||||||
} else {
|
} else {
|
||||||
ResourceEntry re = map.get(name);
|
ResourceEntry re = map.get(name);
|
||||||
if (re == null) {
|
if (re == null) {
|
||||||
@@ -188,6 +192,7 @@ public final class ResourceFactory {
|
|||||||
} else {
|
} else {
|
||||||
map.put(name, new ResourceEntry(rs, re.elements, autoSync));
|
map.put(name, new ResourceEntry(rs, re.elements, autoSync));
|
||||||
}
|
}
|
||||||
|
return re == null ? null : (A) re.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,6 +215,37 @@ public final class ResourceFactory {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <A> List<A> query(Class<? extends A> clazz) {
|
||||||
|
return query(new ArrayList<A>(), clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
private <A> List<A> query(final List<A> list, Class<? extends A> clazz) {
|
||||||
|
Map<String, ResourceEntry> map = this.store.get(clazz);
|
||||||
|
if (map != null) {
|
||||||
|
for (ResourceEntry re : map.values()) {
|
||||||
|
if (re.value != null) list.add((A) re.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (parent != null) query(list, clazz);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <A> List<A> query(Type clazz) {
|
||||||
|
return query(new ArrayList<A>(), clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
private <A> List<A> query(final List<A> list, Type clazz) {
|
||||||
|
if (clazz instanceof Class) return query(list, (Class) clazz);
|
||||||
|
Map<String, ResourceEntry> map = this.gencstore.get(clazz);
|
||||||
|
if (map != null) {
|
||||||
|
for (ResourceEntry re : map.values()) {
|
||||||
|
if (re.value != null) list.add((A) re.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (parent != null) query(list, clazz);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
public <A> A find(String name, Class<? extends A> clazz) {
|
public <A> A find(String name, Class<? extends A> clazz) {
|
||||||
ResourceEntry<A> re = findEntry(name, clazz);
|
ResourceEntry<A> re = findEntry(name, clazz);
|
||||||
return re == null ? null : re.value;
|
return re == null ? null : re.value;
|
||||||
|
|||||||
Reference in New Issue
Block a user