-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: use context instead of inject for our context stuff
- Loading branch information
Showing
34 changed files
with
286 additions
and
248 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
...src/main/java/st/networkers/rimor/params/parse/support/BooleanInstructionParamParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
...src/main/java/st/networkers/rimor/params/parse/support/DefaultInstructionParamParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
...ms/src/main/java/st/networkers/rimor/params/parse/support/EnumInstructionParamParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
.../src/main/java/st/networkers/rimor/params/parse/support/StringInstructionParamParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
...rc/test/java/st/networkers/rimor/params/parse/support/EnumInstructionParamParserTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
rimor/src/main/java/st/networkers/rimor/bean/BeanManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,27 @@ | ||
package st.networkers.rimor.bean; | ||
|
||
import st.networkers.rimor.context.provide.ExecutionContextProviderRegistry; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Collection; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
public class BeanManager { | ||
|
||
private final Collection<BeanProcessor> beanProcessors = new ArrayList<>(); | ||
|
||
private final Map<Object, ExecutionContextProviderRegistry> providerRegistries = new HashMap<>(); | ||
|
||
public void registerBeanProcessor(BeanProcessor beanProcessor) { | ||
this.beanProcessors.add(beanProcessor); | ||
} | ||
|
||
public void processBean(Object bean) { | ||
this.beanProcessors.forEach(beanProcessor -> beanProcessor.process(bean)); | ||
} | ||
|
||
public ExecutionContextProviderRegistry getProviderRegistry(Object bean) { | ||
return this.providerRegistries.get(bean); | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
...orkers/rimor/inject/ExecutionContext.java → ...rkers/rimor/context/ExecutionContext.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
47 changes: 47 additions & 0 deletions
47
rimor/src/main/java/st/networkers/rimor/context/ExecutionContextService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package st.networkers.rimor.context; | ||
|
||
import st.networkers.rimor.context.provide.ExecutionContextProvider; | ||
import st.networkers.rimor.reflect.CachedMethod; | ||
|
||
import java.util.Optional; | ||
|
||
/** | ||
* Provides an instance bound to a given {@link Token} from an {@link ExecutionContext} or a registered provider. | ||
*/ | ||
public interface ExecutionContextService { | ||
|
||
/** | ||
* Gets an {@link Optional} wrapping the object bound to the given {@link Token} from the given | ||
* {@link ExecutionContext}, if able. Otherwise, gets it from a registered {@link ExecutionContextProvider}, or | ||
* returns an empty {@code Optional} if there are no available {@code ExecutionContextProvider} for the | ||
* given {@code Token}. | ||
* | ||
* @param token the token to get its bound object | ||
* @param context the context of a command execution | ||
* @return an {@link Optional} wrapping the object bound to the token, or empty | ||
*/ | ||
<T> Optional<T> get(Token<T> token, ExecutionContext context); | ||
|
||
/** | ||
* Gets an {@link Optional} wrapping the object bound to the given {@link Token} from the given | ||
* {@link ExecutionContext}, if able. Otherwise, gets it from a registered {@link ExecutionContextProvider}, or | ||
* returns an empty {@code Optional} if there are no available {@code ExecutionContextProvider} for the | ||
* given {@code Token}. | ||
* | ||
* @param token the token to get its bound object | ||
* @param context the context of a command execution | ||
* @param bean the bean to use its local providers | ||
* @return an {@link Optional} wrapping the object bound to the token, or empty | ||
*/ | ||
<T> Optional<T> get(Token<T> token, ExecutionContext context, Object bean); | ||
|
||
/** | ||
* Invokes the given method injecting all its parameters following {@link #get(Token, ExecutionContext)} | ||
* | ||
* @param cachedMethod the method to invoke | ||
* @param instance an instance of the method's class to invoke it on, or {@code null} if static | ||
* @param context the context of a command execution | ||
* @return the result of executing the method | ||
*/ | ||
Object invokeMethod(CachedMethod cachedMethod, Object instance, ExecutionContext context); | ||
} |
58 changes: 58 additions & 0 deletions
58
rimor/src/main/java/st/networkers/rimor/context/ExecutionContextServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package st.networkers.rimor.context; | ||
|
||
import st.networkers.rimor.bean.BeanManager; | ||
import st.networkers.rimor.context.provide.ExecutionContextProviderRegistry; | ||
import st.networkers.rimor.reflect.CachedMethod; | ||
import st.networkers.rimor.reflect.CachedParameter; | ||
import st.networkers.rimor.util.OptionalUtils; | ||
import st.networkers.rimor.util.ReflectionUtils; | ||
|
||
import java.util.Optional; | ||
|
||
public class ExecutionContextServiceImpl implements ExecutionContextService { | ||
|
||
private final BeanManager beanManager; | ||
private final ExecutionContextProviderRegistry globalExecutionContextProviderRegistry; | ||
|
||
public ExecutionContextServiceImpl(BeanManager beanManager, ExecutionContextProviderRegistry globalExecutionContextProviderRegistry) { | ||
this.beanManager = beanManager; | ||
this.globalExecutionContextProviderRegistry = globalExecutionContextProviderRegistry; | ||
} | ||
|
||
@Override | ||
public <T> Optional<T> get(Token<T> token, ExecutionContext context) { | ||
return OptionalUtils.firstPresent( | ||
context.get(token), | ||
() -> this.fromProviderRegistry(globalExecutionContextProviderRegistry, token, context) | ||
); | ||
} | ||
|
||
@Override | ||
public <T> Optional<T> get(Token<T> token, ExecutionContext context, Object bean) { | ||
return OptionalUtils.firstPresent( | ||
context.get(token), | ||
() -> this.fromProviderRegistry(beanManager.getProviderRegistry(bean), token, context), | ||
() -> this.fromProviderRegistry(globalExecutionContextProviderRegistry, token, context) | ||
); | ||
} | ||
|
||
private <T> Optional<T> fromProviderRegistry(ExecutionContextProviderRegistry executionContextProviderRegistry, Token<T> token, ExecutionContext context) { | ||
return executionContextProviderRegistry.findFor(token).map(provider -> provider.get(token, context)); | ||
} | ||
|
||
@Override | ||
public Object invokeMethod(CachedMethod method, Object instance, ExecutionContext context) { | ||
return ReflectionUtils.invoke(method.getMethod(), instance, resolveParameters(method, context)); | ||
} | ||
|
||
private Object[] resolveParameters(CachedMethod method, ExecutionContext context) { | ||
Object[] parameters = new Object[method.getParameters().size()]; | ||
|
||
int i = 0; | ||
for (CachedParameter parameter : method.getParameters()) { | ||
parameters[i++] = this.get(ParameterToken.build(method, parameter), context).orElse(null); | ||
} | ||
|
||
return parameters; | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
...tworkers/rimor/inject/ParameterToken.java → ...workers/rimor/context/ParameterToken.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
...ava/st/networkers/rimor/inject/Token.java → ...va/st/networkers/rimor/context/Token.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.