[teiid-commits] teiid SVN: r3941 - in trunk: engine/src/main/java/org/teiid/query/metadata and 2 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Mar 14 17:39:04 EDT 2012


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);
 	}
 }



More information about the teiid-commits mailing list