/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.camel.model.dataformat;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.camel.CamelContext;
import org.apache.camel.model.DataFormatDefinition;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RouteContext;
import org.apache.camel.util.CamelContextHelper;
import org.apache.camel.util.ObjectHelper;
/**
* Flatpack data format
*/
@Metadata(firstVersion = "2.1.0", label = "dataformat,transformation,csv", title = "Flatpack")
@XmlRootElement(name = "flatpack")
@XmlAccessorType(XmlAccessType.FIELD)
public class FlatpackDataFormat extends DataFormatDefinition {
@XmlAttribute
private String parserFactoryRef;
@XmlAttribute
private String definition;
@XmlAttribute
private Boolean fixed;
@XmlAttribute @Metadata(defaultValue = "true")
private Boolean ignoreFirstRecord;
@XmlAttribute @Metadata(defaultValue = "\"")
private String textQualifier;
@XmlAttribute @Metadata(defaultValue = ",")
private String delimiter;
@XmlAttribute
private Boolean allowShortLines;
@XmlAttribute
private Boolean ignoreExtraColumns;
public FlatpackDataFormat() {
super("flatpack");
}
public String getParserFactoryRef() {
return parserFactoryRef;
}
/**
* References to a custom parser factory to lookup in the registry
*/
public void setParserFactoryRef(String parserFactoryRef) {
this.parserFactoryRef = parserFactoryRef;
}
public String getDefinition() {
return definition;
}
/**
* The flatpack pzmap configuration file. Can be omitted in simpler situations, but its preferred to use the pzmap.
*/
public void setDefinition(String definition) {
this.definition = definition;
}
public Boolean getFixed() {
return fixed;
}
/**
* Delimited or fixed.
* Is by default false = delimited
*/
public void setFixed(Boolean fixed) {
this.fixed = fixed;
}
public Boolean getIgnoreFirstRecord() {
return ignoreFirstRecord;
}
/**
* Whether the first line is ignored for delimited files (for the column headers).
* <p/>
* Is by default true.
*/
public void setIgnoreFirstRecord(Boolean ignoreFirstRecord) {
this.ignoreFirstRecord = ignoreFirstRecord;
}
public String getTextQualifier() {
return textQualifier;
}
/**
* If the text is qualified with a char such as "
*/
public void setTextQualifier(String textQualifier) {
this.textQualifier = textQualifier;
}
public String getDelimiter() {
return delimiter;
}
/**
* The delimiter char (could be ; , or similar)
*/
public void setDelimiter(String delimiter) {
this.delimiter = delimiter;
}
public Boolean getAllowShortLines() {
return allowShortLines;
}
/**
* Allows for lines to be shorter than expected and ignores the extra characters
*/
public void setAllowShortLines(Boolean allowShortLines) {
this.allowShortLines = allowShortLines;
}
public Boolean getIgnoreExtraColumns() {
return ignoreExtraColumns;
}
/**
* Allows for lines to be longer than expected and ignores the extra characters.
*/
public void setIgnoreExtraColumns(Boolean ignoreExtraColumns) {
this.ignoreExtraColumns = ignoreExtraColumns;
}
@Override
protected DataFormat createDataFormat(RouteContext routeContext) {
DataFormat flatpack = super.createDataFormat(routeContext);
if (ObjectHelper.isNotEmpty(parserFactoryRef)) {
Object parserFactory = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), parserFactoryRef);
setProperty(routeContext.getCamelContext(), flatpack, "parserFactory", parserFactory);
}
return flatpack;
}
@Override
protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
if (ObjectHelper.isNotEmpty(definition)) {
setProperty(camelContext, dataFormat, "definition", definition);
}
if (fixed != null) {
setProperty(camelContext, dataFormat, "fixed", fixed);
}
if (ignoreFirstRecord != null) {
setProperty(camelContext, dataFormat, "ignoreFirstRecord", ignoreFirstRecord);
}
if (ObjectHelper.isNotEmpty(textQualifier)) {
if (textQualifier.length() > 1) {
throw new IllegalArgumentException("Text qualifier must be one character long!");
}
setProperty(camelContext, dataFormat, "textQualifier", textQualifier.charAt(0));
}
if (ObjectHelper.isNotEmpty(delimiter)) {
if (delimiter.length() > 1) {
throw new IllegalArgumentException("Delimiter must be one character long!");
}
setProperty(camelContext, dataFormat, "delimiter", delimiter.charAt(0));
}
if (allowShortLines != null) {
setProperty(camelContext, dataFormat, "allowShortLines", allowShortLines);
}
if (ignoreExtraColumns != null) {
setProperty(camelContext, dataFormat, "ignoreExtraColumns", ignoreExtraColumns);
}
}
}