Skip to content

Commit

Permalink
feat: create BeanManager and BeanProcessor and base everything around…
Browse files Browse the repository at this point in the history
… them
  • Loading branch information
mimbrero committed Jul 13, 2023
1 parent 0e933d0 commit e145ebd
Show file tree
Hide file tree
Showing 28 changed files with 483 additions and 573 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package st.networkers.rimor.params;

import st.networkers.rimor.annotation.RimorQualifier;
import st.networkers.rimor.params.parse.InstructionParamParser;

import java.lang.annotation.ElementType;
Expand All @@ -20,6 +21,7 @@
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@RimorQualifier
public @interface InstructionParam {

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package st.networkers.rimor.params;

import st.networkers.rimor.annotation.RimorQualifier;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
Expand All @@ -11,5 +13,6 @@
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@RimorQualifier
public @interface InstructionParams {
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
package st.networkers.rimor.params;

import st.networkers.rimor.extension.AbstractRimorExtension;
import st.networkers.rimor.Rimor;
import st.networkers.rimor.extension.RimorExtension;
import st.networkers.rimor.params.parse.support.BooleanInstructionParamParser;
import st.networkers.rimor.params.parse.support.DefaultInstructionParamParser;
import st.networkers.rimor.params.parse.support.EnumInstructionParamParser;
import st.networkers.rimor.params.parse.support.StringInstructionParamParser;

public class ParamsExtension extends AbstractRimorExtension {
public class ParamsExtension implements RimorExtension {

@Override
public void configure() {
registerProvider(new BooleanInstructionParamParser());
registerProvider(new DefaultInstructionParamParser());
registerProvider(new EnumInstructionParamParser());
registerProvider(new StringInstructionParamParser());
}

@Override
public void initialize() {
public void configure(Rimor rimor) {
rimor.registerProvider(new BooleanInstructionParamParser())
.registerProvider(new DefaultInstructionParamParser())
.registerProvider(new EnumInstructionParamParser())
.registerProvider(new StringInstructionParamParser());
}
}
112 changes: 27 additions & 85 deletions rimor/src/main/java/st/networkers/rimor/Rimor.java
Original file line number Diff line number Diff line change
@@ -1,91 +1,49 @@
package st.networkers.rimor;

import st.networkers.rimor.bean.BeanManager;
import st.networkers.rimor.command.CommandRegistry;
import st.networkers.rimor.command.CommandResolver;
import st.networkers.rimor.command.RimorCommand;
import st.networkers.rimor.execute.CommandExecutor;
import st.networkers.rimor.execute.DefaultCommandExecutor;
import st.networkers.rimor.extension.ExtensionManager;
import st.networkers.rimor.extension.ExtensionManagerImpl;
import st.networkers.rimor.extension.RimorExtension;
import st.networkers.rimor.extension.SupportExtension;
import st.networkers.rimor.inject.RimorInjector;
import st.networkers.rimor.inject.RimorInjectorImpl;
import st.networkers.rimor.inject.provide.support.OptionalProvider;
import st.networkers.rimor.resolve.PathResolverImpl;
import st.networkers.rimor.inject.provide.ProviderRegistry;
import st.networkers.rimor.inject.provide.RimorProvider;
import st.networkers.rimor.resolve.PathResolver;

import java.util.Objects;

public class Rimor {

private final RimorInjector injector;

private final BeanManager beanManager;
private final CommandRegistry commandRegistry;
private final CommandExecutor commandExecutor;
private final ExtensionManager extensionManager;
private final ProviderRegistry providerRegistry;

private final CommandExecutor commandExecutor;
private final CommandResolver commandResolver;
private final PathResolver pathResolver;
private final RimorInjector injector;

private boolean initialized = false;

public Rimor() {
this(new ProviderRegistry());
}

public Rimor(ProviderRegistry providerRegistry) {
this(new RimorInjectorImpl(providerRegistry), providerRegistry);
}

public Rimor(RimorInjector injector, ProviderRegistry providerRegistry) {
this(injector, new CommandRegistry(), new ExtensionManagerImpl(), providerRegistry,
new DefaultCommandExecutor(injector), new CommandResolver(), new PathResolverImpl());
}

public Rimor(RimorInjector injector, CommandRegistry commandRegistry, ExtensionManager extensionManager,
ProviderRegistry providerRegistry, CommandExecutor commandExecutor, CommandResolver commandResolver,
PathResolver pathResolver) {
this.injector = injector;
public Rimor(BeanManager beanManager, CommandRegistry commandRegistry, CommandExecutor commandExecutor,
ExtensionManager extensionManager, ProviderRegistry providerRegistry, PathResolver pathResolver,
RimorInjector injector) {
this.beanManager = beanManager;
this.commandRegistry = commandRegistry;
this.commandExecutor = commandExecutor;
this.extensionManager = extensionManager;
this.providerRegistry = providerRegistry;
this.commandExecutor = commandExecutor;
this.commandResolver = commandResolver;
this.pathResolver = pathResolver;
this.injector = injector;

this.registerProvider(new OptionalProvider(injector));
this.registerExtension(new SupportExtension());
}

/**
* Registers the given {@link RimorCommand}.
*
* @param command the command to register
*/
public Rimor registerCommand(RimorCommand command) {
Objects.requireNonNull(command);
commandRegistry.registerCommand(commandResolver.resolve(command));
return this;
}

/**
* Registers the given {@link RimorCommand}s.
*
* @param commands the commands to register
*/
public Rimor registerCommands(RimorCommand... commands) {
Objects.requireNonNull(commands);
for (RimorCommand command : commands)
this.registerCommand(command);
public Rimor register(Object bean) {
this.beanManager.processBean(bean);
return this;
}

/**
* Registers the given {@link RimorProvider}.
*
* @param provider the provider to register into the injector
* @param provider the provider to register
*/
public Rimor registerProvider(RimorProvider<?> provider) {
this.providerRegistry.register(provider);
Expand All @@ -95,7 +53,7 @@ public Rimor registerProvider(RimorProvider<?> provider) {
/**
* Registers the given {@link RimorProvider}s.
*
* @param providers the providers to register into the injector
* @param providers the providers to register
*/
public Rimor registerProviders(RimorProvider<?>... providers) {
for (RimorProvider<?> provider : providers)
Expand All @@ -114,7 +72,7 @@ public Rimor registerExtension(RimorExtension extension) {
}

/**
* Registers the given {@link RimorExtension}.
* Registers the given {@link RimorExtension}s.
*
* @param extensions the extensions to register
*/
Expand All @@ -124,30 +82,18 @@ public Rimor registerExtensions(RimorExtension... extensions) {
return this;
}

/**
* Initializes all the registered extensions.
*/
public Rimor initialize() {
if (this.isInitialized())
throw new IllegalStateException("this Rimor instance has already been initialized!");

this.extensionManager.initialize();
this.initialized = true;
return this;
}

public boolean isInitialized() {
return initialized;
}

public RimorInjector getInjector() {
return injector;
public BeanManager getBeanManager() {
return beanManager;
}

public CommandRegistry getCommandRegistry() {
return commandRegistry;
}

public CommandExecutor getCommandExecutor() {
return commandExecutor;
}

public ExtensionManager getExtensionManager() {
return extensionManager;
}
Expand All @@ -156,15 +102,11 @@ public ProviderRegistry getProviderRegistry() {
return providerRegistry;
}

public CommandExecutor getCommandExecutor() {
return commandExecutor;
}

public CommandResolver getMappedCommandResolver() {
return commandResolver;
}

public PathResolver getPathResolver() {
return pathResolver;
}

public RimorInjector getInjector() {
return injector;
}
}
17 changes: 17 additions & 0 deletions rimor/src/main/java/st/networkers/rimor/bean/BeanManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package st.networkers.rimor.bean;

import java.util.ArrayList;
import java.util.Collection;

public class BeanManager {

private final Collection<BeanProcessor> beanProcessors = new ArrayList<>();

public void registerBeanProcessor(BeanProcessor beanProcessor) {
this.beanProcessors.add(beanProcessor);
}

public void processBean(Object bean) {
this.beanProcessors.forEach(beanProcessor -> beanProcessor.process(bean));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package st.networkers.rimor.bean;

/**
* Allows processing beans after they are registered into Rimor.
*/
public interface BeanProcessor {

void process(Object bean);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
*
* @see Command
*/
public abstract class AbstractRimorCommand implements RimorCommand {
public abstract class AbstractCommandDefinition implements CommandDefinition {

private final Collection<Object> subcommands = new ArrayList<>();

Expand Down
6 changes: 3 additions & 3 deletions rimor/src/main/java/st/networkers/rimor/command/Command.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@
* }
* </pre>
* <p>
* If you need to manually instantiate {@code MySubcommand}, make the parent command class extend {@link AbstractRimorCommand}
* and use {@link AbstractRimorCommand#registerSubcommand(Object)} in the constructor:
* If you need to manually instantiate {@code MySubcommand}, make the parent command class extend {@link AbstractCommandDefinition}
* and use {@link AbstractCommandDefinition#registerSubcommand(Object)} in the constructor:
* <pre>
* &#64;Command("myCommand")
* public class MyCommand extends AbstractRimorCommand {
* public class MyCommand extends AbstractCommandDefinition {
*
* public MyCommand() {
* registerSubcommand(new MySubcommand(new MyServiceImpl()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
* There is no need to implement this in order to define a command. This is only intended to allow registering
* subcommand instances. See the {@link Command} documentation for instructions on how to define a command.
*
* @see AbstractRimorCommand
* @see AbstractCommandDefinition
* @see Command
*/
public interface RimorCommand {
public interface CommandDefinition {

Collection<Object> getSubcommands();

Expand Down
Loading

0 comments on commit e145ebd

Please sign in to comment.