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

com.univocity.parsers.common.processor.core.AbstractMultiBeanProcessor Maven / Gradle / Ivy

Go to download

univocity's open source parsers for processing different text formats using a consistent API

The newest version!
/*
 * Copyright (c) 2015. Univocity Software Pty Ltd
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.univocity.parsers.common.processor.core; import com.univocity.parsers.annotations.helpers.*; import com.univocity.parsers.common.*; import com.univocity.parsers.common.fields.*; import com.univocity.parsers.conversions.*; import java.util.*; /** * A {@link Processor} implementation for converting rows extracted from any implementation of {@link AbstractParser} into java objects. * *

The class types passed to the constructor of this class must contain the annotations provided in {@link com.univocity.parsers.annotations}. * *

For each row processed, one or more java bean instances of any given class will be created with their fields populated. *

Each individual instance will then be sent to the {@link AbstractMultiBeanProcessor#beanProcessed(Class, Object, Context)} method, where the user can access the * beans parsed for each row. * * @author Univocity Software Pty Ltd - [email protected] * @see AbstractParser * @see Processor * @see com.univocity.parsers.common.processor.BeanProcessor */ public abstract class AbstractMultiBeanProcessor implements Processor, ConversionProcessor { private final AbstractBeanProcessor[] beanProcessors; private final Map processorMap = new HashMap(); /** * Creates a processor for java beans of multiple types * * @param beanTypes the classes with their attributes mapped to fields of records parsed by an {@link AbstractParser} or written by an {@link AbstractWriter}. */ public AbstractMultiBeanProcessor(Class... beanTypes) { ArgumentUtils.noNulls("Bean types", beanTypes); this.beanProcessors = new AbstractBeanProcessor[beanTypes.length]; for (int i = 0; i < beanTypes.length; i++) { final Class type = beanTypes[i]; beanProcessors[i] = new AbstractBeanProcessor(type, MethodFilter.ONLY_SETTERS) { @Override public void beanProcessed(Object bean, C context) { AbstractMultiBeanProcessor.this.beanProcessed(type, bean, context); } }; processorMap.put(type, beanProcessors[i]); } } public final Class[] getBeanClasses() { Class[] classes = new Class[beanProcessors.length]; for (int i = 0; i < beanProcessors.length; i++) { classes[i] = beanProcessors[i].beanClass; } return classes; } /** * Returns the {@link com.univocity.parsers.common.processor.BeanProcessor} responsible for processing a given class * * @param type the type of java bean being processed * @param the type of java bean being processed * * @return the {@link com.univocity.parsers.common.processor.BeanProcessor} that handles java beans of the given class. */ public AbstractBeanProcessor getProcessorOfType(Class type) { AbstractBeanProcessor processor = processorMap.get(type); if (processor == null) { throw new IllegalArgumentException("No processor of type '" + type.getName() + "' is available. Supported types are: " + processorMap.keySet()); } return processor; } /** * Invoked by the processor after all values of a valid record have been processed and converted into a java object. * * @param beanType the type of the object created by the parser using the information collected for an individual record. * @param beanInstance java object created with the information extracted by the parser for an individual record. * @param context A contextual object with information and controls over the current state of the parsing process */ public abstract void beanProcessed(Class beanType, Object beanInstance, C context); @Override public void processStarted(C context) { for (int i = 0; i < beanProcessors.length; i++) { beanProcessors[i].processStarted(context); } } @Override public final void rowProcessed(String[] row, C context) { for (int i = 0; i < beanProcessors.length; i++) { beanProcessors[i].rowProcessed(row, context); } } @Override public void processEnded(C context) { for (int i = 0; i < beanProcessors.length; i++) { beanProcessors[i].processEnded(context); } } @Override public FieldSet convertIndexes(Conversion... conversions) { List> sets = new ArrayList>(beanProcessors.length); for (int i = 0; i < beanProcessors.length; i++) { sets.add(beanProcessors[i].convertIndexes(conversions)); } return new FieldSet(sets); } @Override public void convertAll(Conversion... conversions) { for (int i = 0; i < beanProcessors.length; i++) { beanProcessors[i].convertAll(conversions); } } @Override public FieldSet convertFields(Conversion... conversions) { List> sets = new ArrayList>(beanProcessors.length); for (int i = 0; i < beanProcessors.length; i++) { sets.add(beanProcessors[i].convertFields(conversions)); } return new FieldSet(sets); } @Override public void convertType(Class type, Conversion... conversions) { for (int i = 0; i < beanProcessors.length; i++) { beanProcessors[i].convertType(type, conversions); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy