/*******************************************************************************
* 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.cascading.assembly.utils;
import hydrograph.engine.jaxb.commontypes.TypeBaseComponent;
public enum ComponentAssemblyMapping {
TEXTFILEDELIMITED(AssemblyType.TEXTFILEDELIMITED),
TEXTFILEFIXEDWIDTH(AssemblyType.TEXTFILEFIXEDWIDTH),
TEXTFILEMIXEDSCHEME(AssemblyType.TEXTFILEMIXEDSCHEME),
GENERATERECORD(AssemblyType.GENERATERECORD),
SEQUENCEINPUTFILE(AssemblyType.SEQUENCEINPUTFILE),
SEQUENCEOUTPUTFILE(AssemblyType.SEQUENCEOUTPUTFILE),
REMOVEDUPS(AssemblyType.REMOVEDUPS),
UNIONALL(AssemblyType.UNIONALL),
CLONE(AssemblyType.CLONE),
LIMIT(AssemblyType.LIMIT),
SORT(AssemblyType.SORT),
FILTER(AssemblyType.FILTER),
AGGREGATE(AssemblyType.AGGREGATE),
CUMULATE(AssemblyType.CUMULATE),
TRANSFORM(AssemblyType.TRANSFORM),
JOIN(AssemblyType.JOIN),
LOOKUP(AssemblyType.LOOKUP),
GENERATESEQUENCE(AssemblyType.GENERATESEQUENCE),
NORMALIZE(AssemblyType.NORMALIZE),
PARTITIONBYEXPRESSION(AssemblyType.PARTITIONBYEXPRESSION),
DISCARD(AssemblyType.DISCARD),
RUNPROGRAM(AssemblyType.RUNPROGRAM),
HPLSQL(AssemblyType.HPLSQL),AVROFILE(AssemblyType.AVROFILE),
HIVETEXTFILE(AssemblyType.HIVETEXTFILE),
PARQUETHIVEFILE(AssemblyType.PARQUETHIVEFILE),
PARQUETFILE(AssemblyType.PARQUETFILE);
private final AssemblyType assemblyType;
ComponentAssemblyMapping(AssemblyType assemblyType) {
this.assemblyType = assemblyType;
}
private enum AssemblyType {
TEXTFILEDELIMITED {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("TextFileDelimited")) {
return GENERATOR + ".InputFileDelimitedAssemblyGenerator";
} else {
return GENERATOR + ".OutputFileDelimitedAssemblyGenerator";
}
}
},
TEXTFILEFIXEDWIDTH {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("TextFileFixedWidth")) {
return GENERATOR + ".InputFileFixedWidthAssemblyGenerator";
} else {
return GENERATOR + ".OutputFileFixedWidthAssemblyGenerator";
}
}
},
TEXTFILEMIXEDSCHEME{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("TextFileMixedScheme")) {
return GENERATOR + ".InputFileMixedSchemeAssemblyGenerator";
} else {
return GENERATOR + ".OutputFileMixedSchemeAssemblyGenerator";
}
}
},
GENERATERECORD{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".GenerateRecordAssemblyGenerator";
}
},
SEQUENCEINPUTFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".InputFileSequenceAssemblyGenerator";
}
},
SEQUENCEOUTPUTFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".OutputFileSequenceAssemblyGenerator";
}
},
REMOVEDUPS{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".RemoveDupsAssemblyGenerator";
}
},
UNIONALL{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".UnionAllAssemblyGenerator";
}
},
CLONE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".CloneAssemblyGenerator";
}
},
LIMIT{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".LimitAssemblyGenerator";
}
},
SORT{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".SortAssemblyGenerator";
}
},
FILTER{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".FilterAssemblyGenerator";
}
},
AGGREGATE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".AggregateAssemblyGenerator";
}
},
CUMULATE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".CumulateAssemblyGenerator";
}
},
TRANSFORM{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".TransformAssemblyGenerator";
}
},
JOIN{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".JoinAssemblyGenerator";
}
},
HASHJOIN{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".HashJoinAssemblyGenerator";
}
},
LOOKUP{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".LookupAssemblyGenerator";
}
},
GENERATESEQUENCE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".UniqueSequenceAssemblyGenerator";
}
},
NORMALIZE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".NormalizeAssemblyGenerator";
}
},
PARTITIONBYEXPRESSION{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".PartitionByExpressionAssemblyGenerator";
}
},
DISCARD{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".DiscardAssemblyGenerator";
}
},
RUNPROGRAM{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".RunProgramComponentGenerator";
}
},
HPLSQL{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
return GENERATOR + ".HplSqlComponentGenerator";
}
},
AVROFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("AvroFile")) {
return GENERATOR + ".InputFileAvroAssemblyGenerator";
} else {
return GENERATOR + ".OutputFileAvroAssemblyGenerator";
}
}
},
HIVETEXTFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("HiveTextFile")) {
return GENERATOR + ".InputFileHiveTextAssemblyGenerator";
} else {
return GENERATOR + ".OutputFileHiveTextAssemblyGenerator";
}
}
},
PARQUETHIVEFILE{
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("ParquetHiveFile")) {
return GENERATOR + ".InputFileHiveParquetAssemblyGenerator";
} else {
return GENERATOR + ".OutputFileHiveParquetAssemblyGenerator";
}
}
},
PARQUETFILE {
@Override
public String getMapping(TypeBaseComponent typeBaseComponent) {
if (typeBaseComponent.getClass().getCanonicalName().contains("inputtypes")
&& typeBaseComponent.getClass().getSimpleName().equals("ParquetFile")) {
return GENERATOR + ".InputFileParquetAssemblyGenerator";
} else {
return GENERATOR + ".OutputFileParquetAssemblyGenerator";
}
}
};
private static final String GENERATOR = "hydrograph.engine.cascading.assembly.generator";
abstract String getMapping(TypeBaseComponent typeBaseComponent);
}
public String getMappingType(TypeBaseComponent typeBaseComponent) {
return assemblyType.getMapping(typeBaseComponent);
}
}