Author: rareddy
Date: 2012-03-14 17:39:03 -0400 (Wed, 14 Mar 2012)
New Revision: 3941
Modified:
trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
trunk/engine/src/main/java/org/teiid/query/metadata/BaseMetadataRepository.java
trunk/engine/src/main/java/org/teiid/query/metadata/DDLMetadataRepository.java
trunk/engine/src/main/java/org/teiid/query/metadata/NativeMetadataRepository.java
trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBDeployer.java
trunk/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataRepository.java
Log:
TEIID-1971: Adding facility to stack the metadata repositories for given model.
Modified: trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java 2012-03-14 18:56:05
UTC (rev 3940)
+++ trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java 2012-03-14 21:39:03
UTC (rev 3941)
@@ -106,4 +106,11 @@
* @param value
*/
void setProperty(String vdbName, int vdbVersion, AbstractMetadataRecord record, String
name, String value);
+
+ /**
+ * Next repository in the repository chain. The implementation contract of this method
dictates if this method is set then
+ * Implementation class must delegete the call to 'next' instance after it is
done with the processing of the call.
+ * @param next
+ */
+ void setNext(MetadataRepository next);
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/BaseMetadataRepository.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/metadata/BaseMetadataRepository.java 2012-03-14
18:56:05 UTC (rev 3940)
+++
trunk/engine/src/main/java/org/teiid/query/metadata/BaseMetadataRepository.java 2012-03-14
21:39:03 UTC (rev 3941)
@@ -24,47 +24,81 @@
import org.teiid.metadata.AbstractMetadataRecord;
import org.teiid.metadata.Column;
import org.teiid.metadata.ColumnStats;
+import org.teiid.metadata.MetadataFactory;
import org.teiid.metadata.MetadataRepository;
import org.teiid.metadata.Procedure;
import org.teiid.metadata.Table;
import org.teiid.metadata.Table.TriggerEvent;
import org.teiid.metadata.TableStats;
+import org.teiid.translator.ExecutionFactory;
+import org.teiid.translator.TranslatorException;
-public abstract class BaseMetadataRepository<F, C> implements MetadataRepository {
-
+public class BaseMetadataRepository<F, C> implements MetadataRepository {
+ protected MetadataRepository nextRepository;
+
@Override
- public void setViewDefinition(String vdbName, int vdbVersion, Table table,
- String viewDefinition) {
+ public void loadMetadata(MetadataFactory factory, ExecutionFactory executionFactory,
Object connectionFactory) throws TranslatorException {
+ if (this.nextRepository != null) {
+ this.nextRepository.loadMetadata(factory, executionFactory, connectionFactory);
+ }
+ }
+
+ @Override
+ public void setViewDefinition(String vdbName, int vdbVersion, Table table,String
viewDefinition) {
+ if (this.nextRepository != null) {
+ this.nextRepository.setViewDefinition(vdbName, vdbVersion, table, viewDefinition);
+ }
}
@Override
public void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion,
Table table, TriggerEvent triggerOperation, String triggerDefinition) {
+ if (this.nextRepository != null) {
+ this.nextRepository.setInsteadOfTriggerDefinition(vdbName, vdbVersion, table,
triggerOperation, triggerDefinition);
+ }
}
@Override
public void setInsteadOfTriggerEnabled(String vdbName, int vdbVersion,
Table table, TriggerEvent triggerOperation, boolean enabled) {
+ if (this.nextRepository != null) {
+ this.nextRepository.setInsteadOfTriggerEnabled(vdbName, vdbVersion, table,
triggerOperation, enabled);
+ }
}
@Override
public void setProcedureDefinition(String vdbName, int vdbVersion,
Procedure procedure, String procedureDefinition) {
+ if (this.nextRepository != null) {
+ this.nextRepository.setProcedureDefinition(vdbName, vdbVersion, procedure,
procedureDefinition);
+ }
}
@Override
public void setTableStats(String vdbName, int vdbVersion, Table table,
TableStats tableStats) {
+ if (this.nextRepository != null) {
+ this.nextRepository.setTableStats(vdbName, vdbVersion, table, tableStats);
+ }
}
@Override
public void setColumnStats(String vdbName, int vdbVersion, Column column,
ColumnStats columnStats) {
+ if (this.nextRepository != null) {
+ this.nextRepository.setColumnStats(vdbName, vdbVersion, column, columnStats);
+ }
}
@Override
public void setProperty(String vdbName, int vdbVersion,
AbstractMetadataRecord record, String name, String value) {
+ if (this.nextRepository != null) {
+ this.nextRepository.setProperty(vdbName, vdbVersion, record, name, value);
+ }
}
+ public void setNext(MetadataRepository next) {
+ this.nextRepository = next;
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/DDLMetadataRepository.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/metadata/DDLMetadataRepository.java 2012-03-14
18:56:05 UTC (rev 3940)
+++
trunk/engine/src/main/java/org/teiid/query/metadata/DDLMetadataRepository.java 2012-03-14
21:39:03 UTC (rev 3941)
@@ -29,12 +29,15 @@
public class DDLMetadataRepository extends BaseMetadataRepository {
+
@Override
- public void loadMetadata(MetadataFactory factory, ExecutionFactory exeuctionFactory,
Object connectionFactory) throws TranslatorException {
+ public void loadMetadata(MetadataFactory factory, ExecutionFactory executionFactory,
Object connectionFactory) throws TranslatorException {
try {
QueryParser.getQueryParser().parseDDL(factory, factory.getRawMetadata());
} catch (ParseException e) {
throw new TranslatorException(e.getMessage());
}
+ super.loadMetadata(factory, executionFactory, connectionFactory);
}
+
}
Modified:
trunk/engine/src/main/java/org/teiid/query/metadata/NativeMetadataRepository.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/metadata/NativeMetadataRepository.java 2012-03-14
18:56:05 UTC (rev 3940)
+++
trunk/engine/src/main/java/org/teiid/query/metadata/NativeMetadataRepository.java 2012-03-14
21:39:03 UTC (rev 3941)
@@ -59,6 +59,8 @@
executionFactory.closeConnection(connection, connectionFactory);
}
validateMetadata(factory);
+
+ super.loadMetadata(factory, executionFactory, connectionFactory);
}
private void validateMetadata(MetadataFactory schema) throws TranslatorException {
Modified: trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBDeployer.java
===================================================================
--- trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBDeployer.java 2012-03-14
18:56:05 UTC (rev 3940)
+++ trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBDeployer.java 2012-03-14
21:39:03 UTC (rev 3941)
@@ -23,6 +23,7 @@
import java.util.List;
import java.util.ServiceLoader;
+import java.util.StringTokenizer;
import java.util.concurrent.Executor;
import org.jboss.as.naming.deployment.ContextNames;
@@ -278,28 +279,51 @@
return null;
}
- if (model.getSchemaSourceType().equalsIgnoreCase("DDL")) { //$NON-NLS-1$
- return new DDLMetadataRepository();
- }
+ MetadataRepository first = null;
+ MetadataRepository current = null;
+ MetadataRepository previous = null;
+ StringTokenizer st = new StringTokenizer(model.getSchemaSourceType(), ",");
//$NON-NLS-1$
+ while (st.hasMoreTokens()) {
+ String repoType = st.nextToken().trim();
+ if (repoType.equalsIgnoreCase("DDL")) { //$NON-NLS-1$
+ current = new DDLMetadataRepository();
+ }
+ else if (repoType.equalsIgnoreCase("INDEX")) { //$NON-NLS-1$
+ current = indexRepo;
+ }
+ else if (repoType.equalsIgnoreCase("NATIVE")) { //$NON-NLS-1$
+ current = new NativeMetadataRepository();
+ }
+ else {
+ // if the schema type is a module based
+ current = getModuleBasedMetadataRepository(model.getName(), repoType);
+ }
- if (model.getSchemaSourceType().equalsIgnoreCase("INDEX")) { //$NON-NLS-1$
- return indexRepo;
+ if (current != null) {
+ if (first == null) {
+ first = current;
+ }
+
+ if (previous != null) {
+ previous.setNext(current);
+ }
+ previous = current;
+ current = null;
+ }
}
-
- if (model.getSchemaSourceType().equalsIgnoreCase("NATIVE")) { //$NON-NLS-1$
- return new NativeMetadataRepository();
- }
-
- // if the schema type is a module based
- final Module module;
+ return first;
+ }
+
+ private MetadataRepository getModuleBasedMetadataRepository(final String modelName,
final String moduleName) throws DeploymentUnitProcessingException {
+ final Module module;
ClassLoader moduleLoader = this.getClass().getClassLoader();
ModuleLoader ml = Module.getCallerModuleLoader();
- if (model.getSchemaSourceType() != null && ml != null) {
+ if (moduleName != null && ml != null) {
try {
- module =
ml.loadModule(ModuleIdentifier.create(model.getSchemaSourceType()));
+ module = ml.loadModule(ModuleIdentifier.create(moduleName));
moduleLoader = module.getClassLoader();
} catch (ModuleLoadException e) {
- throw new
DeploymentUnitProcessingException(IntegrationPlugin.Util.getString("failed_load_module",
IntegrationPlugin.Event.TEIID50068, model.getSchemaSourceType(), model.getName()));
//$NON-NLS-1$
+ throw new
DeploymentUnitProcessingException(IntegrationPlugin.Util.getString("failed_load_module",
IntegrationPlugin.Event.TEIID50068, moduleName, modelName)); //$NON-NLS-1$
}
}
Modified:
trunk/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataRepository.java
===================================================================
---
trunk/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataRepository.java 2012-03-14
18:56:05 UTC (rev 3940)
+++
trunk/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataRepository.java 2012-03-14
21:39:03 UTC (rev 3941)
@@ -48,5 +48,7 @@
} catch (IOException e) {
throw new TranslatorException(e);
}
+
+ super.loadMetadata(factory, executionFactory, connectionFactory);
}
}