/* Create an ODI procedure. Set the technology to "Groovy" Paste the code below in the "command on target" field Update the connectivity parameters Save and run with a standalone agent */ import oracle.odi.core.OdiInstance import oracle.odi.core.config.OdiInstanceConfig import oracle.odi.core.config.MasterRepositoryDbInfo import oracle.odi.core.config.WorkRepositoryDbInfo import oracle.odi.core.security.Authentication import oracle.odi.core.config.PoolingAttributes import oracle.odi.domain.project.OdiProject import oracle.odi.domain.project.finder.IOdiProjectFinder import oracle.odi.domain.project.finder.IOdiFolderFinder import oracle.odi.domain.project.finder.IOdiInterfaceFinder import oracle.odi.domain.model.finder.IOdiDataStoreFinder import oracle.odi.domain.topology.finder.IOdiContextFinder import oracle.odi.domain.project.OdiFolder import oracle.odi.domain.project.OdiInterface import oracle.odi.domain.project.interfaces.DataSet import oracle.odi.domain.model.OdiDataStore import oracle.odi.domain.topology.OdiContext import oracle.odi.core.persistence.transaction.ITransactionStatus import oracle.odi.core.persistence.transaction.support.DefaultTransactionDefinition import oracle.odi.interfaces.TargetIsTemporaryException import oracle.odi.interfaces.basic.NoSourceSetException import oracle.odi.interfaces.basic.support.BasicInterfaceCreationHelperWithActionsHelper import oracle.odi.interfaces.interactive.support.actions.InterfaceActionOnTargetDataStoreComputeAutoMapping import oracle.odi.interfaces.interactive.support.InteractiveInterfaceHelperWithActions import oracle.odi.interfaces.interactive.support.actions.InterfaceActionAddSourceDataStore import oracle.odi.interfaces.interactive.support.actions.InterfaceActionSetTargetDataStore import oracle.odi.interfaces.interactive.support.aliascomputers.AliasComputerDoubleChecker import oracle.odi.interfaces.interactive.support.clauseimporters.ClauseImporterLazy import oracle.odi.interfaces.interactive.support.mapping.automap.AutoMappingComputerLazy import oracle.odi.interfaces.interactive.support.mapping.matchpolicy.MappingMatchPolicyLazy import oracle.odi.interfaces.interactive.support.targetkeychoosers.TargetKeyChooserPrimaryKey import java.util.Collection import java.io.* /* ----------------------------------------------------------------------------------------- This job will list all projects, all folders under the projects, all subfolders under the folders, and all interfaces in the folders ans sub-folders. make sure to run this with a standalone agent to see the output - or modify the code to write to a file... ----------------------------------------------------------------------------------------- */ class Print { /* given an odiInstance, project code and folder name, we will print the name of all interfaces */ def Interfaces(odiInstance, projectCode, folderName){ def interfaceName def OdiInterfacesList = ((IOdiInterfaceFinder)odiInstance.getTransactionalEntityManager().getFinder(OdiInterface.class)).findByProject(projectCode, folderName) for (i in OdiInterfacesList) { interfaceName=i.getName() println("\t " + i.getName()) } } /* given an odiInstance, folder and project code, we will parse all subfolders (recursively) and print the name of all interfaces found at all levels*/ def SubFolder(odiInstance, Folder, projectCode, level){ def subFolderList, subFolder level=level+1 subFolderList=Folder.getSubFolders() if (subFolderList.size() == 0) { return } else{ for (s in subFolderList) { /* process interfaces of the current folder */ subFolder= s.getName() println('*'*level + ' ' + subFolder ) this.Interfaces(odiInstance, projectCode, subFolder) /* Process sub folders recursively */ this.SubFolder(odiInstance, s, projectCode, level) } } } } /* -------- Begin update section Replace the follwing values with your connectivity information. Alternatively, you can use ODI substitution APIs to fill in these parameters dynamically ----------- */ def url = "jdbc:oracle:thin:@localhost:1521:orcl" /*Master Repository: JDBC URL */ def driver = "oracle.jdbc.OracleDriver" /*Master Repository: JDBC driver */ def schema = "ODIM1115" /*Master Repository: Database user for schema access*/ def schemapwd = "ODIM1115PWD" /*Master Repository JDBC URL */ def workrep = "WORKREP1" /*Name of the Work Repository */ def odiuser= "SUPERVISOR" /* ODI User name used to connect to the repositories */ def odiuserpwd = "SUNOPSIS" /* ODI User password to connect to the repositories */ /* -------- End of update section ----------- */ def project /*Project Code*/ def folder /*Folder Name*/ def level=1 def masterInfo = new MasterRepositoryDbInfo(url, driver, schema, schemapwd.toCharArray(), new PoolingAttributes()) def workInfo = new WorkRepositoryDbInfo(workrep, new PoolingAttributes()) def odiInstance = OdiInstance.createInstance(new OdiInstanceConfig(masterInfo, workInfo)) def auth = odiInstance.getSecurityManager().createAuthentication(odiuser, odiuserpwd.toCharArray()) odiInstance.getSecurityManager().setCurrentThreadAuthentication(auth) def txnDef = new DefaultTransactionDefinition() def tm = odiInstance.getTransactionManager() def txnStatus = tm.getTransaction(txnDef) /* retrieve the list of all projects so that we can retrieve names and codes */ def odiProjectsList = (odiInstance.getTransactionalEntityManager().findAll(OdiProject.class)) def prt= new Print() for (p in odiProjectsList) { println('\nProject name: ' + p.getName() + ' \nProject Code: ' + p.getCode()) project=p.getCode() odiFoldersList = p.getFolders() for (f in odiFoldersList) { /* process interfaces of the current folder */ folder= f.getName() println('*'*level + ' ' + folder ) prt.Interfaces(odiInstance, project, folder) /* Process sub folders recursively */ prt.SubFolder(odiInstance, f, project, level) } } tm.commit(txnStatus)