/*******************************************************************************
* Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
* 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 hydrograph.engine.component.mapping;
import hydrograph.engine.jaxb.commontypes.TypeBaseComponent;
public enum ComponentAdapterMapping {
TEXTFILEDELIMITED(ComponentType.TEXTFILEDELIMITED),
TEXTFILEFIXEDWIDTH(ComponentType.TEXTFILEFIXEDWIDTH),
TEXTFILEMIXEDSCHEME(ComponentType.TEXTFILEMIXEDSCHEME),
GENERATERECORD(ComponentType.GENERATERECORD),
SEQUENCEINPUTFILE(ComponentType.SEQUENCEINPUTFILE),
SEQUENCEOUTPUTFILE(ComponentType.SEQUENCEOUTPUTFILE),
REMOVEDUPS(ComponentType.REMOVEDUPS),
UNIONALL(ComponentType.UNIONALL),
CLONE(ComponentType.CLONE),
LIMIT(ComponentType.LIMIT),
SORT(ComponentType.SORT),
FILTER(ComponentType.FILTER),
AGGREGATE(ComponentType.AGGREGATE),
CUMULATE(ComponentType.CUMULATE),
TRANSFORM(ComponentType.TRANSFORM),
JOIN(ComponentType.JOIN),
LOOKUP(ComponentType.LOOKUP),
GENERATESEQUENCE(ComponentType.GENERATESEQUENCE),
NORMALIZE(ComponentType.NORMALIZE),
PARTITIONBYEXPRESSION(ComponentType.PARTITIONBYEXPRESSION),
DISCARD(ComponentType.DISCARD),
RUNPROGRAM(ComponentType.RUNPROGRAM),
HPLSQL(ComponentType.HPLSQL),AVROFILE(ComponentType.AVROFILE),
HIVETEXTFILE(ComponentType.HIVETEXTFILE),
PARQUETHIVEFILE(ComponentType.PARQUETHIVEFILE),
PARQUETFILE(ComponentType.PARQUETFILE),
MYSQL(ComponentType.MYSQL),
REDSHIFT(ComponentType.REDSHIFT),
ORACLE(ComponentType.ORACLE);
private final ComponentType componentType;
ComponentAdapterMapping(ComponentType componentType) {
this.componentType = componentType;
}
private enum ComponentType {
TEXTFILEDELIMITED {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("TextFileDelimited")) {
return ADAPTER_PACKAGE + ".InputFileDelimitedAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputFileDelimitedAdapter";
}
}
},
TEXTFILEFIXEDWIDTH {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("TextFileFixedWidth")) {
return ADAPTER_PACKAGE + ".InputFileFixedWidthAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputFileFixedWidthAdapter";
}
}
},
TEXTFILEMIXEDSCHEME{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("TextFileMixedScheme")) {
return ADAPTER_PACKAGE + ".InputFileMixedSchemeAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputFileMixedSchemeAdapter";
}
}
},
GENERATERECORD{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".GenerateRecordAdapter";
}
},
SEQUENCEINPUTFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".InputFileSequenceFormatAdapter";
}
},
SEQUENCEOUTPUTFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".OutputFileSequenceFormatAdapter";
}
},
REMOVEDUPS{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".RemoveDupsAdapter";
}
},
UNIONALL{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".UnionAllAdapter";
}
},
CLONE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".CloneAdapter";
}
},
LIMIT{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".LimitAdapter";
}
},
SORT{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".SortAdapter";
}
},
FILTER{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".FilterAdapter";
}
},
AGGREGATE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".AggregateAdapter";
}
},
CUMULATE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".CumulateAdapter";
}
},
TRANSFORM{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".TransformAdapter";
}
},
JOIN{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".JoinAdapter";
}
},
HASHJOIN{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".HashJoinAdapter";
}
},
LOOKUP{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".LookupAdapter";
}
},
GENERATESEQUENCE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".UniqueSequenceAdapter";
}
},
NORMALIZE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".NormalizeAdapter";
}
},
PARTITIONBYEXPRESSION{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".PartitionByExpressionAdapter";
}
},
DISCARD{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".DiscardAdapter";
}
},
RUNPROGRAM{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".RunProgramAdapter";
}
},
HPLSQL{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return ADAPTER_PACKAGE + ".HplSqlComponentGenerator";
}
},
AVROFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("AvroFile")) {
return ADAPTER_PACKAGE + ".InputFileAvroAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputFileAvroAdapter";
}
}
},
HIVETEXTFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("HiveTextFile")) {
return ADAPTER_PACKAGE + ".InputFileHiveTextAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputFileHiveTextAdapter";
}
}
},
PARQUETHIVEFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("ParquetHiveFile")) {
return ADAPTER_PACKAGE + ".InputFileHiveParquetAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputFileHiveParquetAdapter";
}
}
},
PARQUETFILE {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("ParquetFile")) {
return ADAPTER_PACKAGE + ".InputFileParquetAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputFileParquetAdapter";
}
}
},
MYSQL {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("Mysql")) {
return ADAPTER_PACKAGE + ".InputMysqlAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputMysqlAdapter";
}
}
},
REDSHIFT {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("Redshift")) {
return ADAPTER_PACKAGE + ".InputRedShiftAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputRedShiftAdapter";
}
}
},
ORACLE {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("Oracle")) {
return ADAPTER_PACKAGE + ".InputOracleAdapter";
} else {
return ADAPTER_PACKAGE + ".OutputOracleAdapter";
}
}
};
private static final String ADAPTER_PACKAGE = "hydrograph.engine.adapters";
abstract String getMapping(TypeBaseComponent typeBaseComponent);
}
public String getMappingType(TypeBaseComponent typeBaseComponent) {
return componentType.getMapping(typeBaseComponent);
}
}