Callable toCallable(InternalContext context,
InternalFactory factory) {
< T > InternalFactory< ? extends T > scopeFactory(Class< T > type, String name,
InternalFactory< ? extends T > factory) {
return factory;
}
< T > InternalFactory< ? extends T > scopeFactory(Class< T > type, String name,
final InternalFactory< ? extends T > factory) {
return new InternalFactory< T >() {
T instance;
public T create(InternalContext context) {
synchronized (context.getContainer()) {
if (instance == null) {
instance = factory.create(context);
}
return instance;
}
}
public String toString() {
return factory.toString();
}
};
}
< T > InternalFactory< ? extends T > scopeFactory(Class< T > type, String name,
final InternalFactory< ? extends T > factory) {
return new InternalFactory< T >() {
final ThreadLocal< T > threadLocal = new ThreadLocal< T >();
public T create(final InternalContext context) {
T t = threadLocal.get();
if (t == null) {
t = factory.create(context);
threadLocal.set(t);
}
return t;
}
public String toString() {
return factory.toString();
}
};
}
< T > InternalFactory< ? extends T > scopeFactory(final Class< T > type,
final String name, final InternalFactory< ? extends T > factory) {
return new InternalFactory< T >() {
public T create(InternalContext context) {
Strategy strategy = context.getScopeStrategy();
try {
return strategy.findInRequest(
type, name, toCallable(context, factory));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String toString() {
return factory.toString();
}
};
}
< T > InternalFactory< ? extends T > scopeFactory(final Class< T > type,
final String name, final InternalFactory< ? extends T > factory) {
return new InternalFactory< T >() {
public T create(InternalContext context) {
Strategy strategy = context.getScopeStrategy();
try {
return strategy.findInSession(
type, name, toCallable(context, factory));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String toString() {
return factory.toString();
}
};
}
< T > InternalFactory< ? extends T > scopeFactory(final Class< T > type,
final String name, final InternalFactory< ? extends T > factory) {
return new InternalFactory< T >() {
public T create(InternalContext context) {
Strategy strategy = context.getScopeStrategy();
try {
return strategy.findInWizard(
type, name, toCallable(context, factory));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String toString() {
return factory.toString();
}
};
}
return new Callable< T >() {
public T call() throws Exception {
return factory.create(context);
}
};
}
|