atlasmap / atlasmap Goto Github PK
View Code? Open in Web Editor NEWAtlasMap project repository
Home Page: http://atlasmap.io/
License: Apache License 2.0
AtlasMap project repository
Home Page: http://atlasmap.io/
License: Apache License 2.0
Part of epic #248
2017-09-27 | enhancement |
---|
Discussed w/ the team the idea of an AtlasGroupStrategy that would be a pre-cursor to conditional logic, expressions and advanced Field Actions (including Math related on non-Collections).
The GroupStrategy would collect source values and have a FieldGroup collection of sorts to pass to FieldActions that support FieldGroup as an input would be responsible for creating the single value output.
Another thought was that the CombineStrategy could be converted to a Group-of-Field field Action and then deprecate the CombineStrategy in the engine.
The UI could then still have a first class mapping action called 'Combine', that would create a group strategy and apply a combine field action
2017-07-06 | housekeeping |
---|
Naming convention for stuff.. we have a bit of a mix right now. Probably a good idea to settle on one set of terms and align it b/w the UI, services and the engine.
Part of epic #248
2017-10-03 | enhancement |
---|
{
"firstname": "foo",
"lastname": "bar",
"phone": "111-111-1111"
}
FieldAction name would be 'template' or something.
2017-08-09 |
---|
Right now it requires AtlasMappingFormat as an parameter on loadMapping() and saveMappingAsFile(), but it would be better to let AtlasMappingService detect the format so that the invoker doesn't have to worry about the format. If it's File/URL/URI then it's easy to detect from file extension, but if it's Stream/Reader then it has to read the content and check if there's "<" or "{". Also it needs to consider about the character encoding.
TODO : put a real usecase for the type convert field action here
@mattrpav commented on Thu Jul 27 2017
The Xml module uses XmlPathCoordinate and should be migrated to the common AtlasPath handler, or an extension of the AtlasPath class that supports namespaces
2017-09-29 | enhancement |
---|
This is required for #78
Some of the field action have COMPLEX
as a source/target type, which won't appear in field action list as COMPLEX
field is not mappable in UI. Check all the field actions appear for corresponding pair of field types, then process that mapping and verify those field actions work as expected.
2017-07-07 | enhancement |
---|
For initial release support UTF-8 and default locales throughout
@igarashitm commented on Tue Oct 10 2017
Right now DefaultAtlasContext doesn't invoke module.processOutputActions(), but UI put output field action for the COMBINE mapping. See if it should be enabled or remove completely.
2017-07-24 | enhancement |
---|
2017-09-29 | enhancement |
---|
Implement field actions marked as 'p1' in the list. There're 128 remained as of Sep 29, 2017.
2017-07-26 | housekeeping |
---|
The JavaFieldWriter, JsonFieldWriter and XmlFieldWriter classes are very similar and would allow for conversion to be generic.
This will lay the foundation for the modules to be generic as well.
@igarashitm commented on Fri Oct 27 2017
Right now JsonField and JsonComplexType doesn't have any constraint for the fieldType in the schema, but JsonComplexType should only be used for 'Complex' and JsonField for others. See if possible to reflect that constraint in the XML schema. XML model as well.
We should enforce it in checkstyle for runtime and camel
@igarashitm commented on Wed Nov 08 2017
It looks Byte related converters are all marked as UNSUPPORTED but shouldn't be, easy to implement. Also NUMBER type conversion must be provided OOTB as it often appears in the JSON schema.
BYTE -> Short
BYTE -> String (string representation of the number)
...
-127 to 127
Int, Short, Long -> BYTE (range concern)
String -> BYTE (range concern and type concern)
Decimal -> BYTE (precision concern.. if 1.2 comes in as a source value throw an exception)
2017-10-09 | housekeeping |
---|
I have hit/fixed several bugs caused by the lack of dependency specific to the runtime. They should have been detected by the tests. Introduce runtime tests which run atlasmap spring-boot runtime and test if all the services are working properly, including each modules.
Make sure all the TypeConverter can be utilized from the mapping created via UI.
At least we have a bug in DateConverter
, it has COMPLEX
as a source or target, which won't be picked up as UI doesn't define COMPLEX
as a source/target field type.
2017-07-07 | housekeeping |
---|
The atlas-model module includes Jackson JsonDeserializer and JsonSerializer classes for prettifying AtlasMapping json definitions to provide type-free, extensible field action support while maintaining a DSL-like syntax in JSON (say that 10x fast).
In doing so, there is no mechanism to output unsupported or type-o'd field action names. For example, if someone has "puppercase" instead of "Uppercase" in the json, we quietly skip over and continue on.
Option 1: Add slf4j dependency to the model class module
Option 2: Break off the ActionsJsonDeserializer, ActionsJsonSerializer, AtlasJsonModule and AtlasJsonMapper classes to a separate module
"outputField" : [ {
"jsonType" : "io.atlasmap.v2.MockField",
"actions" : [ {
"Uppercase" : null
}, {
"Lowercase" : null
}, {
"SubString" : {
"startIndex" : 2,
"endIndex" : 5
}
}, {
"SubStringAfter" : {
"match" : "a",
"startIndex" : 2,
"endIndex" : 5
}
}, {
"SubStringBefore" : {
"match" : "z",
"startIndex" : 2,
"endIndex" : 5
}
} ],
"value" : "map-output-value",
"fieldType" : "STRING",
"name" : "map-output"
} ]
2017-09-07 | enhancement |
---|
In following JSON schema 'ref'-c' refers 'urn:d' before it's defined in schema, which is not supported for JSON schema inspection today.
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"ref-a": { "$ref": "urn:a" },
"ref-b": { "$ref": "urn:b" },
"ref-c": { "$ref": "urn:d" },
"def-d": {
"$id": "urn:d",
"type": "object",
"properties": {
"str-d": { "type": "string" }
}
}
....
As long as it's defined in definitions section, order doesn't matter. It's a problem only on a embedded definition.
This could be achieved in Java module by using a root path /
for the value. Easier than introducing atlas:core
module.
2017-07-27 | enhancement |
---|
AtlasMap supports processing repeated items in a Collection. It would be handy to be able to support a mapping where you can map a specific field out of an indexed collection to a target field.
source path: /order/address[1]/email
target path: /contact/primaryEmail
2017-07-24 | enhancement |
---|
Java class inspection edge case - field and setter/getter conflict
Scenario:
Note: An approach could be to use "@" to indicate field vs method
ie..
/Address/@street <-- Java field
/Address/street <-- Java get/set method
Advanced use case:
Extended class implements same field as super class
Result, 2 field definitions:
Right now the directory names for the runtime is a bit verbose. It doesn't have to be same with maven module name. For example atlas-api
could be just api
, and atlas-{java,json,xml}-parent
could be just java
, json
, xml
. Modules could be even moved into modules
subdir without changing maven hierarcy.
2017-10-19 | enhancement |
---|
See #89
xref: https://issues.redhat.com/browse/ENTESB-12408
We would be able to:
An example from camel-salesforce here
{
"type": "object",
"id": "urn:jsonschema:org:apache:camel:component:salesforce:dto",
"$schema": "http://json-schema.org/draft-04/schema#",
"oneOf": [
{
"id": "urn:jsonschema:org:apache:camel:component:salesforce:dto:QueryRecordsMerchandise__c",
"properties": {
"done": {
"type": "boolean"
},
"totalSize": {
"type": "integer"
},
"nextRecordsUrl": {
"type": "string"
},
"records": {
"type": "array",
"required": true,
"items": {
"type": "object",
"$ref": "urn:jsonschema:org:apache:camel:component:salesforce:dto:Merchandise__c"
}
}
}
},
{
"id": "urn:jsonschema:org:apache:camel:component:salesforce:dto:Merchandise__c",
"title": "Merchandise",
"properties": {
"Id": {
"type": "string",
"required": true,
"readonly": true,
"title": "Record ID"
},
"OwnerId": {
"type": "string",
"required": true,
"readonly": false,
"title": "Owner ID"
},
"IsDeleted": {
"type": "boolean",
"required": true,
"readonly": true,
"title": "Deleted"
},
"Name": {
"type": "string",
"readonly": false,
"title": "Merchandise Name"
},
"CreatedDate": {
"type": "string",
"required": true,
"readonly": true,
"title": "Created Date",
"format": "date-time"
},
"CreatedById": {
"type": "string",
"required": true,
"readonly": true,
"title": "Created By ID"
},
"LastModifiedDate": {
"type": "string",
"required": true,
"readonly": true,
"title": "Last Modified Date",
"format": "date-time"
},
"LastModifiedById": {
"type": "string",
"required": true,
"readonly": true,
"title": "Last Modified By ID"
},
"SystemModstamp": {
"type": "string",
"required": true,
"readonly": true,
"title": "System Modstamp",
"format": "date-time"
},
"LastActivityDate": {
"type": "string",
"readonly": true,
"title": "Last Activity Date",
"format": "date-time"
},
"LastViewedDate": {
"type": "string",
"readonly": true,
"title": "Last Viewed Date",
"format": "date-time"
},
"LastReferencedDate": {
"type": "string",
"readonly": true,
"title": "Last Referenced Date",
"format": "date-time"
},
"Description__c": {
"type": "string",
"readonly": false,
"title": "Description"
},
"Price__c": {
"type": "number",
"required": true,
"readonly": false,
"title": "Price"
},
"Total_Inventory__c": {
"type": "number",
"required": true,
"readonly": false,
"title": "Total_Inventory"
}
}
}
]
}
@igarashitm commented on Mon Oct 30 2017
Yes it's definitely TODO. Even DateConverter is not available.
2017-10-20 | enhancement |
---|
Check the fields listed in the required property and add required flag in the inspection result. Also see if XML schema inspection does it.
Don't forget to add Labels for each submodules
I suspect Enum field without getter/setter is not handled here. Add a unit test to inspect a class which has a Enum field without getter/setter, and see if it's in the inspection result. If not, implement it.
2017-09-27 | document |
---|
AltasSession: Per execution of mapping data
AtlasContext: Per mapping definition
AtlasContextFactory: Global for assembling all Atlas components.. modules, field actions, validations, converters, etc.
2017-07-12 |
---|
2017-07-20 | enhancement |
---|
Character encoding / locale information needs to be added to inspection and mapping.
Add the following two properties:
To the following classes:
Please cc me when this is finished so I can test it on the UI.
Related ticket: #70
2017-07-23 | enhancement |
---|
Currently, each read / write instantiates a document. This should be converted to support an overloaded method where the node can be passed in for subsequent calls
2017-10-02 | enhancement |
---|
Currently there is only support for String
in the input
of JSON
and XML
modules, we should support InputStream
as input.
See XmlModule.java#L167-L171 and JsonModule.java#L145-L150.
@mattrpav commented on Wed Jul 12 2017
2017-10-15 | enhancement |
---|
Right now Java field writer only supports concrete class which can be instantiated via no-arg constructor. See createObject() in this class:
https://github.com/atlasmap/atlasmap-runtime/blob/master/atlas-java-parent/atlas-java-module/src/main/java/io/atlasmap/java/module/DocumentJavaFieldWriter.java
One option is to feed a mapping between interface/abstract types and default impl classes from configuration or something.
java.util.List : java.util.ArrayList
java.util.Map : java.util.HashMap
...
And it also should be configurable from mapping file so that the user can define their own types.
so that the camel-atlasmap can synchronize with runtime version, and also centralize dependency managemewnt.
@igarashitm commented on Tue Nov 07 2017
Poor JavaModule, don't look into Constants...
@igarashitm commented on Tue Nov 07 2017
Don't forget to check JSON/XML modules as well
@mattrpav summarizing comments up to 12/19:
Java, Xml and Json Modules should not create validation messages for: ConstantField, PropertyField, LookupField and other common *Field types from atlas-core.
2017-07-26 | enhancement |
---|
Required to fix for Stand alone data mapper
And also required to support custom connector in Syndesis
2017-07-26 |
---|
@jpav commented on Thu Nov 02 2017
Code near the end of the method that determines whether a response should be generated indicating a converter is needed to perform a mapping has been left incomplete. We should determine the necessity of this code and either complete its implementation or remove it from the class.
@igarashitm commented on Thu Nov 02 2017
Weird thing is that we sometimes see "converter is not available" warning in UI. I thought it came from this converterCheck. Need to investigate.
@igarashitm commented on Wed Nov 08 2017
I now suspect the converterCheck is not used at all. All the converter validation results I have ever seen come from validate. Make sure UI doesn't invoke it and remove.
2017-07-17 |
---|
When trying to do Twitter Mention -> Salesforce Create/Update Contact, I can see the following exception.
Could not load JAVA document. Document is not found: io.syndesis.connector.salesforce.Contact
2017-09-19 |
---|
a warning is reported by Eclipse
the possible issue is that the files on the classpath won't be deleted (on windows) because a lock will be keep on it.
2017-09-29 | bug |
---|
Right now it's invoking only per module validations. It should just invoke processValidation() instead.
@mattrpav commented on Wed Jul 19 2017
DefaultAtlasCombineStrategy (100%)
DefaultAtlasContext
DefaultAtlasContextFactory
DefaultAtlasConversionService (74%)
DefaultAtlasPropertyStrategy (84%)
DefaultAtlasSeparateStrategy (100%)
DefaultAtlasSession (100%)
DefaultAtlasValidationService (88%)
StringDelimiter (86%)
io.atlasmap.actions (85%)
io.atlasmap.converters (99%)
io.atlasmap.validators (70%)
2017-07-20 | enhancement |
---|
The io.syndesis.connector.salesforce.Contact object is heavily generic, parameterized and extended. This results in a lot of unnecessary inspection on inner member fields that do not need to be presented to the end user.
2017-09-19 |
---|
the default is 1.5 https://maven.apache.org/plugins/maven-compiler-plugin/
it would be nice to upgrade to 1.8 to be able to leverage new java idioms
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.