All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mapfish.print.processor.Processor Maven / Gradle / Ivy

There is a newer version: 3.22.0
Show newest version
package org.mapfish.print.processor;

import com.google.common.collect.BiMap;
import org.mapfish.print.config.ConfigurationObject;

import java.util.concurrent.Callable;
import java.util.function.Supplier;
import javax.annotation.Nullable;

/**
 * Interface for processing input attributes.  A processor must NOT contain mutable state because a
 * single processor instance can be ran in multiple threads and one running processor must not interfere with
 * the running of the other instance.
 *
 * @param  A Java DTO input parameter object of the execute method.  The object properties are
 *         resolved by looking at the public fields in the object and setting those fields.  Only fields in
 *         the object itself will be inspected. Object is populated from the {@link
 *         org.mapfish.print.output.Values} object.
 * @param  A Java DTO output/return object from the execute method. properties will be put into
 *         the {@link org.mapfish.print.output.Values} object so other processor can access the values.
 */
public interface Processor extends ConfigurationObject {
    /**
     * MDC key for the job ID.
     */
    String MDC_JOB_ID_KEY = "job_id";

    /**
     * Get the class of the output type.  This is used when determining the outputs this processor produces.
     * 

* The public fields of the Processor will be the output of the processor and thus can be mapped * to inputs of another processor. */ Class getOutputType(); /** * Map the variable names to the processor inputs. */ @Nullable BiMap getInputMapperBiMap(); /** * Returns a new/clean instance of a parameter object. This instance's will be inspected using * reflection to find its public fields and the properties will be set from the {@link * org.mapfish.print.output.Values} object. *

* The way the properties will be looked up is to *
    *
  1. * take the bean property name *
  2. *
  3. * map it using the input mapper, (if the input mapper does not have a mapping for the property then the * unmapped property name is used) *
  4. *
  5. * Look up the property value in the {@link org.mapfish.print.output.Values} object using the mapped * property name *
  6. *
  7. * set the value on the instance created by this method. If the value is null an exception will be * thrown * UNLESS the {@link org.mapfish.print.parser.HasDefaultValue} annotation is on the field for * the property. *
  8. *
*

* The populated instance will be passed to the execute method. It is imperative that a new * instance is created each time because they will be used in a multi-threaded environment and thus the * same processor instance may be ran in multiple threads with different instances of the parameter * object. *

* It is important to realize that super classes will also be analyzed, so care must be had with * inheritance. */ @Nullable In createInputParameter(); /** * Perform the process on the input attributes. * * @param values A Java object whose public fields are populated from the {@link * org.mapfish.print.output.Values} object (which is used for transferring properties between * processors). * @param context The execution context for a print task. * @return A Java object whose public fields will be put into the {@link * org.mapfish.print.output.Values} object. The key in the * {@link org.mapfish.print.output.Values} * object is the name of the field or if there is a mapping in the {@link #getOutputMapperBiMap()} * map, the mapped name. The key is determined in a similar way as for the input object. */ @Nullable Out execute(In values, ExecutionContext context) throws Exception; /** * Map output from processor to the variable in the Jasper Report. */ @Nullable BiMap getOutputMapperBiMap(); /** * Get the prefix to apply to each input value. This provides a simple way to make all output values have * unique values. *

* If input prefix is non-null and non-empty (whitespace is removed) then the prefix will be prepended to * the normal name of the input value. *

*

* When a prefix is appended the normal name will be capitalized. For example: if the normal name is: * map and the prefix is page1 then the final name will be page1Map. *

*

* Note: If a mapping is in the {@link #getInputMapperBiMap()} then the prefix will be ignored for that * value and the un-prefixed name from the input mapper will be used directly. *

*

* Note: If a prefix has white space at the start or end it will be removed. *

*/ String getInputPrefix(); /** * Get the prefix to apply to each output value. This provides a simple way to make all output values * have unique values. *

* If output prefix is non-null and non-empty (whitespace is removed) then the prefix will be prepended to * the normal name of the output value. *

*

* When a prefix is appended the normal name will be capitalized. For example: if the normal name is: * map and the prefix is page1 then the final name will be page1Map. *

*

* Note: If a mapping is in the {@link #getOutputMapperBiMap()} then the prefix will be ignored for that * value and the un-prefixed name from the output mapper will be used directly. *

*

* Note: If a prefix has white space at the start or end it will be removed. *

*/ String getOutputPrefix(); /** * Create a string representing this processor. * * @param builder the builder to add the string to. * @param indent the number of steps of indent for this node * @param parent the parent node's name */ void toString(StringBuilder builder, int indent, String parent); /** * An execution context for a specific print task. */ interface ExecutionContext { /** * Throws a CancellationException if the job was cancelled. */ void stopIfCanceled(); /** * @return The ExecutionStats object */ ExecutionStats getStats(); /** * @return The job ID */ String getJobId(); /** * Set the MDC context while running the action. * * @param action The action to run * @param The returned class */ T mdcContext(Supplier action); /** * Set the MDC context while running the action. * * @param action The action to run * @param The returned class */ T mdcContextEx(Callable action) throws Exception; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy