Class ResourceProcessor


  • public class ResourceProcessor
    extends java.lang.Object
    A processor class that provides a comprehensive and exception-safe mechanism for handling resources during annotation processing. It extends the capabilities of the FilerProcessor to manage both reading from and writing to resources using various I/O operations. This class abstracts away boilerplate code required for resource management, including opening/closing streams, handling exceptions, and caching accessed file objects to avoid redundant operations.

    It supports functional-style interaction with resources through callback interfaces like ThrowableFunction, allowing custom logic to be applied on resources such as reading content, writing data, or manipulating streams in a type-safe manner.

    The class also maintains an internal cache of accessed file objects to optimize performance by avoiding repeated calls to locate or create them. It handles both input (read) and output (write) operations seamlessly, offering convenience methods for common use cases like: - Processing resources via InputStream or Reader - Manipulating resources via OutputStream or Writer - Reading or modifying the content directly as CharSequence

    Example Usage

     // Creating an instance of ResourceProcessor
     ResourceProcessor resourceProcessor = new ResourceProcessor(processingEnv, StandardLocation.SOURCE_OUTPUT);
    
     // Reading content from a resource
     Optional content = resourceProcessor.processInResourceContent("example.txt", CharBuffer::toString);
    
     // Writing to a resource
     resourceProcessor.processInResourceWriter("output.txt", writer -> {
         writer.write("Hello, World!");
     });
    
     // Processing an InputStream
     resourceProcessor.processInResourceInputStream("data.bin", inputStream -> {
         // Process binary data
         return null;
     });
     
    Since:
    1.0.0
    Author:
    Mercy
    See Also:
    FilerProcessor
    • Constructor Summary

      Constructors 
      Constructor Description
      ResourceProcessor​(javax.annotation.processing.ProcessingEnvironment processingEnv, javax.tools.JavaFileManager.Location location)  
      ResourceProcessor​(javax.annotation.processing.ProcessingEnvironment processingEnv, javax.tools.JavaFileManager.Location location, java.lang.CharSequence moduleAndPackage)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static boolean exists​(javax.tools.FileObject resource)  
      java.util.Optional<javax.tools.FileObject> getResource​(java.lang.String resourceName, boolean forWriting)  
      <T> T processInResource​(java.lang.String resourceName, boolean forWriting, io.microsphere.lang.function.ThrowableFunction<java.util.Optional<javax.tools.FileObject>,​T> resourceCallback)  
      <T> T processInResource​(java.lang.String resourceName, boolean forWriting, io.microsphere.lang.function.ThrowableFunction<java.util.Optional<javax.tools.FileObject>,​T> resourceCallback, java.util.function.Function<java.lang.Throwable,​T> exceptionHandler)  
      <T> java.util.Optional<T> processInResourceContent​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableFunction<java.lang.CharSequence,​T> contentCallback)  
      <T> java.util.Optional<T> processInResourceContent​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableFunction<java.lang.CharSequence,​T> contentCallback, java.util.function.BiFunction<javax.tools.FileObject,​java.lang.Throwable,​T> exceptionHandler)  
      <T> java.util.Optional<T> processInResourceInputStream​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableFunction<java.io.InputStream,​T> streamCallback)  
      <T> java.util.Optional<T> processInResourceInputStream​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableFunction<java.io.InputStream,​T> streamCallback, java.util.function.BiFunction<javax.tools.FileObject,​java.lang.Throwable,​T> exceptionHandler)  
      void processInResourceOutputStream​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableConsumer<java.io.OutputStream> streamConsumer)  
      void processInResourceOutputStream​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableConsumer<java.io.OutputStream> streamConsumer, java.util.function.BiConsumer<javax.tools.FileObject,​java.lang.Throwable> exceptionHandler)  
      <T> java.util.Optional<T> processInResourceReader​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableFunction<java.io.Reader,​T> readerCallback)  
      <T> java.util.Optional<T> processInResourceReader​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableFunction<java.io.Reader,​T> readerCallback, java.util.function.BiFunction<javax.tools.FileObject,​java.lang.Throwable,​T> exceptionHandler)  
      void processInResourceWriter​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableConsumer<java.io.Writer> writerConsumer)  
      void processInResourceWriter​(java.lang.String resourceName, io.microsphere.lang.function.ThrowableConsumer<java.io.Writer> writerConsumer, java.util.function.BiConsumer<javax.tools.FileObject,​java.lang.Throwable> exceptionHandler)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ResourceProcessor

        public ResourceProcessor​(javax.annotation.processing.ProcessingEnvironment processingEnv,
                                 javax.tools.JavaFileManager.Location location)
      • ResourceProcessor

        public ResourceProcessor​(javax.annotation.processing.ProcessingEnvironment processingEnv,
                                 javax.tools.JavaFileManager.Location location,
                                 java.lang.CharSequence moduleAndPackage)
    • Method Detail

      • processInResource

        public <T> T processInResource​(java.lang.String resourceName,
                                       boolean forWriting,
                                       io.microsphere.lang.function.ThrowableFunction<java.util.Optional<javax.tools.FileObject>,​T> resourceCallback)
      • processInResource

        public <T> T processInResource​(java.lang.String resourceName,
                                       boolean forWriting,
                                       io.microsphere.lang.function.ThrowableFunction<java.util.Optional<javax.tools.FileObject>,​T> resourceCallback,
                                       java.util.function.Function<java.lang.Throwable,​T> exceptionHandler)
      • getResource

        public java.util.Optional<javax.tools.FileObject> getResource​(java.lang.String resourceName,
                                                                      boolean forWriting)
      • processInResourceInputStream

        public <T> java.util.Optional<T> processInResourceInputStream​(java.lang.String resourceName,
                                                                      io.microsphere.lang.function.ThrowableFunction<java.io.InputStream,​T> streamCallback)
      • processInResourceInputStream

        public <T> java.util.Optional<T> processInResourceInputStream​(java.lang.String resourceName,
                                                                      io.microsphere.lang.function.ThrowableFunction<java.io.InputStream,​T> streamCallback,
                                                                      java.util.function.BiFunction<javax.tools.FileObject,​java.lang.Throwable,​T> exceptionHandler)
      • processInResourceReader

        public <T> java.util.Optional<T> processInResourceReader​(java.lang.String resourceName,
                                                                 io.microsphere.lang.function.ThrowableFunction<java.io.Reader,​T> readerCallback)
      • processInResourceReader

        public <T> java.util.Optional<T> processInResourceReader​(java.lang.String resourceName,
                                                                 io.microsphere.lang.function.ThrowableFunction<java.io.Reader,​T> readerCallback,
                                                                 java.util.function.BiFunction<javax.tools.FileObject,​java.lang.Throwable,​T> exceptionHandler)
      • processInResourceContent

        public <T> java.util.Optional<T> processInResourceContent​(java.lang.String resourceName,
                                                                  io.microsphere.lang.function.ThrowableFunction<java.lang.CharSequence,​T> contentCallback)
      • processInResourceContent

        public <T> java.util.Optional<T> processInResourceContent​(java.lang.String resourceName,
                                                                  io.microsphere.lang.function.ThrowableFunction<java.lang.CharSequence,​T> contentCallback,
                                                                  java.util.function.BiFunction<javax.tools.FileObject,​java.lang.Throwable,​T> exceptionHandler)
      • processInResourceOutputStream

        public void processInResourceOutputStream​(java.lang.String resourceName,
                                                  io.microsphere.lang.function.ThrowableConsumer<java.io.OutputStream> streamConsumer)
      • processInResourceOutputStream

        public void processInResourceOutputStream​(java.lang.String resourceName,
                                                  io.microsphere.lang.function.ThrowableConsumer<java.io.OutputStream> streamConsumer,
                                                  java.util.function.BiConsumer<javax.tools.FileObject,​java.lang.Throwable> exceptionHandler)
      • processInResourceWriter

        public void processInResourceWriter​(java.lang.String resourceName,
                                            io.microsphere.lang.function.ThrowableConsumer<java.io.Writer> writerConsumer)
      • processInResourceWriter

        public void processInResourceWriter​(java.lang.String resourceName,
                                            io.microsphere.lang.function.ThrowableConsumer<java.io.Writer> writerConsumer,
                                            java.util.function.BiConsumer<javax.tools.FileObject,​java.lang.Throwable> exceptionHandler)
      • exists

        public static boolean exists​(javax.tools.FileObject resource)