// AddColumns.groovy // Choose a Model and add data warehouse audit columns. // Michael Rainey - Rittman Mead - 2013.04.07 import groovy.swing.SwingBuilder import java.awt.FlowLayout as FL import javax.swing.DefaultComboBoxModel import javax.swing.BoxLayout as BXL import groovy.beans.Bindable; import oracle.odi.core.persistence.transaction.support.DefaultTransactionDefinition; import oracle.odi.domain.util.ObfuscatedString; import oracle.odi.domain.model.OdiModel; import oracle.odi.domain.model.finder.IOdiModelFinder; import oracle.odi.domain.model.OdiDataStore; import oracle.odi.domain.model.OdiColumn; class Model{ @Bindable DefaultComboBoxModel toItems } def captureInput() { txnDef = new DefaultTransactionDefinition(); tm = odiInstance.getTransactionManager() txnStatus = tm.getTransaction(txnDef) models = [] modelFinder = (IOdiModelFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiModel.class); modelM = modelFinder.findAll(); conItr = modelM.iterator() //add each model to the models array. while (conItr.hasNext()) { mod = (OdiModel) conItr.next() models.add(mod.getCode()) } tm.commit(txnStatus) Model m=new Model() d = new java.awt.Dimension(205,20) m.toItems = new DefaultComboBoxModel(models as Object[]) def s = new SwingBuilder() s.setVariable('myDialog-properties',[:]) def vars = s.variables def dial = s.dialog(title:'Add Columns to ODI Model',id:'myDialog',modal:true) { panel() { boxLayout(axis:BXL.Y_AXIS) //display the models in a combobox. panel(alignmentX:0f) { flowLayout(alignment:FL.RIGHT) label('Model Code:') comboBox(id:'modelCode', 'model': bind {m.toItems}, null, preferredSize:d) } panel(alignmentX:0f) { flowLayout(alignment:FL.LEFT) button('OK',preferredSize:[80,24], actionPerformed:{ vars.dialogResult = 'OK' dispose() }) button('Cancel',preferredSize:[80,24], actionPerformed:{ vars.dialogResult = 'cancel' dispose() }) } } } dial.pack() dial.show() //return the selected model. return vars } def addColumns(modCode) { txnDef = new DefaultTransactionDefinition(); tm = odiInstance.getTransactionManager() txnStatus = tm.getTransaction(txnDef) modFinder = (IOdiModelFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiModel.class); mod = modFinder.findByCode(modCode); Collection dataStores = mod.getGlobalSubModel().getDataStores(); dsArray = dataStores.toArray(new OdiDataStore[0]); for (int i = 0; i <= dsArray.length - 1; i++) { //Get the DataStore. OdiDataStore ds = null; ds = dsArray[i]; blnExit = false for (col in ds.getColumns()) { if (col.getName().equals("EDW_SCN")) { blnExit = true } } if (!blnExit) { //Add the columns. OdiColumn col = new OdiColumn(ds, "EDW_SCN"); col.setDataTypeCode("NUMBER"); col.setMandatory(false); col.setLength(20); col.setScale(0); col = new OdiColumn(ds, "EDW_COMMIT_DATE"); col.setDataTypeCode("DATE"); col.setLength(23); col.setMandatory(false); col = new OdiColumn(ds, "EDW_DML_TYPE"); col.setDataTypeCode("VARCHAR2"); col.setMandatory(false); col.setLength(30); col = new OdiColumn(ds, "EDW_ROW_RANK"); col.setDataTypeCode("NUMBER"); col.setMandatory(false); col.setLength(20); col.setScale(0); odiInstance.getTransactionalEntityManager().persist(ds) } } tm.commit(txnStatus) return mod } //Capture the input and add columns to selected model if OK pressed. vars= captureInput() if (vars.dialogResult == 'OK') { addColumns(vars.modelCode.selectedItem) }