You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2016/07/11 05:23:25 UTC
[14/16] metamodel git commit: Made the new REST API use the
METAMODEL-1099 based factories
Made the new REST API use the METAMODEL-1099 based factories
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/11d9a9e8
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/11d9a9e8
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/11d9a9e8
Branch: refs/heads/feature/5.x/swagger-docs
Commit: 11d9a9e8ac10f0f1d5da08a091d3b03a4f0a3256
Parents: ba9b4cc
Author: Kasper S�rensen <i....@gmail.com>
Authored: Sun Jul 10 22:11:22 2016 -0700
Committer: Kasper S�rensen <i....@gmail.com>
Committed: Sun Jul 10 22:11:22 2016 -0700
----------------------------------------------------------------------
.../factory/DataContextPropertiesImpl.java | 3 +
.../apache/metamodel/pojo/PojoDataContext.java | 4 +-
.../metamodel/pojo/PojoDataContextFactory.java | 71 ++++++++++++
....apache.metamodel.factory.DataContextFactory | 1 +
.../app/CachedDataSourceRegistryWrapper.java | 109 +++++++++++++++++++
.../service/app/DataContextSupplier.java | 59 ++--------
.../service/app/DataSourceDefinition.java | 8 +-
.../service/app/DataSourceRegistry.java | 3 +-
.../service/app/InMemoryDataSourceRegistry.java | 5 +-
.../service/app/InMemoryTenantContext.java | 2 +-
.../controllers/DataSourceController.java | 17 ++-
.../model/RestDataSourceDefinition.java | 27 +++--
.../TenantInteractionScenarioTest.java | 2 +-
13 files changed, 237 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/core/src/main/java/org/apache/metamodel/factory/DataContextPropertiesImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/factory/DataContextPropertiesImpl.java b/core/src/main/java/org/apache/metamodel/factory/DataContextPropertiesImpl.java
index e66a811..13ce9c1 100644
--- a/core/src/main/java/org/apache/metamodel/factory/DataContextPropertiesImpl.java
+++ b/core/src/main/java/org/apache/metamodel/factory/DataContextPropertiesImpl.java
@@ -288,6 +288,9 @@ public class DataContextPropertiesImpl implements DataContextProperties {
@Override
public SimpleTableDef[] getTableDefs() {
final Object obj = get(PROPERTY_TABLE_DEFS);
+ if (obj == null) {
+ return null;
+ }
if (obj instanceof SimpleTableDef[]) {
return (SimpleTableDef[]) obj;
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java
----------------------------------------------------------------------
diff --git a/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java b/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java
index 9369e96..340228f 100644
--- a/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java
+++ b/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java
@@ -49,6 +49,8 @@ import org.apache.metamodel.util.SimpleTableDef;
public class PojoDataContext extends QueryPostprocessDataContext implements UpdateableDataContext, Serializable {
private static final long serialVersionUID = 1L;
+
+ public static final String DEFAULT_SCHEMA_NAME = "Schema";
private final Map<String, TableDataProvider<?>> _tables;
private final String _schemaName;
@@ -68,7 +70,7 @@ public class PojoDataContext extends QueryPostprocessDataContext implements Upda
* @param tables
*/
public PojoDataContext(List<TableDataProvider<?>> tables) {
- this("Schema", tables);
+ this(DEFAULT_SCHEMA_NAME, tables);
}
/**
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java
----------------------------------------------------------------------
diff --git a/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java b/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java
new file mode 100644
index 0000000..35842bf
--- /dev/null
+++ b/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.metamodel.pojo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.metamodel.ConnectionException;
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.factory.DataContextFactory;
+import org.apache.metamodel.factory.DataContextProperties;
+import org.apache.metamodel.factory.ResourceFactoryRegistry;
+import org.apache.metamodel.factory.UnsupportedDataContextPropertiesException;
+import org.apache.metamodel.util.SimpleTableDef;
+
+public class PojoDataContextFactory implements DataContextFactory {
+
+ public static final String PROPERTY_TYPE = "pojo";
+
+ @Override
+ public boolean accepts(DataContextProperties properties, ResourceFactoryRegistry resourceFactoryRegistry) {
+ return PROPERTY_TYPE.equals(properties.getDataContextType());
+ }
+
+ @Override
+ public DataContext create(DataContextProperties properties, ResourceFactoryRegistry resourceFactoryRegistry)
+ throws UnsupportedDataContextPropertiesException, ConnectionException {
+
+ assert accepts(properties, resourceFactoryRegistry);
+
+ final String schemaName;
+ if (properties.getDatabaseName() != null) {
+ schemaName = properties.getDatabaseName();
+ } else {
+ schemaName = "Schema";
+ }
+
+ final List<TableDataProvider<?>> tableDataProviders;
+
+ final SimpleTableDef[] tableDefs = properties.getTableDefs();
+ if (tableDefs == null) {
+ tableDataProviders = new ArrayList<>();
+ } else {
+ tableDataProviders = new ArrayList<>(tableDefs.length);
+ for (int i = 0; i < tableDefs.length; i++) {
+ final TableDataProvider<?> tableDataProvider = new ArrayTableDataProvider(tableDefs[i],
+ new ArrayList<Object[]>());
+ tableDataProviders.add(tableDataProvider);
+ }
+ }
+
+ return new PojoDataContext(schemaName, tableDataProviders);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/pojo/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
----------------------------------------------------------------------
diff --git a/pojo/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory b/pojo/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
new file mode 100644
index 0000000..76f808d
--- /dev/null
+++ b/pojo/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
@@ -0,0 +1 @@
+org.apache.metamodel.pojo.PojoDataContextFactory
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/main/java/org/apache/metamodel/service/app/CachedDataSourceRegistryWrapper.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/main/java/org/apache/metamodel/service/app/CachedDataSourceRegistryWrapper.java b/service-webapp/src/main/java/org/apache/metamodel/service/app/CachedDataSourceRegistryWrapper.java
new file mode 100644
index 0000000..fffe83d
--- /dev/null
+++ b/service-webapp/src/main/java/org/apache/metamodel/service/app/CachedDataSourceRegistryWrapper.java
@@ -0,0 +1,109 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.metamodel.service.app;
+
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.MetaModelException;
+import org.apache.metamodel.factory.DataContextProperties;
+import org.apache.metamodel.service.app.exceptions.DataSourceAlreadyExistException;
+import org.apache.metamodel.service.app.exceptions.NoSuchDataSourceException;
+import org.apache.metamodel.util.FileHelper;
+
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.cache.RemovalListener;
+import com.google.common.cache.RemovalNotification;
+
+/**
+ * A wrapper that adds a cache around a {@link DataSourceRegistry} in order to
+ * prevent re-connecting all the time to the same data source.
+ */
+public class CachedDataSourceRegistryWrapper implements DataSourceRegistry {
+
+ /**
+ * The default timeout (in seconds) before the cache evicts and closes the
+ * created {@link DataContext}s.
+ */
+ public static final int DEFAULT_TIMEOUT_SECONDS = 60;
+
+ private final DataSourceRegistry delegate;
+ private final LoadingCache<String, DataContext> loadingCache;
+
+ public CachedDataSourceRegistryWrapper(DataSourceRegistry delegate) {
+ this(delegate, DEFAULT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
+ }
+
+ public CachedDataSourceRegistryWrapper(DataSourceRegistry delegate, long cacheTimeout, TimeUnit cacheTimeoutUnit) {
+ this.delegate = delegate;
+ this.loadingCache = CacheBuilder.newBuilder().expireAfterAccess(cacheTimeout, cacheTimeoutUnit).removalListener(
+ createRemovalListener()).build(createCacheLoader());
+ }
+
+ private RemovalListener<String, DataContext> createRemovalListener() {
+ return new RemovalListener<String, DataContext>() {
+ @Override
+ public void onRemoval(RemovalNotification<String, DataContext> notification) {
+ final DataContext dataContext = notification.getValue();
+ // some DataContexts are closeable - attempt closing it here
+ FileHelper.safeClose(dataContext);
+ }
+ };
+ }
+
+ private CacheLoader<String, DataContext> createCacheLoader() {
+ return new CacheLoader<String, DataContext>() {
+ @Override
+ public DataContext load(String key) throws Exception {
+ return delegate.openDataContext(key);
+ }
+ };
+ }
+
+ @Override
+ public List<String> getDataSourceNames() {
+ return delegate.getDataSourceNames();
+ }
+
+ @Override
+ public String registerDataSource(String dataContextName, DataContextProperties dataContextProperties)
+ throws DataSourceAlreadyExistException {
+ loadingCache.invalidate(dataContextName);
+ return delegate.registerDataSource(dataContextName, dataContextProperties);
+ }
+
+ @Override
+ public DataContext openDataContext(String dataSourceName) throws NoSuchDataSourceException {
+ try {
+ return loadingCache.get(dataSourceName);
+ } catch (ExecutionException e) {
+ final Throwable cause = e.getCause();
+ if (cause instanceof RuntimeException) {
+ throw (RuntimeException) cause;
+ }
+ throw new MetaModelException("Unexpected error happened while getting DataContext '" + dataSourceName
+ + "' from cache", e);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/main/java/org/apache/metamodel/service/app/DataContextSupplier.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/main/java/org/apache/metamodel/service/app/DataContextSupplier.java b/service-webapp/src/main/java/org/apache/metamodel/service/app/DataContextSupplier.java
index a0fb6ec..2f42c6f 100644
--- a/service-webapp/src/main/java/org/apache/metamodel/service/app/DataContextSupplier.java
+++ b/service-webapp/src/main/java/org/apache/metamodel/service/app/DataContextSupplier.java
@@ -18,68 +18,31 @@
*/
package org.apache.metamodel.service.app;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
import java.util.function.Supplier;
-import java.util.stream.Collectors;
import org.apache.metamodel.DataContext;
-import org.apache.metamodel.pojo.ArrayTableDataProvider;
-import org.apache.metamodel.pojo.PojoDataContext;
-import org.apache.metamodel.pojo.TableDataProvider;
-import org.apache.metamodel.util.SimpleTableDef;
-import org.apache.metamodel.util.SimpleTableDefParser;
+import org.apache.metamodel.factory.DataContextFactoryRegistryImpl;
+import org.apache.metamodel.factory.DataContextProperties;
public class DataContextSupplier implements Supplier<DataContext> {
private final String dataSourceName;
- private final DataSourceDefinition dataSourceDefinition;
- private final DataContext eagerLoadedDataContext;
+ private final DataContextProperties dataContextProperties;
- public DataContextSupplier(String dataSourceName, DataSourceDefinition dataSourceDefinition) {
+ public DataContextSupplier(String dataSourceName, DataContextProperties dataContextProperties) {
this.dataSourceName = dataSourceName;
- this.dataSourceDefinition = dataSourceDefinition;
- this.eagerLoadedDataContext = createDataContext(true);
+ this.dataContextProperties = dataContextProperties;
}
@Override
public DataContext get() {
- if (eagerLoadedDataContext != null) {
- return eagerLoadedDataContext;
- }
- return createDataContext(false);
+ final DataContext dataContext = DataContextFactoryRegistryImpl.getDefaultInstance().createDataContext(
+ dataContextProperties);
+ return dataContext;
}
- private DataContext createDataContext(boolean eager) {
- final String type = dataSourceDefinition.getType();
- switch (type.toLowerCase()) {
- case "pojo":
- final List<TableDataProvider<?>> tableDataProviders;
-
- final Object tableDefinitions = dataSourceDefinition.getTableDefinitions();
- if (tableDefinitions == null) {
- tableDataProviders = new ArrayList<>(0);
- } else if (tableDefinitions instanceof String) {
- final SimpleTableDef[] tableDefs = SimpleTableDefParser.parseTableDefs((String) tableDefinitions);
- tableDataProviders = Arrays.stream(tableDefs).map((tableDef) -> {
- return new ArrayTableDataProvider(tableDef, new ArrayList<Object[]>());
- }).collect(Collectors.toList());
- } else {
- throw new UnsupportedOperationException("Unsupported table definition type: " + tableDefinitions);
- }
-
- final String schemaName = dataSourceDefinition.getSchemaName() == null ? dataSourceName
- : dataSourceDefinition.getSchemaName();
-
- return new PojoDataContext(schemaName, tableDataProviders);
- }
-
- if (eager) {
- return null;
- } else {
- throw new UnsupportedOperationException("Unsupported data source type: " + type);
- }
+ @Override
+ public String toString() {
+ return "DataContextSupplier[" + dataSourceName + "]";
}
-
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceDefinition.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceDefinition.java b/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceDefinition.java
index 11140a7..2aaa8e5 100644
--- a/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceDefinition.java
+++ b/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceDefinition.java
@@ -18,13 +18,11 @@
*/
package org.apache.metamodel.service.app;
+import java.util.Map;
+
public interface DataSourceDefinition {
public String getType();
- public Object getTableDefinitions();
-
- public String getSchemaName();
-
- // TODO
+ public Map<String, Object> getProperties();
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceRegistry.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceRegistry.java b/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceRegistry.java
index 3a9ba43..e0c8697 100644
--- a/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceRegistry.java
+++ b/service-webapp/src/main/java/org/apache/metamodel/service/app/DataSourceRegistry.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.apache.metamodel.DataContext;
import org.apache.metamodel.UpdateableDataContext;
+import org.apache.metamodel.factory.DataContextProperties;
import org.apache.metamodel.service.app.exceptions.DataSourceAlreadyExistException;
import org.apache.metamodel.service.app.exceptions.DataSourceNotUpdateableException;
import org.apache.metamodel.service.app.exceptions.NoSuchDataSourceException;
@@ -33,7 +34,7 @@ public interface DataSourceRegistry {
public List<String> getDataSourceNames();
- public String registerDataSource(String dataContextName, DataSourceDefinition dataSourceDef) throws DataSourceAlreadyExistException;
+ public String registerDataSource(String dataContextName, DataContextProperties dataContextProperties) throws DataSourceAlreadyExistException;
public DataContext openDataContext(String dataSourceName) throws NoSuchDataSourceException;
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryDataSourceRegistry.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryDataSourceRegistry.java b/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryDataSourceRegistry.java
index b99c6e7..386232a 100644
--- a/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryDataSourceRegistry.java
+++ b/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryDataSourceRegistry.java
@@ -25,6 +25,7 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.apache.metamodel.DataContext;
+import org.apache.metamodel.factory.DataContextProperties;
import org.apache.metamodel.service.app.exceptions.DataSourceAlreadyExistException;
import org.apache.metamodel.service.app.exceptions.NoSuchDataSourceException;
@@ -37,13 +38,13 @@ public class InMemoryDataSourceRegistry implements DataSourceRegistry {
}
@Override
- public String registerDataSource(final String name, final DataSourceDefinition dataSourceDef)
+ public String registerDataSource(final String name, final DataContextProperties dataContextProperties)
throws DataSourceAlreadyExistException {
if (dataSources.containsKey(name)) {
throw new DataSourceAlreadyExistException(name);
}
- dataSources.put(name, new DataContextSupplier(name, dataSourceDef));
+ dataSources.put(name, new DataContextSupplier(name, dataContextProperties));
return name;
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryTenantContext.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryTenantContext.java b/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryTenantContext.java
index 04fb708..022ab28 100644
--- a/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryTenantContext.java
+++ b/service-webapp/src/main/java/org/apache/metamodel/service/app/InMemoryTenantContext.java
@@ -25,7 +25,7 @@ public class InMemoryTenantContext implements TenantContext {
public InMemoryTenantContext(String tenantIdentifier) {
this.tenantIdentifier = tenantIdentifier;
- this.dataContextRegistry = new InMemoryDataSourceRegistry();
+ this.dataContextRegistry = new CachedDataSourceRegistryWrapper(new InMemoryDataSourceRegistry());
}
@Override
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/main/java/org/apache/metamodel/service/controllers/DataSourceController.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/main/java/org/apache/metamodel/service/controllers/DataSourceController.java b/service-webapp/src/main/java/org/apache/metamodel/service/controllers/DataSourceController.java
index 9c678ff..6ac0c43 100644
--- a/service-webapp/src/main/java/org/apache/metamodel/service/controllers/DataSourceController.java
+++ b/service-webapp/src/main/java/org/apache/metamodel/service/controllers/DataSourceController.java
@@ -19,6 +19,7 @@
package org.apache.metamodel.service.controllers;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -29,6 +30,8 @@ import javax.ws.rs.core.UriBuilder;
import org.apache.metamodel.DataContext;
import org.apache.metamodel.UpdateableDataContext;
+import org.apache.metamodel.factory.DataContextProperties;
+import org.apache.metamodel.factory.DataContextPropertiesImpl;
import org.apache.metamodel.service.app.TenantContext;
import org.apache.metamodel.service.app.TenantRegistry;
import org.apache.metamodel.service.controllers.model.RestDataSourceDefinition;
@@ -58,8 +61,20 @@ public class DataSourceController {
public Map<String, Object> put(@PathVariable("tenant") String tenantId,
@PathVariable("datasource") String dataSourceId,
@Valid @RequestBody RestDataSourceDefinition dataContextDefinition) {
+
+ final Map<String, Object> map = new HashMap<>();
+ map.putAll(dataContextDefinition.getProperties());
+ map.put(DataContextPropertiesImpl.PROPERTY_DATA_CONTEXT_TYPE, dataContextDefinition.getType());
+
+ if (!map.containsKey(DataContextPropertiesImpl.PROPERTY_DATABASE)) {
+ // add the data source ID as database name if it is not already set.
+ map.put(DataContextPropertiesImpl.PROPERTY_DATABASE, dataSourceId);
+ }
+
+ final DataContextProperties properties = new DataContextPropertiesImpl(map);
+
final String dataContextIdentifier = tenantRegistry.getTenantContext(tenantId).getDataSourceRegistry()
- .registerDataSource(dataSourceId, dataContextDefinition);
+ .registerDataSource(dataSourceId, properties);
return get(tenantId, dataContextIdentifier);
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/main/java/org/apache/metamodel/service/controllers/model/RestDataSourceDefinition.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/main/java/org/apache/metamodel/service/controllers/model/RestDataSourceDefinition.java b/service-webapp/src/main/java/org/apache/metamodel/service/controllers/model/RestDataSourceDefinition.java
index 48c5926..b6fdb28 100644
--- a/service-webapp/src/main/java/org/apache/metamodel/service/controllers/model/RestDataSourceDefinition.java
+++ b/service-webapp/src/main/java/org/apache/metamodel/service/controllers/model/RestDataSourceDefinition.java
@@ -18,39 +18,38 @@
*/
package org.apache.metamodel.service.controllers.model;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.validation.constraints.NotNull;
import org.apache.metamodel.service.app.DataSourceDefinition;
-import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
public class RestDataSourceDefinition implements DataSourceDefinition {
+ private final Map<String, Object> properties = new HashMap<>();
+
@JsonProperty(value = "type", required = true)
@NotNull
private String type;
- @JsonProperty(value = "table-definitions", required = false)
- @JsonInclude(JsonInclude.Include.NON_NULL)
- private Object tableDefinitions;
-
- @JsonProperty(value = "schema-name", required = false)
- @JsonInclude(JsonInclude.Include.NON_NULL)
- private String schemaName;
-
@Override
public String getType() {
return type;
}
+ @JsonAnyGetter
@Override
- public Object getTableDefinitions() {
- return tableDefinitions;
+ public Map<String, Object> getProperties() {
+ return properties;
}
- @Override
- public String getSchemaName() {
- return schemaName;
+ @JsonAnySetter
+ public void set(String name, Object value) {
+ properties.put(name, value);
}
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/11d9a9e8/service-webapp/src/test/java/org/apache/metamodel/service/controllers/TenantInteractionScenarioTest.java
----------------------------------------------------------------------
diff --git a/service-webapp/src/test/java/org/apache/metamodel/service/controllers/TenantInteractionScenarioTest.java b/service-webapp/src/test/java/org/apache/metamodel/service/controllers/TenantInteractionScenarioTest.java
index 793f88c..01bc7f5 100644
--- a/service-webapp/src/test/java/org/apache/metamodel/service/controllers/TenantInteractionScenarioTest.java
+++ b/service-webapp/src/test/java/org/apache/metamodel/service/controllers/TenantInteractionScenarioTest.java
@@ -72,7 +72,7 @@ public class TenantInteractionScenarioTest {
// create datasource
{
final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.put("/tenant1/mydata").content(
- "{'type':'pojo','table-definitions':'hello_world (greeting VARCHAR, who VARCHAR); foo (bar INTEGER, baz DATE);'}"
+ "{'type':'pojo','table-defs':'hello_world (greeting VARCHAR, who VARCHAR); foo (bar INTEGER, baz DATE);'}"
.replace('\'', '"')).contentType(MediaType.APPLICATION_JSON)).andExpect(
MockMvcResultMatchers.status().isOk()).andReturn();