From 9ddaa96ced4434c4781899440fa2fcb84af4541e Mon Sep 17 00:00:00 2001
From: wentch <22250530@qq.com>
Date: Wed, 27 Jan 2016 11:45:46 +0800
Subject: [PATCH]
---
src/org/redkale/util/ResourceFactory.java | 82 ++++++++++++++++-------
1 file changed, 59 insertions(+), 23 deletions(-)
diff --git a/src/org/redkale/util/ResourceFactory.java b/src/org/redkale/util/ResourceFactory.java
index 9a61f4b4d..04bfc8150 100644
--- a/src/org/redkale/util/ResourceFactory.java
+++ b/src/org/redkale/util/ResourceFactory.java
@@ -54,20 +54,21 @@ public final class ResourceFactory {
this.store.clear();
}
- public void register(final Class clazz, final Object rs) {
- register(true, clazz, rs);
+ public A register(final Class extends A> clazz, final A rs) {
+ return register(true, clazz, rs);
}
- public void register(final boolean autoSync, final Class clazz, final Object rs) {
- register(autoSync, "", clazz, rs);
+ public A register(final boolean autoSync, final Class extends A> clazz, final A rs) {
+ return register(autoSync, "", clazz, rs);
}
- public void register(final Object rs) {
- register(true, rs);
+ public A register(final A rs) {
+ return register(true, rs);
}
- public void register(final boolean autoSync, final Object rs) {
- if (rs != null) register(autoSync, "", rs.getClass(), rs);
+ public A register(final boolean autoSync, final A rs) {
+ if (rs == null) return null;
+ return (A) register(autoSync, "", rs.getClass(), rs);
}
public void add(final Type clazz, final ResourceLoader rs) {
@@ -131,32 +132,36 @@ public final class ResourceFactory {
register(autoSync, name, double.class, value);
}
- public void register(final String name, final Object rs) {
- register(true, name, rs);
+ public A register(final String name, final A rs) {
+ return register(true, name, rs);
}
- public void register(final boolean autoSync, final String name, final Object rs) {
+ public A register(final boolean autoSync, final String name, final A rs) {
final Class claz = rs.getClass();
ResourceType rtype = (ResourceType) claz.getAnnotation(ResourceType.class);
if (rtype == null) {
- register(autoSync, name, claz, rs);
+ return (A) register(autoSync, name, claz, rs);
} else {
+ A old = null;
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 void register(final String name, final Class extends A> clazz, final A rs) {
- register(true, name, clazz, rs);
+ public A register(final String name, final Class extends A> clazz, final A rs) {
+ return register(true, name, clazz, rs);
}
- public void register(final boolean autoSync, final String name, final Class extends A> clazz, final A rs) {
+ public A register(final boolean autoSync, final String name, final Class extends A> clazz, final A rs) {
ConcurrentHashMap map = this.store.get(clazz);
if (map == null) {
ConcurrentHashMap sub = new ConcurrentHashMap();
sub.put(name, new ResourceEntry(rs));
store.put(clazz, sub);
+ return null;
} else {
ResourceEntry re = map.get(name);
if (re == null) {
@@ -164,23 +169,22 @@ public final class ResourceFactory {
} else {
map.put(name, new ResourceEntry(rs, re.elements, autoSync));
}
+ return re == null ? null : (A) re.value;
}
}
- public void register(final String name, final Type clazz, final A rs) {
- register(true, name, clazz, rs);
+ public A register(final String name, final Type clazz, final A rs) {
+ return register(true, name, clazz, rs);
}
- public void register(final boolean autoSync, final String name, final Type clazz, final A rs) {
- if (clazz instanceof Class) {
- register(autoSync, name, (Class) clazz, rs);
- return;
- }
+ public A register(final boolean autoSync, final String name, final Type clazz, final A rs) {
+ if (clazz instanceof Class) return register(autoSync, name, (Class) clazz, rs);
ConcurrentHashMap map = this.gencstore.get(clazz);
if (map == null) {
ConcurrentHashMap sub = new ConcurrentHashMap();
sub.put(name, new ResourceEntry(rs));
gencstore.put(clazz, sub);
+ return null;
} else {
ResourceEntry re = map.get(name);
if (re == null) {
@@ -188,6 +192,7 @@ public final class ResourceFactory {
} else {
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;
}
+ public List query(Class extends A> clazz) {
+ return query(new ArrayList(), clazz);
+ }
+
+ private List query(final List list, Class extends A> clazz) {
+ Map 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 List query(Type clazz) {
+ return query(new ArrayList(), clazz);
+ }
+
+ private List query(final List list, Type clazz) {
+ if (clazz instanceof Class) return query(list, (Class) clazz);
+ Map 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 find(String name, Class extends A> clazz) {
ResourceEntry re = findEntry(name, clazz);
return re == null ? null : re.value;