Generate All Scenario for a Particular Project using ODI SDK

Hi Friends!

First of all HAPPY NEW YEAR!

We, from ODI Experts, hope that 2012 be a fantastic year for all of you!

Continuing our “Java code series” take a look on this new one.

The below code is used to Generate/Regenerate  All Scenario and depending on the options the appropriate ODI Objects scenario will be generated/regenerated.

Also make sure you use the appropriate Generating option  i.e INCREMENTAL_MODE (OR)  REGENERATE_MODE (OR)   REPLACE_MODE

GenerationOptions options=new GenerationOptions(GenerationOptions.INCREMENTAL_MODE, GenerateFromPackage, GenerateFromInterface, GenerateFromProcedure, GenerateFromVariable);

package odi.sdk;

import oracle.odi.core.OdiInstance;
import oracle.odi.core.config.MasterRepositoryDbInfo;
import oracle.odi.core.config.OdiInstanceConfig;
import oracle.odi.core.config.PoolingAttributes;
import oracle.odi.core.config.WorkRepositoryDbInfo;
import oracle.odi.core.persistence.transaction.ITransactionStatus;
import oracle.odi.core.persistence.transaction.support.DefaultTransactionDefinition;
import oracle.odi.core.security.Authentication;
import oracle.odi.domain.project.OdiFolder;
import oracle.odi.domain.project.OdiProject;
import oracle.odi.domain.project.finder.IOdiProjectFinder;
import oracle.odi.domain.runtime.scenario.OdiScenario;
import oracle.odi.generation.GenerationOptions;
import oracle.odi.generation.support.OdiScenarioGeneratorImpl;
import oracle.odi.impexp.EncodingOptions;
import oracle.odi.impexp.support.ExportServiceImpl;

public class RegenrateAllScen {

    private static String Project_Code;
    private static OdiProject project;
    private static String   Folder_Name;
    private static OdiFolder folder;

    /**
     * @param args
     */
    public static void main(String[] args) {

         /****** Please change these Parameters *********/

        /** Development Repository ****/    

         String Url = "jdbc:oracle:thin:@localhost:1521:xe";
         String Driver="oracle.jdbc.OracleDriver";
         String Master_User="ODI_MASTER_11G";
         String Master_Pass="ODI_MASTER_11G";
         String WorkRep="WORKREP1";
         String Odi_User="SUPERVISOR";
         String Odi_Pass="SUNOPSIS";

      // Generating ODI Objects options

         Boolean GenerateFromInterface     = true;
         Boolean GenerateFromPackage       = true;
         Boolean GenerateFromProcedure     = true;
         Boolean GenerateFromVariable      = true;

         Project_Code   ="XMT";

         /********************************************/

 MasterRepositoryDbInfo masterInfo = new MasterRepositoryDbInfo(Url, Driver, Master_User,Master_Pass.toCharArray(), new PoolingAttributes());
 WorkRepositoryDbInfo workInfo = new WorkRepositoryDbInfo(WorkRep, new PoolingAttributes());
 OdiInstance odiInstance=OdiInstance.createInstance(new OdiInstanceConfig(masterInfo,workInfo));
 Authentication auth = odiInstance.getSecurityManager().createAuthentication(Odi_User,Odi_Pass.toCharArray());
 odiInstance.getSecurityManager().setCurrentThreadAuthentication(auth);
 ITransactionStatus trans = odiInstance.getTransactionManager().getTransaction(new DefaultTransactionDefinition());

//Regenerating All Scenario by Project
// Get Project
project = ((IOdiProjectFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiProject.class)).findByCode(Project_Code);

OdiScenarioGeneratorImpl generatescen=new OdiScenarioGeneratorImpl(odiInstance);
//
// Please change your Generating Option ie INCREMENTAL (or) REGENERATE (or) REPLACE
//
GenerationOptions options=new GenerationOptions(GenerationOptions.INCREMENTAL_MODE, GenerateFromPackage, GenerateFromInterface, GenerateFromProcedure, GenerateFromVariable);
OdiScenario[] scen =generatescen.generateAllScenarios(project, options);
for (OdiScenario odiScenario : scen) {
    System.out.println( options.getMode()+" Generating Scenario  " +odiScenario.getName()+"\t"+odiScenario.getVersion());
}

odiInstance.getTransactionManager().commit(trans);
System.out.println("Commiting Changes \n Process Completed");
odiInstance.close();

    }

}

Keeping visiting us!



Posted: January 5th, 2012 | Author: | Filed under: How to, ODI, SDK, Tips and Tricks | Tags: , , , , | Comments: No Comments »

Export and Importing Scenarios based on Project (or)Folder

Hi Everyone,

Keeping our “java series” we have one more piece of code to share.

I hope you “enjoy” it!

The below code is used to Export and Import all the Scenario from Development Work Rep to Execution Work Rep .

For Export there are 3 different options either Export all the scenario

  • For a Project (or)
  • For a Folder (or)
  • Scenarios matching a particular Time period .

Note : – Make sure you either delete the folder or delete all the scenario inside the Export Folder once successful import is done .

package odi.sdk;

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;

import oracle.odi.core.OdiInstance;
import oracle.odi.core.config.MasterRepositoryDbInfo;
import oracle.odi.core.config.OdiInstanceConfig;
import oracle.odi.core.config.PoolingAttributes;
import oracle.odi.core.config.WorkRepositoryDbInfo;
import oracle.odi.core.persistence.transaction.ITransactionStatus;
import oracle.odi.core.persistence.transaction.support.DefaultTransactionDefinition;
import oracle.odi.core.security.Authentication;
import oracle.odi.domain.project.IOdiScenarioSourceContainer;
import oracle.odi.domain.project.OdiFolder;
import oracle.odi.domain.project.OdiProject;
import oracle.odi.domain.project.finder.IOdiFolderFinder;
import oracle.odi.domain.project.finder.IOdiProjectFinder;
import oracle.odi.domain.runtime.scenario.OdiScenario;
import oracle.odi.domain.runtime.scenario.finder.IOdiScenarioFinder;
import oracle.odi.impexp.EncodingOptions;
import oracle.odi.impexp.OdiImportException;
import oracle.odi.impexp.support.ExportServiceImpl;
import oracle.odi.impexp.support.ImportServiceImpl;

public class ExportImport {

     private static String Project_Code;
     private static OdiProject project;
     private static String   Folder_Name;
     private static OdiFolder folder;

     /**
     * @param args
     * @throws IOException
     * @throws OdiImportException
     * @throws ParseException
     */

    public static void main(String[] args) throws IOException, OdiImportException, ParseException {

     /****** Please change these Parameters *********/

    /** Development Repository ****/    

     String Url = "jdbc:oracle:thin:@localhost:1521:xe";
     String Driver="oracle.jdbc.OracleDriver";
     String Master_User="ODI_MASTER_11G";
     String Master_Pass="ODI_MASTER_11G";
     String WorkRep="WORKREP1";
     String Odi_User="SUPERVISOR";
     String Odi_Pass="SUNOPSIS";

     /*** Execution Repository ***/
     // In case if your Execution rep is linked to a different Master repository please appropriately create new variables
     // The present codes assumes that Development and Execution are linked to the same Master Repository.

     String WorkRep_Execution="WORKREP_EXECUTION";

     /***************************************************/

     //Exporting Scenario Options

     String ExportFolderPath="/home/oracle/Documents/ODIExport";

     // While providing path in windows make sure you use \\
     Boolean ExportPackageScen      = true;
     Boolean ExportInterfaceScen    = true;
     Boolean ExportProcedureScen    = true;
     Boolean ExportVariableScen     = false;
     Boolean RecursiveExport        = true;
     Boolean OverWriteFile          = true;

     Project_Code   ="XMT";
     Folder_Name    ="FOLDER2";

     // Date based on which the scenario is compared
     SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy");
     Date date =df.parse("11-23-2011");

     /********************************************/

MasterRepositoryDbInfo masterInfo = new MasterRepositoryDbInfo(Url, Driver, Master_User,Master_Pass.toCharArray(), new PoolingAttributes());

/// Development Repository
WorkRepositoryDbInfo workInfo = new WorkRepositoryDbInfo(WorkRep, new PoolingAttributes());
OdiInstance odiInstance=OdiInstance.createInstance(new OdiInstanceConfig(masterInfo,workInfo));
Authentication auth = odiInstance.getSecurityManager().createAuthentication(Odi_User,Odi_Pass.toCharArray());
odiInstance.getSecurityManager().setCurrentThreadAuthentication(auth);
ITransactionStatus trans = odiInstance.getTransactionManager().getTransaction(new DefaultTransactionDefinition());

//Execution Repository

WorkRepositoryDbInfo workInfo_exec = new WorkRepositoryDbInfo(WorkRep_Execution, new PoolingAttributes());
OdiInstance odiInstance_exec=OdiInstance.createInstance(new OdiInstanceConfig(masterInfo,workInfo_exec));
Authentication auth_exec = odiInstance_exec.getSecurityManager().createAuthentication(Odi_User,Odi_Pass.toCharArray());
odiInstance_exec.getSecurityManager().setCurrentThreadAuthentication(auth_exec);
ITransactionStatus trans_exec = odiInstance_exec.getTransactionManager().getTransaction(new DefaultTransactionDefinition());

        //Export All Scenario by Project
        // Get Project
        project = ((IOdiProjectFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiProject.class)).findByCode(Project_Code);
        ExportServiceImpl export=new ExportServiceImpl(odiInstance);
        EncodingOptions EncdOption = new EncodingOptions();
        System.out.println( " Exporting all Scenario for the Project " +Project_Code);
        export.exportAllScenarii(project, ExportFolderPath, ExportPackageScen, ExportInterfaceScen, ExportProcedureScen, ExportVariableScen, EncdOption, RecursiveExport, OverWriteFile);    

        // ( or )

        // Export All Scenario by Folder
        // Find the folder
        Collection<OdiFolder> fold = ((IOdiFolderFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiFolder.class)).findByName(Folder_Name, Project_Code);
        for (Iterator<OdiFolder> it = fold.iterator(); it.hasNext();) {
             folder = (OdiFolder) it.next();
        }

        ExportServiceImpl export=new ExportServiceImpl(odiInstance);
        EncodingOptions EncdOption = new EncodingOptions();
        System.out.println( " Exporting all Scenario for the Project " +Project_Code+ " and Folder "+Folder_Name);
        export.exportAllScenarii(folder, ExportFolderPath, ExportPackageScen, ExportInterfaceScen, ExportProcedureScen, ExportVariableScen, EncdOption, RecursiveExport, OverWriteFile);    

        // ( or )

        // Export Selected Scenario based on date

        ExportServiceImpl export=new ExportServiceImpl(odiInstance);
        EncodingOptions EncdOption = new EncodingOptions();

        //Reading all scenario

        Collection odiscen= ((IOdiScenarioFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiScenario.class)).findAll();
        for (Object scen : odiscen) {
            OdiScenario odiscenario =(OdiScenario)scen ;
            if (odiscenario.getLastDate().before(date)) {
                System.out.println(" Exporting scenario  "+odiscenario.getName());
                export.exportToXml(odiscenario, ExportFolderPath, OverWriteFile, RecursiveExport, EncdOption);
            }
        }

        //Importing Scenarios in INSERT_UPDATE Mode
        // The below code import all the scenarios present in the Exported Folder path , so make sure older files are deleted
        ImportServiceImpl importsrvc=new ImportServiceImpl(odiInstance_exec);
        String[] XMLFiles=getXMLFiles(ExportFolderPath).split("\n");
        for (String xmlfile : XMLFiles) {
            System.out.println(" Importing scenario  XML "+xmlfile);
            importsrvc.importObjectFromXml(importsrvc.IMPORT_MODE_SYNONYM_INSERT_UPDATE, xmlfile, true);
        }

       // Commit and Close Transaction
       odiInstance.close();
       odiInstance_exec.getTransactionManager().commit(trans_exec);
       odiInstance_exec.close();

    }

    //Reading all the XML Files
    public static String getXMLFiles(String DirectoryName){

        String xmlfiles="";
        String files;
        File folder = new File(DirectoryName);
        File[] listOfFiles = folder.listFiles();
          for (int i = 0; i < listOfFiles.length; i++)
          {
           if (listOfFiles[i].isFile())
           {
           files = listOfFiles[i].getName();
               if (files.endsWith(".xml") || files.endsWith(".XML"))
               {
                   xmlfiles+=DirectoryName+"/"+files+"\n";
                }
           }}
        return xmlfiles;
  }

}

Good to see you around and please, keep visiting us!



Posted: November 27th, 2011 | Author: | Filed under: How to, Logic, ODI, Others, SDK, SQL, Tips and Tricks | Tags: , , , , , , , | Comments: 5 Comments »

Creating Interface for Single Source and Target

This particular Code generate Interface and Scenario for one single Source and Target. By default the target datastore name is used as the Interface Name

package odi_sdk;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

import oracle.odi.core.OdiInstance;
import oracle.odi.core.config.MasterRepositoryDbInfo;
import oracle.odi.core.config.OdiInstanceConfig;
import oracle.odi.core.config.PoolingAttributes;
import oracle.odi.core.config.WorkRepositoryDbInfo;
import oracle.odi.core.exception.OdiRuntimeException;
import oracle.odi.core.persistence.transaction.ITransactionStatus;
import oracle.odi.core.persistence.transaction.support.DefaultTransactionDefinition;
import oracle.odi.core.security.Authentication;
import oracle.odi.domain.model.OdiDataStore;
import oracle.odi.domain.model.finder.IOdiDataStoreFinder;
import oracle.odi.domain.project.OdiCKM;
import oracle.odi.domain.project.OdiFolder;
import oracle.odi.domain.project.OdiIKM;
import oracle.odi.domain.project.OdiInterface;
import oracle.odi.domain.project.OdiLKM;
import oracle.odi.domain.project.ProcedureOption;
import oracle.odi.domain.project.finder.IOdiCKMFinder;
import oracle.odi.domain.project.finder.IOdiFolderFinder;
import oracle.odi.domain.project.finder.IOdiIKMFinder;
import oracle.odi.domain.project.finder.IOdiLKMFinder;
import oracle.odi.domain.project.interfaces.DataSet;
import oracle.odi.domain.project.interfaces.SourceDataStore;
import oracle.odi.domain.project.interfaces.SourceSet;
import oracle.odi.domain.runtime.scenario.OdiScenario;
import oracle.odi.domain.topology.OdiContext;
import oracle.odi.domain.topology.finder.IOdiContextFinder;
import oracle.odi.generation.IOdiScenarioGenerator;
import oracle.odi.generation.support.OdiScenarioGeneratorImpl;
import oracle.odi.interfaces.interactive.support.InteractiveInterfaceHelperWithActions;
import oracle.odi.interfaces.interactive.support.actions.InterfaceActionOnTargetDataStoreComputeAutoMapping;
import oracle.odi.interfaces.interactive.support.actions.InterfaceActionSetKM;
import oracle.odi.interfaces.interactive.support.actions.InterfaceActionSetKM.KMType;
import oracle.odi.interfaces.interactive.support.actions.InterfaceActionSetKMOptionValue;
import oracle.odi.interfaces.interactive.support.actions.InterfaceActionSetTargetDataStore;
import oracle.odi.interfaces.interactive.support.km.optionretainer.KMOptionRetainerHomonymy;
import oracle.odi.interfaces.interactive.support.km.optionretainer.KMOptionRetainerLazy;
import oracle.odi.interfaces.interactive.support.mapping.automap.AutoMappingComputerLazy;
import oracle.odi.interfaces.interactive.support.mapping.matchpolicy.MappingMatchPolicyLazy;
import oracle.odi.interfaces.interactive.support.sourceset.creators.InexistentMappingException;
import oracle.odi.interfaces.interactive.support.targetkeychoosers.TargetKeyChooserPrimaryKey;

public class PermanentInterface {

	private static String Project_Code;
	private static String Folder_Name;
	private static OdiFolder folder;
	private static String Context_Code;
	private static OdiContext context;
	private static OdiDataStore sourceDatastore;
	private static OdiInterface odiInterface;
	private static String target_model_name;
	private static String source_model_name;
	private static String LKM;
	private static String IKM;
	private static String CKM;
	private static String source_datastore;
	private static String target_datastore;

	/**
	 * @param args
	 */
	public static void main(String[] args) {

              /****** Please change these Parameters *********/

		String Url = "jdbc:oracle:thin:@localhost:1521:orcl";
		String Driver="oracle.jdbc.OracleDriver";
		String Master_User="ODI_MASTER_11G";
		String Master_Pass="ODI_MASTER_11G";
		String WorkRep="WORKREP1";
		String Odi_User="SUPERVISOR";
		String Odi_Pass="SUNOPSIS";

                Project_Code="XMT";
		Context_Code="XMT";
		Folder_Name="FOLDER";
		source_model_name = "SRCE_HR";
		source_datastore="REGIONS";
		target_model_name = "TRGT_HR";
		target_datastore="REGIONS";

		LKM ="LKM SQL to Oracle";
		IKM ="IKM SQL Control Append";
		CKM ="CKM Oracle";

                /*****************************/

		// Connection
MasterRepositoryDbInfo masterInfo = new MasterRepositoryDbInfo(Url, Driver, Master_User,Master_Pass.toCharArray(), new PoolingAttributes());
WorkRepositoryDbInfo workInfo = new WorkRepositoryDbInfo(WorkRep, new PoolingAttributes());
OdiInstance odiInstance=OdiInstance.createInstance(new OdiInstanceConfig(masterInfo,workInfo));
Authentication auth = odiInstance.getSecurityManager().createAuthentication(Odi_User,Odi_Pass.toCharArray());
odiInstance.getSecurityManager().setCurrentThreadAuthentication(auth);
ITransactionStatus trans = odiInstance.getTransactionManager().getTransaction(new DefaultTransactionDefinition());

		// Find the folder

		Collection fold = ((IOdiFolderFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiFolder.class)).findByName(Folder_Name);
		for (Iterator it = fold.iterator(); it.hasNext();) {
			folder = (OdiFolder) it.next();
		}

		// Find the Context
		context = ((IOdiContextFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiContext.class)).findByCode(Context_Code);

		OdiDataStore targetDatastore = ((IOdiDataStoreFinder)odiInstance.getTransactionalEntityManager().
                getFinder(OdiDataStore.class)).findByName(target_datastore, target_model_name);
		// Reading the Source Data Store
		// Find the Data store using the IOdiDataStoreFinder
		sourceDatastore = ((IOdiDataStoreFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiDataStore.class)).
                findByName(source_datastore, source_model_name);

		System.out.println("Interface Creation Started for ..."+ target_datastore);
		// Creating a New Interface
		OdiInterface intf = new OdiInterface(folder, target_datastore, context);

		// Setting the above Context as the Optimization Context
		intf.setOptimizationContext(context);

		// Creating DataSet to automatically assign different
		// Source Data store
		// DataSet(OdiInterface pInterface, java.lang.String pName)

		DataSet dataset = intf.getDataSets().iterator().next();
		SourceSet srcset = new SourceSet("srcset0",dataset);
		SourceDataStore sd=new SourceDataStore(dataset,false,sourceDatastore.getName().toString(),0,sourceDatastore);
		srcset.addSourceDataStore(sd);

		// Helper is to manipulate Odi interfaces in an
		// interactive way

		InteractiveInterfaceHelperWithActions helper = new InteractiveInterfaceHelperWithActions
                (intf, odiInstance, odiInstance.getTransactionalEntityManager());

		helper.performAction(new InterfaceActionSetTargetDataStore(
				targetDatastore, new MappingMatchPolicyLazy(),
				new AutoMappingComputerLazy(),
				new AutoMappingComputerLazy(),
				new TargetKeyChooserPrimaryKey()));

		helper.performAction(new InterfaceActionOnTargetDataStoreComputeAutoMapping());

		// Add the Filter
		//helper.performAction(new InterfaceActionAddFilter(dataset, sd.getName(),ExecutionLocation.WORK));

		// Start mapping the KM
		// LKM
		Collection lkm1 = ((IOdiLKMFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiLKM.class)).findByName(
						LKM,Project_Code);

		for (Iterator iterator = lkm1.iterator(); iterator.hasNext();) {
			OdiLKM odiLKM = (OdiLKM) iterator.next();
			helper.performAction(new InterfaceActionSetKM(odiLKM,srcset, KMType.LKM,new KMOptionRetainerHomonymy()));

			// Fetching each option of the LKM
			for (ProcedureOption c : odiLKM.getOptions()) {
				helper.performAction(new InterfaceActionSetKMOptionValue(srcset, KMType.LKM,"DELETE_TEMPORARY_INDEXES", true));
			}
		}

		// IKM
		// Find the IKM using the IOdiIKMFinder

		Collection ikm1 = ((IOdiIKMFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiIKM.class)).findByName(
						IKM,Project_Code);

		for (Iterator iterator = ikm1.iterator(); iterator.hasNext();) {
			OdiIKM odiIKM = (OdiIKM) iterator.next();

			// Setting the IKM in the interface
			helper.performAction(new InterfaceActionSetKM(odiIKM, intf.getTargetDataStore(),KMType.IKM, new KMOptionRetainerLazy()));

			// Fetching each option of the IKM
			for (ProcedureOption c : odiIKM.getOptions()) {

				// Modifying the Options of the IKM in the
				// Interface
				helper.performAction(new InterfaceActionSetKMOptionValue(intf.getTargetDataStore(), KMType.IKM,
						"FLOW_CONTROL", false));

				helper.performAction(new InterfaceActionSetKMOptionValue(intf.getTargetDataStore(), KMType.IKM,
						"STATIC_CONTROL", true));

			}
		}

		// CKM
		Collection ckm1 = ((IOdiCKMFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiCKM.class)).findByName(
				CKM,Project_Code);

		for (Iterator iterator = ckm1.iterator(); iterator.hasNext();) {
			OdiCKM odiCKM = (OdiCKM) iterator.next();
			helper.performAction(new InterfaceActionSetKM(odiCKM, intf.getTargetDataStore(),KMType.CKM, new KMOptionRetainerLazy()));
		}

		// Compute the Interface sourceset

		try {helper.computeSourceSets();}
		catch (InexistentMappingException e) {throw new OdiRuntimeException(e);}

		// Persisting the Interface
		// Called to inform the ODI persistence layer that this
		// interface will be persisted
		try {helper.preparePersist();}
		catch (oracle.odi.interfaces.interactive.exceptions.OdiInterfaceNotReadyForPersistException e) {e.printStackTrace();}

		odiInstance.getTransactionalEntityManager().persist(intf);

		// Generating Scenarios 

		System.out.println("Generating Scenario for .."+ target_datastore );
		IOdiScenarioGenerator gene = new OdiScenarioGeneratorImpl(odiInstance);
		OdiScenario newScen = gene.generateScenario(intf,target_datastore, "001");
		odiInstance.getTransactionalEntityManager().persist(newScen);

		// Finally close the Instance
		odiInstance.getTransactionManager().commit(trans);
		odiInstance.close();

		System.out.println("Process Completed");
	}

}


Posted: November 16th, 2011 | Author: | Filed under: How to, ODI, SDK, Tips and Tricks | Comments: No Comments »