With IterableObjectHelper component it is possible to retrieve items from map by using placeholder or not. To use this component we must add the following dependency to our pom.xml:
<dependency> <groupId>org.burningwave</groupId> <artifactId>core</artifactId> <version>12.64.3</version> </dependency>
… And to use Burningwave Core as a Java module, add the following to your module-info.java
:
requires org.burningwave.core;
In the following example we are going to show how to retrieve strings or objects from burningwave.properties file and from maps. burningwave.properties file:
code-block-1=\ ${code-block-2}\ return (T)Date.from(zonedDateTime.toInstant()); code-block-2=\ LocalDateTime localDateTime = (LocalDateTime)parameter[0];\ ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
Let’s take a look at the code now:
import static org.burningwave.core.assembler.StaticComponentContainer.IterableObjectHelper; import java.io.IOException; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.burningwave.core.assembler.ComponentContainer; import org.burningwave.core.assembler.ComponentSupplier; import org.burningwave.core.io.PathHelper; import org.burningwave.core.iterable.IterableObjectHelper.ResolveConfig; @SuppressWarnings("unused") public class ItemFromMapRetriever { public void execute() throws IOException { ComponentSupplier componentSupplier = ComponentContainer.getInstance(); PathHelper pathHelper = componentSupplier.getPathHelper(); Properties properties = new Properties(); properties.load(pathHelper.getResourceAsStream("burningwave.properties")); String code = IterableObjectHelper.resolveStringValue( ResolveConfig.forNamedKey("code-block-1") .on(properties) ); Map<Object, Object> map = new HashMap<>(); map.put("class-loader-01", "${class-loader-02}"); map.put("class-loader-02", "${class-loader-03}"); map.put("class-loader-03", Thread.currentThread().getContextClassLoader().getParent()); ClassLoader parentClassLoader = IterableObjectHelper.resolveValue( ResolveConfig.forNamedKey("class-loader-01") .on(map) ); map.clear(); map.put("class-loaders", "${class-loader-02};${class-loader-03};"); map.put("class-loader-02", Thread.currentThread().getContextClassLoader()); map.put("class-loader-03", Thread.currentThread().getContextClassLoader().getParent()); Collection<ClassLoader> classLoaders = IterableObjectHelper.resolveValues( ResolveConfig.forNamedKey("class-loaders") .on(map) .withValuesSeparator(";") ); } public static void main(String[] args) throws IOException { new ItemFromMapRetriever().execute(); } }
BackgroundExecutor
ClassFactory
ClassHunter
- In depth look to and configuration guide
- USE CASE: how to retrieve all classes of the classpath
- USE CASE: how to retrieve all classes that implement one or more interfaces
- USE CASE: finding all classes that extend a base class
- USE CASE: how to find all classes in a package
- USE CASE: Finding all classes for module name (Java 9 and later)
- USE CASE: finding all annotated classes
- USE CASE: how to scan classes for specific annotations and collect their values
- USE CASE: how to search for all classes with a constructor that takes a specific type as first parameter and with at least 2 methods that begin for a given string
- USE CASE: how to search for all classes with methods whose name begins for a given string and that takes a specific type as its first parameter
- USE CASE: finding all classes that have at least 2 protected fields
ClassPathHunter
CodeExecutor
FileSystemItem
FunctionalInterfaceFactory
IterableObjectHelper
JavaMemoryCompiler
PropertyAccessor
UnitSourceGenerator