Skip to content

Commit 6f04001

Browse files
Merge pull request #21 from opendatamesh-initiative/19-improvement-supporting-datastoreapi-parsing-and-visitor
feat: Added support to DataStoreApi specification
2 parents 72b7030 + cef1d2a commit 6f04001

File tree

47 files changed

+1674
-7
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1674
-7
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1;
2+
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApi;
6+
import org.opendatamesh.dpds.datastoreapi.v1.parser.DataStoreApiParser;
7+
import org.opendatamesh.dpds.extensions.DefinitionConverter;
8+
9+
import java.io.IOException;
10+
11+
public class DataStoreApiDefinitionConverter implements DefinitionConverter<DataStoreApi> {
12+
13+
private static final String SPECIFICATION = "datastoreapi";
14+
private static final String VERSION = "^1(\\.\\d+){0,2}$";
15+
private final DataStoreApiParser parser;
16+
17+
public DataStoreApiDefinitionConverter(DataStoreApiParser parser) {
18+
this.parser = parser;
19+
}
20+
21+
@Override
22+
public boolean supports(String specification, String specificationVersion) {
23+
return SPECIFICATION.equalsIgnoreCase(specification) &&
24+
specificationVersion.matches(VERSION);
25+
}
26+
27+
@Override
28+
public DataStoreApi deserialize(ObjectMapper defaultMapper, JsonNode jsonNode) throws IOException {
29+
return parser.deserialize(jsonNode);
30+
}
31+
32+
@Override
33+
public JsonNode serialize(ObjectMapper defaultMapper, DataStoreApi value) throws IOException {
34+
return parser.serialize(value);
35+
}
36+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApi;
4+
import org.opendatamesh.dpds.extensions.DefinitionVisitor;
5+
6+
public abstract class DataStoreApiDefinitionVisitor extends DefinitionVisitor<DataStoreApi> {
7+
protected DataStoreApiDefinitionVisitor() {
8+
super(DataStoreApi.class);
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions;
2+
3+
import com.fasterxml.jackson.core.JacksonException;
4+
import com.fasterxml.jackson.databind.JsonNode;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import org.opendatamesh.dpds.model.core.ComponentBase;
7+
8+
public interface DataStoreApiStandardDefinitionConverter<T extends ComponentBase> {
9+
boolean supports(String specification, String specificationVersion);
10+
11+
T deserialize(ObjectMapper defaultMapper, JsonNode jsonNode) throws JacksonException;
12+
13+
JsonNode serialize(ObjectMapper defaultMapper, T value) throws JacksonException;
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiJdbcConnectionObject;
4+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiOdbcConnectionObject;
5+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiConnectionProtocolObjectVisitor;
6+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiJdbcConnectionObjectVisitor;
7+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiOdbcConnectionObjectVisitor;
8+
9+
public class DataStoreApiConnectionProtocolObjectImpl extends ExtensionVisitor implements DataStoreApiConnectionProtocolObjectVisitor {
10+
public DataStoreApiConnectionProtocolObjectImpl(ExtensionVisitor parent) {
11+
super(parent);
12+
}
13+
14+
@Override
15+
public void visit(DataStoreApiJdbcConnectionObject jdbc) {
16+
extensionHandler.handleComponentBaseExtension(jdbc, DataStoreApiJdbcConnectionObject.class);
17+
DataStoreApiJdbcConnectionObjectVisitor visitor = new DataStoreApiJdbcConnectionObjectImpl(this);
18+
if(jdbc.getDriverDocs() != null){
19+
visitor.visit(jdbc.getDriverDocs());
20+
}
21+
}
22+
23+
@Override
24+
public void visit(DataStoreApiOdbcConnectionObject odbc) {
25+
extensionHandler.handleComponentBaseExtension(odbc, DataStoreApiOdbcConnectionObject.class);
26+
DataStoreApiOdbcConnectionObjectVisitor visitor = new DataStoreApiOdbcConnectionObjectImpl(this);
27+
if(odbc.getDriverDocs() != null){
28+
visitor.visit(odbc.getDriverDocs());
29+
}
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiServerInfo;
4+
import org.opendatamesh.dpds.datastoreapi.v1.model.DatastoreApiVariableObject;
5+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiDatabaseServiceVisitor;
6+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiServerInfoVisitor;
7+
8+
public class DataStoreApiDatabaseServiceVisitorImpl extends ExtensionVisitor implements DataStoreApiDatabaseServiceVisitor {
9+
public DataStoreApiDatabaseServiceVisitorImpl(ExtensionVisitor parent) {
10+
super(parent);
11+
}
12+
13+
@Override
14+
public void visit(DataStoreApiServerInfo serverInfo) {
15+
extensionHandler.handleComponentBaseExtension(serverInfo, DataStoreApiServerInfo.class);
16+
DataStoreApiServerInfoVisitor visitor = new DataStoreApiServerInfoVisitorImpl(this);
17+
if (serverInfo.getConnectionProtocols() != null) {
18+
visitor.visit(serverInfo.getConnectionProtocols());
19+
}
20+
}
21+
22+
@Override
23+
public void visit(DatastoreApiVariableObject variableObject) {
24+
extensionHandler.handleComponentBaseExtension(variableObject, DatastoreApiVariableObject.class);
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiDatabaseService;
4+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiInfo;
5+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiSchema;
6+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiDatabaseServiceVisitor;
7+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiInfoVisitor;
8+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiSchemaVisitor;
9+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiVisitor;
10+
11+
public class DataStoreApiExtensionVisitorImpl extends ExtensionVisitor implements DataStoreApiVisitor {
12+
13+
public DataStoreApiExtensionVisitorImpl(ExtensionHandler extensionHandler) {
14+
super(null);
15+
this.extensionHandler = extensionHandler;
16+
}
17+
18+
19+
@Override
20+
public void visit(DataStoreApiInfo info) {
21+
extensionHandler.handleComponentBaseExtension(info, DataStoreApiInfo.class);
22+
DataStoreApiInfoVisitor visitor = new DataStoreApiInfoVisitorImpl(this);
23+
if (info.getContact() != null) {
24+
visitor.visit(info.getContact());
25+
}
26+
if (info.getLicense() != null) {
27+
visitor.visit(info.getLicense());
28+
}
29+
}
30+
31+
@Override
32+
public void visit(DataStoreApiDatabaseService databaseService) {
33+
extensionHandler.handleComponentBaseExtension(databaseService, DataStoreApiDatabaseService.class);
34+
DataStoreApiDatabaseServiceVisitor visitor = new DataStoreApiDatabaseServiceVisitorImpl(this);
35+
if (databaseService.getServerInfo() != null) {
36+
visitor.visit(databaseService.getServerInfo());
37+
}
38+
if (databaseService.getVariables() != null) {
39+
databaseService.getVariables().forEach((key, value) -> visitor.visit(value));
40+
}
41+
}
42+
43+
@Override
44+
public void visit(DataStoreApiSchema schema) {
45+
extensionHandler.handleComponentBaseExtension(schema, DataStoreApiSchema.class);
46+
DataStoreApiSchemaVisitor visitor = new DataStoreApiSchemaVisitorImpl(this);
47+
if (schema.getTables() != null) {
48+
schema.getTables().forEach(visitor::visit);
49+
}
50+
}
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiExternalResourceObject;
4+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiStandardDefinitionObjectVisitor;
5+
6+
public class DataStoreApiExternalResourceObjectVisitorImpl extends ExtensionVisitor implements DataStoreApiStandardDefinitionObjectVisitor {
7+
public DataStoreApiExternalResourceObjectVisitorImpl(ExtensionVisitor parent) {
8+
super(parent);
9+
}
10+
11+
@Override
12+
public void visit(DataStoreApiExternalResourceObject externalResourceObject) {
13+
extensionHandler.handleComponentBaseExtension(externalResourceObject, DataStoreApiExternalResourceObject.class);
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiContact;
4+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiLicense;
5+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiInfoVisitor;
6+
7+
public class DataStoreApiInfoVisitorImpl extends ExtensionVisitor implements DataStoreApiInfoVisitor {
8+
9+
public DataStoreApiInfoVisitorImpl(ExtensionVisitor parent) {
10+
super(parent);
11+
}
12+
13+
@Override
14+
public void visit(DataStoreApiContact contact) {
15+
extensionHandler.handleComponentBaseExtension(contact, DataStoreApiContact.class);
16+
}
17+
18+
@Override
19+
public void visit(DataStoreApiLicense license) {
20+
extensionHandler.handleComponentBaseExtension(license, DataStoreApiLicense.class);
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiExternalResourceObject;
4+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiJdbcConnectionObjectVisitor;
5+
6+
public class DataStoreApiJdbcConnectionObjectImpl extends ExtensionVisitor implements DataStoreApiJdbcConnectionObjectVisitor {
7+
8+
public DataStoreApiJdbcConnectionObjectImpl(ExtensionVisitor parent) {
9+
super(parent);
10+
}
11+
12+
@Override
13+
public void visit(DataStoreApiExternalResourceObject externalResourceObject) {
14+
extensionHandler.handleComponentBaseExtension(externalResourceObject, DataStoreApiExternalResourceObject.class);
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiExternalResourceObject;
4+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiOdbcConnectionObjectVisitor;
5+
6+
public class DataStoreApiOdbcConnectionObjectImpl extends ExtensionVisitor implements DataStoreApiOdbcConnectionObjectVisitor {
7+
public DataStoreApiOdbcConnectionObjectImpl(ExtensionVisitor parent) {
8+
super(parent);
9+
}
10+
11+
@Override
12+
public void visit(DataStoreApiExternalResourceObject externalResourceObject) {
13+
extensionHandler.handleComponentBaseExtension(externalResourceObject, DataStoreApiExternalResourceObject.class);
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiStandardDefinitionObject;
4+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiSchemaVisitor;
5+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiStandardDefinitionObjectVisitor;
6+
7+
public class DataStoreApiSchemaVisitorImpl extends ExtensionVisitor implements DataStoreApiSchemaVisitor {
8+
public DataStoreApiSchemaVisitorImpl(ExtensionVisitor parent) {
9+
super(parent);
10+
}
11+
12+
@Override
13+
public void visit(DataStoreApiStandardDefinitionObject standardDefinitionObject) {
14+
extensionHandler.handleComponentBaseExtension(standardDefinitionObject, DataStoreApiStandardDefinitionObject.class);
15+
extensionHandler.handleStandardObjectDefinition(standardDefinitionObject);
16+
DataStoreApiStandardDefinitionObjectVisitor visitor = new DataStoreApiExternalResourceObjectVisitorImpl(this);
17+
if (standardDefinitionObject.getExternalDocs() != null) {
18+
visitor.visit(standardDefinitionObject.getExternalDocs());
19+
}
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.opendatamesh.dpds.datastoreapi.v1.extensions.visitorimpl;
2+
3+
import org.opendatamesh.dpds.datastoreapi.v1.model.DataStoreApiConnectionProtocolObject;
4+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiConnectionProtocolObjectVisitor;
5+
import org.opendatamesh.dpds.datastoreapi.v1.visitor.DataStoreApiServerInfoVisitor;
6+
7+
public class DataStoreApiServerInfoVisitorImpl extends ExtensionVisitor implements DataStoreApiServerInfoVisitor {
8+
public DataStoreApiServerInfoVisitorImpl(ExtensionVisitor parent) {
9+
super(parent);
10+
}
11+
12+
@Override
13+
public void visit(DataStoreApiConnectionProtocolObject connectionProtocolObject) {
14+
extensionHandler.handleComponentBaseExtension(connectionProtocolObject, DataStoreApiConnectionProtocolObject.class);
15+
DataStoreApiConnectionProtocolObjectVisitor visitor = new DataStoreApiConnectionProtocolObjectImpl(this);
16+
if(connectionProtocolObject.getJdbc() != null){
17+
visitor.visit(connectionProtocolObject.getJdbc());
18+
}
19+
if(connectionProtocolObject.getOdbc() != null){
20+
visitor.visit(connectionProtocolObject.getOdbc());
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)