use of io.atlasmap.v2.DataSource in project atlasmap by atlasmap.
the class AtlasEndpointTest method doConversionIfJsonDataSource.
@Test
public void doConversionIfJsonDataSource() throws Exception {
final List<DataSource> dataSources = new ArrayList<>();
final DataSource dataSource = new DataSource();
dataSource.setDataSourceType(DataSourceType.SOURCE);
dataSource.setUri("atlas:json:SomeType");
dataSources.add(dataSource);
perform(dataSources, null, null, true);
}
use of io.atlasmap.v2.DataSource in project atlasmap by atlasmap.
the class DefaultAtlasValidationService method validateMapping.
@Override
public List<Validation> validateMapping(AtlasMapping mapping) {
if (mapping == null) {
throw new IllegalArgumentException("Mapping definition must not be null");
}
List<Validation> validations = new ArrayList<>();
Validators.MAPPING_NAME.get().validate(mapping.getName(), validations, null);
List<DataSource> dataSources = mapping.getDataSource();
for (DataSource ds : dataSources) {
switch(ds.getDataSourceType()) {
case SOURCE:
Validators.DATASOURCE_SOURCE_URI.get().validate(ds.getUri(), validations, ds.getId());
break;
case TARGET:
Validators.DATASOURCE_TARGET_URI.get().validate(ds.getUri(), validations, ds.getId());
break;
default:
throw new IllegalArgumentException(String.format("Unknown DataSource type '%s'", ds.getDataSourceType()));
}
}
validateFieldMappings(mapping.getMappings(), mapping.getLookupTables(), validations);
return validations;
}
use of io.atlasmap.v2.DataSource in project atlasmap by atlasmap.
the class DefaultAtlasContext method processSourceFields.
private void processSourceFields(DefaultAtlasSession session, List<Field> sourceFields) throws AtlasException {
for (int i = 0; i < sourceFields.size(); i++) {
Field sourceField = sourceFields.get(i);
session.head().setSourceField(sourceField);
if (sourceField instanceof FieldGroup) {
processSourceFields(session, ((FieldGroup) sourceField).getField());
Field processed = applyFieldActions(session, sourceField);
session.head().setSourceField(processed);
continue;
}
AtlasModule module = resolveModule(FieldDirection.SOURCE, sourceField);
if (module == null) {
AtlasUtil.addAudit(session, sourceField, String.format("Module not found for docId '%s'", sourceField.getDocId()), AuditStatus.ERROR, null);
return;
}
if (!module.isSupportedField(sourceField)) {
AtlasUtil.addAudit(session, sourceField, String.format("Unsupported source field type '%s' for DataSource '%s'", sourceField.getClass().getName(), module.getUri()), AuditStatus.ERROR, null);
return;
}
module.readSourceValue(session);
Field processed = applyFieldActions(session, session.head().getSourceField());
session.head().setSourceField(processed);
sourceFields.set(i, processed);
}
}
use of io.atlasmap.v2.DataSource in project atlasmap by atlasmap.
the class DefaultAtlasContext method init.
/**
* TODO: For dynamic re-load. This needs lock()
*
* @throws AtlasException failed to initialize
*/
protected synchronized void init() throws AtlasException {
if (this.initialized) {
return;
}
registerJmx(this);
if (this.atlasMappingUri != null) {
this.admHandler = new ADMArchiveHandler(factory.getClassLoader());
this.admHandler.setIgnoreLibrary(true);
this.admHandler.load(Paths.get(this.atlasMappingUri));
this.dataSourceMetadataMap = this.admHandler.getDataSourceMetadataMap();
}
if (this.admHandler == null || this.admHandler.getMappingDefinition() == null) {
LOG.warn("AtlasMap context cannot initialize without mapping definition, ignoring:" + " Mapping URI={}", this.atlasMappingUri);
return;
}
sourceModules.clear();
ConstantModule constant = new ConstantModule();
constant.setConversionService(factory.getConversionService());
constant.setFieldActionService(factory.getFieldActionService());
sourceModules.put(AtlasConstants.CONSTANTS_DOCUMENT_ID, constant);
PropertyModule property = new PropertyModule(factory.getPropertyStrategy());
property.setConversionService(factory.getConversionService());
property.setFieldActionService(factory.getFieldActionService());
property.setMode(AtlasModuleMode.SOURCE);
sourceModules.put(AtlasConstants.PROPERTIES_SOURCE_DOCUMENT_ID, property);
targetModules.clear();
property = new PropertyModule(factory.getPropertyStrategy());
property.setConversionService(factory.getConversionService());
property.setFieldActionService(factory.getFieldActionService());
property.setMode(AtlasModuleMode.TARGET);
targetModules.put(AtlasConstants.PROPERTIES_TARGET_DOCUMENT_ID, property);
lookupTables.clear();
if (admHandler.getMappingDefinition().getLookupTables() != null && admHandler.getMappingDefinition().getLookupTables().getLookupTable() != null) {
for (LookupTable table : admHandler.getMappingDefinition().getLookupTables().getLookupTable()) {
lookupTables.put(table.getName(), table);
}
}
AtlasModuleInfoRegistry moduleInfoRegistry = factory.getModuleInfoRegistry();
for (DataSource ds : admHandler.getMappingDefinition().getDataSource()) {
AtlasModuleInfo moduleInfo = moduleInfoRegistry.lookupByUri(ds.getUri());
if (moduleInfo == null) {
LOG.error("Cannot find module info for the DataSource uri '{}'", ds.getUri());
continue;
}
if (ds.getDataSourceType() != DataSourceType.SOURCE && ds.getDataSourceType() != DataSourceType.TARGET) {
LOG.error("Unsupported DataSource type '{}'", ds.getDataSourceType());
continue;
}
String docId = ds.getId();
if (docId == null || docId.isEmpty()) {
docId = ds.getDataSourceType() == DataSourceType.SOURCE ? AtlasConstants.DEFAULT_SOURCE_DOCUMENT_ID : AtlasConstants.DEFAULT_TARGET_DOCUMENT_ID;
}
if (ds.getDataSourceType() == DataSourceType.SOURCE && sourceModules.containsKey(docId)) {
LOG.error("Duplicated {} DataSource ID '{}' was detected, ignoring...", ds.getDataSourceType(), ds.getId());
continue;
}
if (ds.getDataSourceType() == DataSourceType.TARGET && targetModules.containsKey(docId)) {
LOG.error("Duplicated {} DataSource ID '{}' was detected, ignoring...", ds.getDataSourceType(), docId);
continue;
}
try {
AtlasModule module = moduleInfo.getModuleClass().getDeclaredConstructor().newInstance();
module.setClassLoader(factory.getClassLoader());
module.setConversionService(factory.getConversionService());
module.setFieldActionService(factory.getFieldActionService());
module.setDataSource(ds);
if (ds.getDataSourceType() == DataSourceType.SOURCE) {
getSourceModules().put(docId, module);
} else if (ds.getDataSourceType() == DataSourceType.TARGET) {
getTargetModules().put(docId, module);
}
if (this.dataSourceMetadataMap != null) {
DataSourceKey dskey = new DataSourceKey(ds.getDataSourceType() == DataSourceType.SOURCE, docId);
DataSourceMetadata meta = this.dataSourceMetadataMap.get(dskey);
if (meta != null) {
module.setDataSourceMetadata(meta);
}
}
module.init();
} catch (Exception t) {
LOG.error("Unable to initialize {} module: {}", ds.getDataSourceType(), moduleInfo);
LOG.error(t.getMessage(), t);
throw new AtlasException(String.format("Unable to initialize %s module: %s", ds.getDataSourceType(), moduleInfo.toString()), t);
}
}
initialized = true;
}
use of io.atlasmap.v2.DataSource in project atlasmap by atlasmap.
the class AtlasBaseActionsTest method runActionTestList.
public Object runActionTestList(List<Action> actions, String sourceFirstName, Object targetExpected, Class<?> targetClassExpected) throws Exception {
System.out.println("Now running test for actions: " + actions);
System.out.println("Input: " + sourceFirstName);
System.out.println("Expected output: " + targetExpected);
Mapping m = new Mapping();
m.setMappingType(MappingType.MAP);
m.getInputField().add(this.sourceField);
m.getOutputField().add(this.targetField);
if (actions != null) {
m.getOutputField().get(0).setActions(new ArrayList<Action>());
m.getOutputField().get(0).getActions().addAll(actions);
}
DataSource src = new DataSource();
src.setDataSourceType(DataSourceType.SOURCE);
src.setUri(this.docURI);
DataSource tgt = new DataSource();
tgt.setDataSourceType(DataSourceType.TARGET);
tgt.setUri(this.docURI);
AtlasMapping atlasMapping = new AtlasMapping();
atlasMapping.setName("fieldactiontest");
atlasMapping.setMappings(new Mappings());
atlasMapping.getMappings().getMapping().add(m);
atlasMapping.getDataSource().add(src);
atlasMapping.getDataSource().add(tgt);
String tmpFile = "target/fieldactions-" + this.getClass().getSimpleName() + "-tmp.txt";
Json.mapper().writeValue(new File(tmpFile), atlasMapping);
AtlasContext context = atlasContextFactory.createContext(new File(tmpFile).toURI());
AtlasSession session = context.createSession();
session.setDefaultSourceDocument(createSource(sourceFirstName));
context.process(session);
Object targetActual = session.getDefaultTargetDocument();
assertNotNull(targetActual);
targetActual = getTargetValue(targetActual, targetClassExpected);
if (targetExpected != null) {
assertEquals(targetExpected, targetActual);
}
return targetActual;
}
Aggregations