/*!
* Copyright 2010 - 2016 Pentaho Corporation. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.pentaho.di.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.EnumSet;
import java.util.List;
import java.util.Stack;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Ignore;
import org.junit.Test;
import org.pentaho.di.cluster.ClusterSchema;
import org.pentaho.di.cluster.SlaveServer;
import org.pentaho.di.core.CheckResultInterface;
import org.pentaho.di.core.Condition;
import org.pentaho.di.core.NotePadMeta;
import org.pentaho.di.core.Result;
import org.pentaho.di.core.annotations.JobEntry;
import org.pentaho.di.core.annotations.Step;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.core.logging.ChannelLogTable;
import org.pentaho.di.core.logging.JobEntryLogTable;
import org.pentaho.di.core.logging.JobLogTable;
import org.pentaho.di.core.logging.PerformanceLogTable;
import org.pentaho.di.core.logging.StepLogTable;
import org.pentaho.di.core.logging.TransLogTable;
import org.pentaho.di.core.row.RowMetaInterface;
import org.pentaho.di.core.variables.VariableSpace;
import org.pentaho.di.job.JobHopMeta;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.job.entry.JobEntryBase;
import org.pentaho.di.job.entry.JobEntryCopy;
import org.pentaho.di.job.entry.JobEntryInterface;
import org.pentaho.di.partition.PartitionSchema;
import org.pentaho.di.repository.ObjectRecipient.Type;
import org.pentaho.di.repository.pur.model.ObjectAce;
import org.pentaho.di.repository.pur.model.ObjectAcl;
import org.pentaho.di.repository.pur.model.RepositoryObjectAce;
import org.pentaho.di.repository.pur.model.RepositoryObjectRecipient;
import org.pentaho.di.trans.SlaveStepCopyPartitionDistribution;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransDependency;
import org.pentaho.di.trans.TransHopMeta;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.step.BaseStepMeta;
import org.pentaho.di.trans.step.StepDataInterface;
import org.pentaho.di.trans.step.StepErrorMeta;
import org.pentaho.di.trans.step.StepInterface;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.di.trans.step.StepMetaInterface;
import org.pentaho.di.trans.steps.tableinput.TableInputMeta;
import org.pentaho.di.ui.repository.pur.services.IAclService;
import org.pentaho.di.ui.repository.pur.services.ILockService;
import org.pentaho.di.ui.repository.pur.services.IRevisionService;
import org.pentaho.metastore.api.IMetaStore;
import org.pentaho.platform.api.repository2.unified.RepositoryFilePermission;
import org.w3c.dom.Node;
public abstract class RepositoryTestBase extends RepositoryTestLazySupport {
// ~ Static fields/initializers ======================================================================================
protected static final String EXP_USERNAME = "Apache Tomcat";
protected static final String EXP_LOGIN = "admin";
protected static final String EXP_TENANT = "acme";
protected static final String EXP_LOGIN_PLUS_TENANT = EXP_LOGIN + "-/pentaho/" + EXP_TENANT;
protected static final String VERSION_COMMENT_V1 = "hello";
protected static final String VERSION_LABEL_V1 = "1.0";
protected static final Log logger = LogFactory.getLog( RepositoryTestBase.class );
protected static final String DIR_CONNECTIONS = "connections";
protected static final String DIR_SCHEMAS = "schemas";
protected static final String DIR_SLAVES = "slaves";
protected static final String DIR_CLUSTERS = "clusters";
protected static final String DIR_TRANSFORMATIONS = "transformations";
protected static final String DIR_JOBS = "jobs";
protected static final String DIR_TMP = "tmp";
protected static final String EXP_JOB_NAME = "job1";
protected static final String EXP_JOB_DESC = "jobDesc";
protected static final String EXP_JOB_EXTENDED_DESC = "jobExtDesc";
protected static final String EXP_JOB_VERSION = "anything";
protected static final int EXP_JOB_STATUS = 12;
protected static final String EXP_JOB_CREATED_USER = "jerry";
protected static final Date EXP_JOB_CREATED_DATE = new Date();
protected static final String EXP_JOB_MOD_USER = "george";
protected static final Date EXP_JOB_MOD_DATE = new Date();
protected static final String EXP_JOB_PARAM_1_DESC = "param1desc";
protected static final String EXP_JOB_PARAM_1_NAME = "param1";
protected static final String EXP_JOB_PARAM_1_DEF = "param1default";
protected static final String EXP_JOB_LOG_TABLE_INTERVAL = "15";
protected static final String EXP_JOB_LOG_TABLE_CONN_NAME = "connName";
protected static final String EXP_JOB_LOG_TABLE_SCHEMA_NAME = "schemaName";
protected static final String EXP_JOB_LOG_TABLE_TABLE_NAME = "tableName";
protected static final String EXP_JOB_LOG_TABLE_TIMEOUT_IN_DAYS = "2";
protected static final String EXP_JOB_LOG_TABLE_SIZE_LIMIT = "250";
protected static final boolean EXP_JOB_BATCH_ID_PASSED = true;
protected static final String EXP_JOB_SHARED_OBJECTS_FILE = ".kettle/whatever";
protected static final String EXP_JOB_ENTRY_1_NAME = "createFile";
protected static final String EXP_JOB_ENTRY_1_FILENAME = "/tmp/whatever";
protected static final String EXP_JOB_ENTRY_2_NAME = "deleteFile";
protected static final String EXP_JOB_ENTRY_2_FILENAME = "/tmp/whatever";
protected static final int EXP_JOB_ENTRY_1_COPY_X_LOC = 10;
protected static final int EXP_JOB_ENTRY_1_COPY_Y_LOC = 10;
protected static final int EXP_JOB_ENTRY_2_COPY_X_LOC = 75;
protected static final int EXP_JOB_ENTRY_2_COPY_Y_LOC = 10;
protected static final int EXP_NOTEPAD_X = 10;
protected static final String EXP_NOTEPAD_NOTE = "blah";
protected static final int EXP_NOTEPAD_Y = 200;
protected static final int EXP_NOTEPAD_WIDTH = 50;
protected static final int EXP_NOTEPAD_HEIGHT = 25;
protected static final String EXP_DBMETA_NAME = "haha";
protected static final String EXP_DBMETA_HOSTNAME = "acme";
protected static final String EXP_DBMETA_TYPE = "ORACLE";
protected static final int EXP_DBMETA_ACCESS = DatabaseMeta.TYPE_ACCESS_NATIVE;
protected static final String EXP_DBMETA_DBNAME = "lksjdf";
protected static final String EXP_DBMETA_PORT = "10521";
protected static final String EXP_DBMETA_USERNAME = "elaine";
protected static final String EXP_DBMETA_PASSWORD = "password";
protected static final String EXP_DBMETA_SERVERNAME = "serverName";
protected static final String EXP_DBMETA_DATA_TABLESPACE = "dataTablespace";
protected static final String EXP_DBMETA_INDEX_TABLESPACE = "indexTablespace";
protected static final String EXP_SLAVE_NAME = "slave54545";
protected static final String EXP_SLAVE_HOSTNAME = "slave98745";
protected static final String EXP_SLAVE_PORT = "11111";
protected static final String EXP_SLAVE_USERNAME = "cosmo";
protected static final String EXP_SLAVE_PASSWORD = "password";
protected static final String EXP_SLAVE_PROXY_HOSTNAME = "proxySlave542254";
protected static final String EXP_SLAVE_PROXY_PORT = "11112";
protected static final String EXP_SLAVE_NON_PROXY_HOSTS = "ljksdflsdf";
protected static final boolean EXP_SLAVE_MASTER = true;
protected static final String EXP_SLAVE_HOSTNAME_V2 = "slave98561111";
protected static final String EXP_DBMETA_HOSTNAME_V2 = "acme98734";
protected static final String VERSION_COMMENT_V2 = "v2 blah blah blah";
protected static final String EXP_JOB_DESC_V2 = "jobDesc0368";
protected static final String EXP_TRANS_NAME = "transMeta";
protected static final String EXP_TRANS_DESC = "transMetaDesc";
protected static final String EXP_TRANS_EXTENDED_DESC = "transMetaExtDesc";
protected static final String EXP_TRANS_VERSION = "2.0";
protected static final int EXP_TRANS_STATUS = 2;
protected static final String EXP_TRANS_PARAM_1_DESC = "transParam1Desc";
protected static final String EXP_TRANS_PARAM_1_DEF = "transParam1Def";
protected static final String EXP_TRANS_PARAM_1_NAME = "transParamName";
protected static final String EXP_TRANS_CREATED_USER = "newman";
protected static final Date EXP_TRANS_CREATED_DATE = new Date();
protected static final String EXP_TRANS_MOD_USER = "banya";
protected static final Date EXP_TRANS_MOD_DATE = new Date();
protected static final String EXP_TRANS_LOG_TABLE_CONN_NAME = "transLogTableConnName";
protected static final String EXP_TRANS_LOG_TABLE_INTERVAL = "34";
protected static final String EXP_TRANS_LOG_TABLE_SCHEMA_NAME = "transLogTableSchemaName";
protected static final String EXP_TRANS_LOG_TABLE_SIZE_LIMIT = "600";
protected static final String EXP_TRANS_LOG_TABLE_TABLE_NAME = "transLogTableTableName";
protected static final String EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS = "5";
protected static final String EXP_TRANS_MAX_DATE_TABLE = "transMaxDateTable";
protected static final String EXP_TRANS_MAX_DATE_FIELD = "transMaxDateField";
protected static final double EXP_TRANS_MAX_DATE_OFFSET = 55;
protected static final double EXP_TRANS_MAX_DATE_DIFF = 70;
protected static final int EXP_TRANS_SIZE_ROWSET = 833;
protected static final int EXP_TRANS_SLEEP_TIME_EMPTY = 4;
protected static final int EXP_TRANS_SLEEP_TIME_FULL = 9;
protected static final boolean EXP_TRANS_USING_UNIQUE_CONN = true;
protected static final boolean EXP_TRANS_FEEDBACK_SHOWN = true;
protected static final int EXP_TRANS_FEEDBACK_SIZE = 222;
protected static final boolean EXP_TRANS_USING_THREAD_PRIORITY_MGMT = true;
protected static final String EXP_TRANS_SHARED_OBJECTS_FILE = "transSharedObjectsFile";
protected static final boolean EXP_TRANS_CAPTURE_STEP_PERF_SNAPSHOTS = true;
protected static final long EXP_TRANS_STEP_PERF_CAP_DELAY = 81;
protected static final String EXP_TRANS_DEP_TABLE_NAME = "KLKJSDF";
protected static final String EXP_TRANS_DEP_FIELD_NAME = "lkjsdfflll11";
protected static final String EXP_PART_SCHEMA_NAME = "partitionSchemaName";
protected static final String EXP_PART_SCHEMA_PARTID_2 = "partitionSchemaId2";
protected static final boolean EXP_PART_SCHEMA_DYN_DEF = true;
protected static final String EXP_PART_SCHEMA_PART_PER_SLAVE_COUNT = "562";
protected static final String EXP_PART_SCHEMA_PARTID_1 = "partitionSchemaId1";
protected static final String EXP_PART_SCHEMA_DESC = "partitionSchemaDesc";
protected static final String EXP_PART_SCHEMA_PART_PER_SLAVE_COUNT_V2 = "563";
protected static final String EXP_CLUSTER_SCHEMA_NAME = "clusterSchemaName";
protected static final String EXP_CLUSTER_SCHEMA_SOCKETS_BUFFER_SIZE = "2048";
protected static final String EXP_CLUSTER_SCHEMA_BASE_PORT = "12456";
protected static final String EXP_CLUSTER_SCHEMA_SOCKETS_FLUSH_INTERVAL = "1500";
protected static final boolean EXP_CLUSTER_SCHEMA_SOCKETS_COMPRESSED = true;
protected static final boolean EXP_CLUSTER_SCHEMA_DYN = true;
protected static final String EXP_CLUSTER_SCHEMA_BASE_PORT_V2 = "12457";
protected static final String EXP_TRANS_STEP_1_NAME = "transStep1";
protected static final String EXP_TRANS_STEP_2_NAME = "transStep2";
protected static final boolean EXP_TRANS_STEP_ERROR_META_1_ENABLED = true;
protected static final String EXP_TRANS_STEP_ERROR_META_1_NR_ERRORS_VALUE_NAME = "ihwefmcd";
protected static final String EXP_TRANS_STEP_ERROR_META_1_DESC_VALUE_NAME = "lxeslsdff";
protected static final String EXP_TRANS_STEP_ERROR_META_1_FIELDS_VALUE_NAME = "uiwcm";
protected static final String EXP_TRANS_STEP_ERROR_META_1_CODES_VALUE_NAME = "wedsse";
protected static final String EXP_TRANS_STEP_ERROR_META_1_MAX_ERRORS = "2000";
protected static final String EXP_TRANS_STEP_ERROR_META_1_MAX_PERCENT_ERRORS = "29";
protected static final String EXP_TRANS_STEP_ERROR_META_1_MIN_PERCENT_ROWS = "12";
protected static final boolean EXP_TRANS_SLAVE_TRANSFORMATION = true;
protected static final String EXP_TRANS_DESC_V2 = "transMetaDesc2";
protected static final String EXP_TRANS_LOCK_MSG = "98u344jerfnsdmklfe";
protected static final String EXP_JOB_LOCK_MSG = "ihesfdnmsdm348iesdm";
protected static final String DIR_TMP2_NEW_NAME = "tmp2_new";
protected static final String DIR_TMP2 = "tmp2";
protected static final String EXP_JOB_NAME_NEW = "job98u34u5";
protected static final String EXP_TRANS_NAME_NEW = "trans98jksdf32";
protected static final String EXP_DBMETA_NAME_NEW = "database983kdaerer";
private static final String EXP_DBMETA_ATTR1_VALUE = "LKJSDFKDSJKF";
private static final String EXP_DBMETA_ATTR1_KEY = "IOWUEIOUEWR";
private static final String EXP_DBMETA_ATTR2_KEY = "XDKDSDF";
private static final String EXP_DBMETA_ATTR2_VALUE = "POYIUPOUI";
private static final String EXP_DBMETA2_NAME = "abc_db2";
private static final String EXP_DBMETA_NAME_STEP = "khdfsghk438";
private static final String EXP_DBMETA_NAME_JOB = "KLJSDFJKL2";
// ~ Instance fields =================================================================================================
protected RepositoryMeta repositoryMeta;
protected Repository repository;
protected UserInfo userInfo;
// necessary to delete in the correct order to avoid referential integrity problems
protected Stack<RepositoryElementInterface> deleteStack;
// ~ Constructors ====================================================================================================
public RepositoryTestBase( Boolean lazyRepo ) {
super( lazyRepo );
}
// ~ Methods =========================================================================================================
public void setUp() throws Exception {
deleteStack = new Stack<RepositoryElementInterface>();
}
public void tearDown() throws Exception {
while ( !deleteStack.empty() ) {
delete( deleteStack.pop().getObjectId() );
}
}
protected abstract void delete( ObjectId id );
/**
* getUserInfo() getVersion() getName() isConnected() getRepositoryMeta() getLog()
*/
@Test
public void testVarious() throws Exception {
// unfortunately UserInfo doesn't override equals()
// for now, disable user checks, as a connection isn't made so no
// user info is available
// UserInfo userInfo = repository.getUserInfo();
// assertEquals(EXP_LOGIN, userInfo.getName());
// assertEquals("password", userInfo.getPassword());
// assertEquals(EXP_USERNAME, userInfo.getUsername());
// assertEquals("Apache Tomcat user", userInfo.getDescription());
// assertTrue(userInfo.isEnabled());
assertEquals( VERSION_LABEL_V1, repository.getVersion() );
assertEquals( "JackRabbit", repository.getName() );
assertTrue( repository.isConnected() );
RepositoryMeta repoMeta = repository.getRepositoryMeta();
assertEquals( "JackRabbit", repoMeta.getName() );
assertEquals( "JackRabbit test repository", repoMeta.getDescription() );
RepositoryCapabilities caps = repoMeta.getRepositoryCapabilities();
assertTrue( caps.supportsUsers() );
assertTrue( caps.managesUsers() );
assertFalse( caps.isReadOnly() );
assertTrue( caps.supportsRevisions() );
assertTrue( caps.supportsMetadata() );
assertTrue( caps.supportsLocking() );
assertTrue( caps.hasVersionRegistry() );
assertNotNull( repository.getLog() );
}
protected RepositoryDirectoryInterface initRepo() throws Exception {
RepositoryDirectoryInterface startDir = loadStartDirectory();
repository.createRepositoryDirectory( startDir, DIR_CONNECTIONS );
repository.createRepositoryDirectory( startDir, DIR_SCHEMAS );
repository.createRepositoryDirectory( startDir, DIR_SLAVES );
repository.createRepositoryDirectory( startDir, DIR_CLUSTERS );
repository.createRepositoryDirectory( startDir, DIR_TRANSFORMATIONS );
repository.createRepositoryDirectory( startDir, DIR_JOBS );
return loadStartDirectory();
}
/**
* createRepositoryDirectory() loadRepositoryTree() deleteRepositoryDirectory() getDirectoryNames()
* saveRepositoryDirectory()
*/
@Ignore
@Test
public void testDirectories() throws Exception {
RepositoryDirectoryInterface startDir = loadStartDirectory();
RepositoryDirectoryInterface connDir = repository.createRepositoryDirectory( startDir, DIR_CONNECTIONS );
assertNotNull( connDir );
assertNotNull( connDir.getObjectId() );
assertEquals( startDir.getPath()
+ ( startDir.getPath().endsWith( "/" ) ? "" : RepositoryDirectory.DIRECTORY_SEPARATOR ) + DIR_CONNECTIONS,
connDir.getPath() );
repository.createRepositoryDirectory( startDir, DIR_SCHEMAS );
repository.createRepositoryDirectory( startDir, DIR_SLAVES );
repository.saveRepositoryDirectory( new RepositoryDirectory( startDir, DIR_CLUSTERS ) );
repository.createRepositoryDirectory( startDir, DIR_TRANSFORMATIONS );
repository.createRepositoryDirectory( startDir, DIR_JOBS );
startDir = loadStartDirectory();
assertNotNull( startDir.findDirectory( DIR_CONNECTIONS ) );
assertNotNull( startDir.findDirectory( DIR_SCHEMAS ) );
assertNotNull( startDir.findDirectory( DIR_SLAVES ) );
assertNotNull( startDir.findDirectory( DIR_CLUSTERS ) );
assertNotNull( startDir.findDirectory( DIR_TRANSFORMATIONS ) );
assertNotNull( startDir.findDirectory( DIR_JOBS ) );
RepositoryDirectoryInterface tmpDir = repository.createRepositoryDirectory( startDir, DIR_TMP );
repository.deleteRepositoryDirectory( tmpDir );
startDir = loadStartDirectory();
assertNull( startDir.findDirectory( DIR_TMP ) );
RepositoryDirectoryInterface moveTestDestDir = repository.createRepositoryDirectory( startDir, "moveTestDest" );
assertNotNull( moveTestDestDir.getObjectId() );
RepositoryDirectoryInterface moveTestSrcDir = repository.createRepositoryDirectory( startDir, "moveTestSrc" );
assertNotNull( moveTestSrcDir.getObjectId() );
// Rename and move the folder
repository.renameRepositoryDirectory( moveTestSrcDir.getObjectId(), moveTestDestDir, "moveTestSrcNewName" );
startDir = loadStartDirectory();
assertNull( startDir.findDirectory( "moveTestSrc" ) );
assertNotNull( startDir.findDirectory( "moveTestDest/moveTestSrcNewName" ) );
String[] dirs = repository.getDirectoryNames( startDir.getObjectId() );
assertEquals( 7, dirs.length );
boolean foundDir = false;
for ( String dir : dirs ) {
if ( dir.equals( DIR_CONNECTIONS ) ) { // spot check
foundDir = true;
break;
}
}
assertTrue( foundDir );
}
protected RepositoryDirectoryInterface loadStartDirectory() throws Exception {
return repository.loadRepositoryDirectoryTree();
}
/**
* save(job) loadJob() exists() deleteJob() getJobNames() getJobObjects() getJobId() getJobLock() lockJob()
* unlockJob()
*/
@Ignore
@Test
public void testJobs() throws Exception {
ILockService service = (ILockService) repository.getService( ILockService.class );
RepositoryDirectoryInterface rootDir = initRepo();
JobMeta jobMeta = createJobMeta( EXP_JOB_NAME );
RepositoryDirectoryInterface jobsDir = rootDir.findDirectory( DIR_JOBS );
repository.save( jobMeta, VERSION_COMMENT_V1, null );
deleteStack.push( jobMeta );
assertNotNull( jobMeta.getObjectId() );
ObjectRevision version = jobMeta.getObjectRevision();
assertNotNull( version );
assertTrue( hasVersionWithComment( jobMeta, VERSION_COMMENT_V1 ) );
assertTrue( repository.exists( EXP_JOB_NAME, jobsDir, RepositoryObjectType.JOB ) );
JobMeta fetchedJob = repository.loadJob( EXP_JOB_NAME, jobsDir, null, null );
assertEquals( EXP_JOB_NAME, fetchedJob.getName() );
assertEquals( EXP_JOB_DESC, fetchedJob.getDescription() );
assertEquals( EXP_JOB_EXTENDED_DESC, fetchedJob.getExtendedDescription() );
assertEquals( jobsDir.getPath(), fetchedJob.getRepositoryDirectory().getPath() );
assertEquals( EXP_JOB_VERSION, fetchedJob.getJobversion() );
assertEquals( EXP_JOB_STATUS, fetchedJob.getJobstatus() );
assertEquals( EXP_JOB_CREATED_USER, fetchedJob.getCreatedUser() );
assertEquals( EXP_JOB_CREATED_DATE, fetchedJob.getCreatedDate() );
assertEquals( EXP_JOB_MOD_USER, fetchedJob.getModifiedUser() );
assertEquals( EXP_JOB_MOD_DATE, fetchedJob.getModifiedDate() );
assertEquals( 1, fetchedJob.listParameters().length );
assertEquals( EXP_JOB_PARAM_1_DEF, fetchedJob.getParameterDefault( EXP_JOB_PARAM_1_NAME ) );
assertEquals( EXP_JOB_PARAM_1_DESC, fetchedJob.getParameterDescription( EXP_JOB_PARAM_1_NAME ) );
// JobLogTable jobLogTable = fetchedJob.getJobLogTable();
// TODO mlowery why doesn't this work?
// assertEquals(EXP_LOG_TABLE_CONN_NAME, jobLogTable.getConnectionName());
// assertEquals(EXP_JOB_LOG_TABLE_INTERVAL, jobLogTable.getLogInterval());
// assertEquals(EXP_LOG_TABLE_SCHEMA_NAME, jobLogTable.getSchemaName());
// assertEquals(EXP_LOG_TABLE_SIZE_LIMIT, jobLogTable.getLogSizeLimit());
// assertEquals(EXP_LOG_TABLE_TABLE_NAME, jobLogTable.getTableName());
// assertEquals(EXP_LOG_TABLE_TIMEOUT_IN_DAYS, jobLogTable.getTimeoutInDays());
// JobEntryLogTable jobEntryLogTable = fetchedJob.getJobEntryLogTable();
// TODO mlowery why doesn't this work?
// assertEquals(EXP_LOG_TABLE_CONN_NAME, jobEntryLogTable.getConnectionName());
// assertEquals(EXP_LOG_TABLE_SCHEMA_NAME, jobEntryLogTable.getSchemaName());
// assertEquals(EXP_LOG_TABLE_TABLE_NAME, jobEntryLogTable.getTableName());
// assertEquals(EXP_LOG_TABLE_TIMEOUT_IN_DAYS, jobEntryLogTable.getTimeoutInDays());
// ChannelLogTable channelLogTable = fetchedJob.getChannelLogTable();
// TODO mlowery why doesn't this work?
// assertEquals(EXP_LOG_TABLE_CONN_NAME, channelLogTable.getConnectionName());
// assertEquals(EXP_LOG_TABLE_SCHEMA_NAME, channelLogTable.getSchemaName());
// assertEquals(EXP_LOG_TABLE_TABLE_NAME, channelLogTable.getTableName());
// assertEquals(EXP_LOG_TABLE_TIMEOUT_IN_DAYS, channelLogTable.getTimeoutInDays());
assertEquals( EXP_JOB_BATCH_ID_PASSED, fetchedJob.isBatchIdPassed() );
assertEquals( EXP_JOB_SHARED_OBJECTS_FILE, fetchedJob.getSharedObjectsFile() );
assertEquals( 2, fetchedJob.getJobCopies().size() );
assertEquals( "JobEntryAttributeTester", fetchedJob.getJobEntry( 0 ).getEntry().getPluginId() );
assertEquals( EXP_JOB_ENTRY_1_COPY_X_LOC, fetchedJob.getJobEntry( 0 ).getLocation().x );
assertEquals( EXP_JOB_ENTRY_1_COPY_Y_LOC, fetchedJob.getJobEntry( 0 ).getLocation().y );
assertEquals( "JobEntryAttributeTester", fetchedJob.getJobEntry( 1 ).getEntry().getPluginId() );
assertEquals( EXP_JOB_ENTRY_2_COPY_X_LOC, fetchedJob.getJobEntry( 1 ).getLocation().x );
assertEquals( EXP_JOB_ENTRY_2_COPY_Y_LOC, fetchedJob.getJobEntry( 1 ).getLocation().y );
assertEquals( 1, fetchedJob.getJobhops().size() );
assertEquals( EXP_JOB_ENTRY_1_NAME, fetchedJob.getJobHop( 0 ).getFromEntry().getEntry().getName() );
assertEquals( "JobEntryAttributeTester", fetchedJob.getJobHop( 0 ).getFromEntry().getEntry().getPluginId() );
assertEquals( EXP_JOB_ENTRY_2_NAME, fetchedJob.getJobHop( 0 ).getToEntry().getEntry().getName() );
assertEquals( "JobEntryAttributeTester", fetchedJob.getJobHop( 0 ).getToEntry().getEntry().getPluginId() );
assertEquals( 1, fetchedJob.getNotes().size() );
assertTrue( fetchedJob.getNote( 0 ).getNote().startsWith( EXP_NOTEPAD_NOTE ) );
assertEquals( EXP_NOTEPAD_X, fetchedJob.getNote( 0 ).getLocation().x );
assertEquals( EXP_NOTEPAD_Y, fetchedJob.getNote( 0 ).getLocation().y );
assertEquals( EXP_NOTEPAD_WIDTH, fetchedJob.getNote( 0 ).getWidth() );
assertEquals( EXP_NOTEPAD_HEIGHT, fetchedJob.getNote( 0 ).getHeight() );
JobMeta jobMetaById = repository.loadJob( jobMeta.getObjectId(), null );
assertEquals( fetchedJob, jobMetaById );
assertNull( service.getJobLock( jobMeta.getObjectId() ) );
service.lockJob( jobMeta.getObjectId(), EXP_JOB_LOCK_MSG );
assertEquals( EXP_JOB_LOCK_MSG, service.getJobLock( jobMeta.getObjectId() ).getMessage() );
assertEquals( getDate( new Date() ), getDate( service.getJobLock( jobMeta.getObjectId() ).getLockDate() ) );
assertEquals( EXP_LOGIN_PLUS_TENANT, service.getJobLock( jobMeta.getObjectId() ).getLogin() );
// TODO mlowery currently PUR lock only stores "login"; why do we need username too?
// assertEquals(EXP_USERNAME, repository.getJobLock(jobMeta.getObjectId()).getUsername());
assertEquals( jobMeta.getObjectId(), service.getJobLock( jobMeta.getObjectId() ).getObjectId() );
service.unlockJob( jobMeta.getObjectId() );
assertNull( service.getJobLock( jobMeta.getObjectId() ) );
jobMeta.setDescription( EXP_JOB_DESC_V2 );
repository.save( jobMeta, VERSION_COMMENT_V2, null );
assertEquals( VERSION_COMMENT_V2, jobMeta.getObjectRevision().getComment() );
fetchedJob = repository.loadJob( EXP_JOB_NAME, jobsDir, null, null );
assertEquals( EXP_JOB_DESC_V2, fetchedJob.getDescription() );
fetchedJob = repository.loadJob( EXP_JOB_NAME, jobsDir, null, VERSION_LABEL_V1 );
assertEquals( EXP_JOB_DESC, fetchedJob.getDescription() );
jobMetaById = repository.loadJob( jobMeta.getObjectId(), VERSION_LABEL_V1 );
assertEquals( fetchedJob, jobMetaById );
assertEquals( jobMeta.getObjectId(), repository.getJobId( EXP_JOB_NAME, jobsDir ) );
assertEquals( 1, repository.getJobObjects( jobsDir.getObjectId(), false ).size() );
assertEquals( 1, repository.getJobObjects( jobsDir.getObjectId(), true ).size() );
assertEquals( jobMeta.getName(), repository.getJobObjects( jobsDir.getObjectId(), false ).get( 0 ).getName() );
assertEquals( 1, repository.getJobNames( jobsDir.getObjectId(), false ).length );
assertEquals( 1, repository.getJobNames( jobsDir.getObjectId(), true ).length );
assertEquals( jobMeta.getName(), repository.getJobNames( jobsDir.getObjectId(), false )[0] );
repository.deleteJob( jobMeta.getObjectId() );
assertFalse( repository.exists( EXP_JOB_NAME, jobsDir, RepositoryObjectType.JOB ) );
assertEquals( 0, repository.getJobObjects( jobsDir.getObjectId(), false ).size() );
assertEquals( 1, repository.getJobObjects( jobsDir.getObjectId(), true ).size() );
assertEquals( jobMeta.getName(), repository.getJobObjects( jobsDir.getObjectId(), true ).get( 0 ).getName() );
assertEquals( 0, repository.getJobNames( jobsDir.getObjectId(), false ).length );
assertEquals( 1, repository.getJobNames( jobsDir.getObjectId(), true ).length );
assertEquals( jobMeta.getName(), repository.getJobNames( jobsDir.getObjectId(), true )[0] );
}
@SuppressWarnings( "deprecation" )
private int getDate( Date date ) {
return date.getDate();
}
protected JobMeta createJobMeta( String jobName ) throws Exception {
RepositoryDirectoryInterface rootDir = loadStartDirectory();
JobMeta jobMeta = new JobMeta();
jobMeta.setName( jobName );
jobMeta.setDescription( EXP_JOB_DESC );
jobMeta.setExtendedDescription( EXP_JOB_EXTENDED_DESC );
jobMeta.setRepositoryDirectory( rootDir.findDirectory( DIR_JOBS ) );
jobMeta.setJobversion( EXP_JOB_VERSION );
jobMeta.setJobstatus( EXP_JOB_STATUS );
jobMeta.setCreatedUser( EXP_JOB_CREATED_USER );
jobMeta.setCreatedDate( EXP_JOB_CREATED_DATE );
jobMeta.setModifiedUser( EXP_JOB_MOD_USER );
jobMeta.setModifiedDate( EXP_JOB_MOD_DATE );
jobMeta.addParameterDefinition( EXP_JOB_PARAM_1_NAME, EXP_JOB_PARAM_1_DEF, EXP_JOB_PARAM_1_DESC );
// TODO mlowery other jobLogTable fields could be set for testing here
JobLogTable jobLogTable = JobLogTable.getDefault( jobMeta, jobMeta );
jobLogTable.setConnectionName( EXP_JOB_LOG_TABLE_CONN_NAME );
jobLogTable.setLogInterval( EXP_JOB_LOG_TABLE_INTERVAL );
jobLogTable.setSchemaName( EXP_JOB_LOG_TABLE_SCHEMA_NAME );
jobLogTable.setLogSizeLimit( EXP_JOB_LOG_TABLE_SIZE_LIMIT );
jobLogTable.setTableName( EXP_JOB_LOG_TABLE_TABLE_NAME );
jobLogTable.setTimeoutInDays( EXP_JOB_LOG_TABLE_TIMEOUT_IN_DAYS );
jobMeta.setJobLogTable( jobLogTable );
// TODO mlowery other jobEntryLogTable fields could be set for testing here
JobEntryLogTable jobEntryLogTable = JobEntryLogTable.getDefault( jobMeta, jobMeta );
jobEntryLogTable.setConnectionName( EXP_JOB_LOG_TABLE_CONN_NAME );
jobEntryLogTable.setSchemaName( EXP_JOB_LOG_TABLE_SCHEMA_NAME );
jobEntryLogTable.setTableName( EXP_JOB_LOG_TABLE_TABLE_NAME );
jobEntryLogTable.setTimeoutInDays( EXP_JOB_LOG_TABLE_TIMEOUT_IN_DAYS );
jobMeta.setJobEntryLogTable( jobEntryLogTable );
// TODO mlowery other channelLogTable fields could be set for testing here
ChannelLogTable channelLogTable = ChannelLogTable.getDefault( jobMeta, jobMeta );
channelLogTable.setConnectionName( EXP_JOB_LOG_TABLE_CONN_NAME );
channelLogTable.setSchemaName( EXP_JOB_LOG_TABLE_SCHEMA_NAME );
channelLogTable.setTableName( EXP_JOB_LOG_TABLE_TABLE_NAME );
channelLogTable.setTimeoutInDays( EXP_JOB_LOG_TABLE_TIMEOUT_IN_DAYS );
jobMeta.setChannelLogTable( channelLogTable );
jobMeta.setBatchIdPassed( EXP_JOB_BATCH_ID_PASSED );
jobMeta.setSharedObjectsFile( EXP_JOB_SHARED_OBJECTS_FILE );
DatabaseMeta entryDbMeta = createDatabaseMeta( EXP_DBMETA_NAME_JOB.concat( jobName ) );
repository.save( entryDbMeta, VERSION_COMMENT_V1, null );
deleteStack.push( entryDbMeta );
JobEntryCopy jobEntryCopy1 = createJobEntry1Copy( entryDbMeta );
jobMeta.addJobEntry( jobEntryCopy1 );
JobEntryCopy jobEntryCopy2 = createJobEntry2Copy( entryDbMeta );
jobMeta.addJobEntry( jobEntryCopy2 );
jobMeta.addJobHop( createJobHopMeta( jobEntryCopy1, jobEntryCopy2 ) );
jobMeta.addNote( createNotePadMeta( jobName ) );
return jobMeta;
}
/**
* save(trans) loadTransformation() exists() getTransformationLock() lockTransformation() unlockTransformation()
* getTransformationID() getTransformationObjects() getTransformationNames()
*/
@Ignore
@Test
public void testTransformations() throws Exception {
ILockService service = (ILockService) repository.getService( ILockService.class );
RepositoryDirectoryInterface rootDir = initRepo();
String uniqueTransName = EXP_TRANS_NAME.concat( EXP_DBMETA_NAME );
TransMeta transMeta = createTransMeta( EXP_DBMETA_NAME );
// Create a database association
DatabaseMeta dbMeta = createDatabaseMeta( EXP_DBMETA_NAME );
repository.save( dbMeta, VERSION_COMMENT_V1, null );
TableInputMeta tableInputMeta = new TableInputMeta();
tableInputMeta.setDatabaseMeta( dbMeta );
transMeta.addStep( new StepMeta( EXP_TRANS_STEP_1_NAME, tableInputMeta ) );
RepositoryDirectoryInterface transDir = rootDir.findDirectory( DIR_TRANSFORMATIONS );
repository.save( transMeta, VERSION_COMMENT_V1, null );
deleteStack.push( transMeta );
assertNotNull( transMeta.getObjectId() );
ObjectRevision version = transMeta.getObjectRevision();
assertNotNull( version );
assertTrue( hasVersionWithComment( transMeta, VERSION_COMMENT_V1 ) );
assertTrue( repository.exists( uniqueTransName, transDir, RepositoryObjectType.TRANSFORMATION ) );
TransMeta fetchedTrans = repository.loadTransformation( uniqueTransName, transDir, null, false, null );
assertEquals( uniqueTransName, fetchedTrans.getName() );
assertEquals( EXP_TRANS_DESC, fetchedTrans.getDescription() );
assertEquals( EXP_TRANS_EXTENDED_DESC, fetchedTrans.getExtendedDescription() );
assertEquals( transDir.getPath(), fetchedTrans.getRepositoryDirectory().getPath() );
assertEquals( EXP_TRANS_VERSION, fetchedTrans.getTransversion() );
assertEquals( EXP_TRANS_STATUS, fetchedTrans.getTransstatus() );
assertEquals( EXP_TRANS_CREATED_USER, fetchedTrans.getCreatedUser() );
assertEquals( EXP_TRANS_CREATED_DATE, fetchedTrans.getCreatedDate() );
assertEquals( EXP_TRANS_MOD_USER, fetchedTrans.getModifiedUser() );
assertEquals( EXP_TRANS_MOD_DATE, fetchedTrans.getModifiedDate() );
assertEquals( 1, fetchedTrans.listParameters().length );
assertEquals( EXP_TRANS_PARAM_1_DEF, fetchedTrans.getParameterDefault( EXP_TRANS_PARAM_1_NAME ) );
assertEquals( EXP_TRANS_PARAM_1_DESC, fetchedTrans.getParameterDescription( EXP_TRANS_PARAM_1_NAME ) );
// Test reference to database connection
String[] transformations = repository.getTransformationsUsingDatabase( dbMeta.getObjectId() );
assertNotNull( transformations );
assertEquals( 1, transformations.length );
assertTrue( transformations[0].contains( fetchedTrans.getName() ) );
// TransLogTable transLogTable = fetchedTrans.getTransLogTable();
// TODO mlowery why doesn't this work?
// assertEquals(EXP_TRANS_LOG_TABLE_CONN_NAME, transLogTable.getConnectionName());
// assertEquals(EXP_TRANS_LOG_TABLE_INTERVAL, transLogTable.getLogInterval());
// assertEquals(EXP_TRANS_LOG_TABLE_SCHEMA_NAME, transLogTable.getSchemaName());
// assertEquals(EXP_TRANS_LOG_TABLE_SIZE_LIMIT, transLogTable.getLogSizeLimit());
// assertEquals(EXP_TRANS_LOG_TABLE_TABLE_NAME, transLogTable.getTableName());
// assertEquals(EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS, transLogTable.getTimeoutInDays());
// PerformanceLogTable perfLogTable = fetchedTrans.getPerformanceLogTable();
// TODO mlowery why doesn't this work?
// assertEquals(EXP_TRANS_LOG_TABLE_CONN_NAME, perfLogTable.getConnectionName());
// assertEquals(EXP_TRANS_LOG_TABLE_INTERVAL, perfLogTable.getLogInterval());
// assertEquals(EXP_TRANS_LOG_TABLE_SCHEMA_NAME, perfLogTable.getSchemaName());
// assertEquals(EXP_TRANS_LOG_TABLE_TABLE_NAME, perfLogTable.getTableName());
// assertEquals(EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS, perfLogTable.getTimeoutInDays());
// ChannelLogTable channelLogTable = fetchedTrans.getChannelLogTable();
// TODO mlowery why doesn't this work?
// assertEquals(EXP_TRANS_LOG_TABLE_CONN_NAME, channelLogTable.getConnectionName());
// assertEquals(EXP_TRANS_LOG_TABLE_SCHEMA_NAME, channelLogTable.getSchemaName());
// assertEquals(EXP_TRANS_LOG_TABLE_TABLE_NAME, channelLogTable.getTableName());
// assertEquals(EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS, channelLogTable.getTimeoutInDays());
// StepLogTable stepLogTable = fetchedTrans.getStepLogTable();
// TODO mlowery why doesn't this work?
// assertEquals(EXP_TRANS_LOG_TABLE_CONN_NAME, stepLogTable.getConnectionName());
// assertEquals(EXP_TRANS_LOG_TABLE_SCHEMA_NAME, stepLogTable.getSchemaName());
// assertEquals(EXP_TRANS_LOG_TABLE_TABLE_NAME, stepLogTable.getTableName());
// assertEquals(EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS, stepLogTable.getTimeoutInDays());
assertEquals( EXP_DBMETA_NAME, fetchedTrans.getMaxDateConnection().getName() );
assertEquals( EXP_TRANS_MAX_DATE_TABLE, fetchedTrans.getMaxDateTable() );
assertEquals( EXP_TRANS_MAX_DATE_FIELD, fetchedTrans.getMaxDateField() );
assertEquals( EXP_TRANS_MAX_DATE_OFFSET, fetchedTrans.getMaxDateOffset(), 0 );
assertEquals( EXP_TRANS_MAX_DATE_DIFF, fetchedTrans.getMaxDateDifference(), 0 );
assertEquals( EXP_TRANS_SIZE_ROWSET, fetchedTrans.getSizeRowset() );
// TODO mlowery why don't next two sleep fields work?
// assertEquals(EXP_TRANS_SLEEP_TIME_EMPTY, fetchedTrans.getSleepTimeEmpty());
// assertEquals(EXP_TRANS_SLEEP_TIME_FULL, fetchedTrans.getSleepTimeFull());
assertEquals( EXP_TRANS_USING_UNIQUE_CONN, fetchedTrans.isUsingUniqueConnections() );
assertEquals( EXP_TRANS_FEEDBACK_SHOWN, fetchedTrans.isFeedbackShown() );
assertEquals( EXP_TRANS_FEEDBACK_SIZE, fetchedTrans.getFeedbackSize() );
assertEquals( EXP_TRANS_USING_THREAD_PRIORITY_MGMT, fetchedTrans.isUsingThreadPriorityManagment() );
assertEquals( EXP_TRANS_SHARED_OBJECTS_FILE, fetchedTrans.getSharedObjectsFile() );
assertEquals( EXP_TRANS_CAPTURE_STEP_PERF_SNAPSHOTS, fetchedTrans.isCapturingStepPerformanceSnapShots() );
assertEquals( EXP_TRANS_STEP_PERF_CAP_DELAY, fetchedTrans.getStepPerformanceCapturingDelay() );
// TODO mlowery why doesn't this work?
// assertEquals(1, fetchedTrans.getDependencies().size());
// assertEquals(EXP_DBMETA_NAME, fetchedTrans.getDependency(0).getDatabase().getName());
// assertEquals(EXP_TRANS_DEP_TABLE_NAME, fetchedTrans.getDependency(0).getTablename());
// assertEquals(EXP_TRANS_DEP_FIELD_NAME, fetchedTrans.getDependency(0).getFieldname());
assertEquals( 3, fetchedTrans.getSteps().size() );
assertEquals( EXP_TRANS_STEP_1_NAME, fetchedTrans.getStep( 0 ).getName() );
assertEquals( EXP_TRANS_STEP_ERROR_META_1_ENABLED, fetchedTrans.getStep( 0 ).getStepErrorMeta().isEnabled() );
assertEquals( EXP_TRANS_STEP_ERROR_META_1_NR_ERRORS_VALUE_NAME, fetchedTrans.getStep( 0 ).getStepErrorMeta()
.getNrErrorsValuename() );
assertEquals( EXP_TRANS_STEP_ERROR_META_1_DESC_VALUE_NAME, fetchedTrans.getStep( 0 ).getStepErrorMeta()
.getErrorDescriptionsValuename() );
assertEquals( EXP_TRANS_STEP_ERROR_META_1_FIELDS_VALUE_NAME, fetchedTrans.getStep( 0 ).getStepErrorMeta()
.getErrorFieldsValuename() );
assertEquals( EXP_TRANS_STEP_ERROR_META_1_CODES_VALUE_NAME, fetchedTrans.getStep( 0 ).getStepErrorMeta()
.getErrorCodesValuename() );
assertEquals( EXP_TRANS_STEP_ERROR_META_1_MAX_ERRORS, fetchedTrans.getStep( 0 ).getStepErrorMeta().getMaxErrors() );
assertEquals( EXP_TRANS_STEP_ERROR_META_1_MAX_PERCENT_ERRORS, fetchedTrans.getStep( 0 ).getStepErrorMeta()
.getMaxPercentErrors() );
assertEquals( EXP_TRANS_STEP_ERROR_META_1_MIN_PERCENT_ROWS, fetchedTrans.getStep( 0 ).getStepErrorMeta()
.getMinPercentRows() );
assertEquals( EXP_TRANS_STEP_2_NAME, fetchedTrans.getStep( 1 ).getName() );
assertEquals( EXP_TRANS_STEP_1_NAME, fetchedTrans.getTransHop( 0 ).getFromStep().getName() );
assertEquals( EXP_TRANS_STEP_2_NAME, fetchedTrans.getTransHop( 0 ).getToStep().getName() );
assertEquals( 1, transMeta.getSlaveStepCopyPartitionDistribution().getOriginalPartitionSchemas().size() );
assertTrue( transMeta.getSlaveStepCopyPartitionDistribution().getOriginalPartitionSchemas().get( 0 ).getName()
.startsWith( EXP_PART_SCHEMA_NAME ) );
assertTrue( -1 != transMeta.getSlaveStepCopyPartitionDistribution().getPartition( EXP_SLAVE_NAME,
EXP_PART_SCHEMA_NAME, 0 ) );
assertEquals( EXP_TRANS_SLAVE_TRANSFORMATION, transMeta.isSlaveTransformation() );
TransMeta transMetaById = repository.loadTransformation( transMeta.getObjectId(), null );
assertEquals( fetchedTrans, transMetaById );
assertNull( service.getTransformationLock( transMeta.getObjectId() ) );
service.lockTransformation( transMeta.getObjectId(), EXP_TRANS_LOCK_MSG );
assertEquals( EXP_TRANS_LOCK_MSG, service.getTransformationLock( transMeta.getObjectId() ).getMessage() );
assertEquals( getDate( new Date() ), getDate( service.getTransformationLock( transMeta.getObjectId() )
.getLockDate() ) );
assertEquals( EXP_LOGIN_PLUS_TENANT, service.getTransformationLock( transMeta.getObjectId() ).getLogin() );
// TODO mlowery currently PUR lock only stores "login"; why do we need username too?
// assertEquals(EXP_USERNAME, repository.getTransformationLock(transMeta.getObjectId()).getUsername());
assertEquals( transMeta.getObjectId(), service.getTransformationLock( transMeta.getObjectId() ).getObjectId() );
service.unlockTransformation( transMeta.getObjectId() );
assertNull( service.getTransformationLock( transMeta.getObjectId() ) );
transMeta.setDescription( EXP_TRANS_DESC_V2 );
repository.save( transMeta, VERSION_COMMENT_V2, null );
assertTrue( hasVersionWithComment( transMeta, VERSION_COMMENT_V2 ) );
fetchedTrans = repository.loadTransformation( uniqueTransName, transDir, null, false, null );
assertEquals( EXP_TRANS_DESC_V2, fetchedTrans.getDescription() );
fetchedTrans = repository.loadTransformation( uniqueTransName, transDir, null, false, VERSION_LABEL_V1 );
assertEquals( EXP_TRANS_DESC, fetchedTrans.getDescription() );
transMetaById = repository.loadTransformation( transMeta.getObjectId(), VERSION_LABEL_V1 );
assertEquals( fetchedTrans, transMetaById );
assertEquals( transMeta.getObjectId(), repository.getTransformationID( uniqueTransName, transDir ) );
assertEquals( 1, repository.getTransformationObjects( transDir.getObjectId(), false ).size() );
assertEquals( 1, repository.getTransformationObjects( transDir.getObjectId(), true ).size() );
assertEquals( transMeta.getName(), repository.getTransformationObjects( transDir.getObjectId(), false ).get( 0 )
.getName() );
assertEquals( 1, repository.getTransformationNames( transDir.getObjectId(), false ).length );
assertEquals( 1, repository.getTransformationNames( transDir.getObjectId(), true ).length );
assertEquals( transMeta.getName(), repository.getTransformationNames( transDir.getObjectId(), false )[0] );
repository.deleteTransformation( transMeta.getObjectId() );
assertFalse( repository.exists( uniqueTransName, transDir, RepositoryObjectType.TRANSFORMATION ) );
assertEquals( 0, repository.getTransformationObjects( transDir.getObjectId(), false ).size() );
assertEquals( 1, repository.getTransformationObjects( transDir.getObjectId(), true ).size() );
assertEquals( transMeta.getName(), repository.getTransformationObjects( transDir.getObjectId(), true ).get( 0 )
.getName() );
assertEquals( 0, repository.getTransformationNames( transDir.getObjectId(), false ).length );
assertEquals( 1, repository.getTransformationNames( transDir.getObjectId(), true ).length );
assertEquals( transMeta.getName(), repository.getTransformationNames( transDir.getObjectId(), true )[0] );
}
protected TransMeta createTransMeta( final String dbName ) throws Exception {
RepositoryDirectoryInterface rootDir = loadStartDirectory();
TransMeta transMeta = new TransMeta();
transMeta.setName( EXP_TRANS_NAME.concat( dbName ) );
transMeta.setDescription( EXP_TRANS_DESC );
transMeta.setExtendedDescription( EXP_TRANS_EXTENDED_DESC );
transMeta.setRepositoryDirectory( rootDir.findDirectory( DIR_TRANSFORMATIONS ) );
transMeta.setTransversion( EXP_TRANS_VERSION );
transMeta.setTransstatus( EXP_TRANS_STATUS );
transMeta.setCreatedUser( EXP_TRANS_CREATED_USER );
transMeta.setCreatedDate( EXP_TRANS_CREATED_DATE );
transMeta.setModifiedUser( EXP_TRANS_MOD_USER );
transMeta.setModifiedDate( EXP_TRANS_MOD_DATE );
transMeta.addParameterDefinition( EXP_TRANS_PARAM_1_NAME, EXP_TRANS_PARAM_1_DEF, EXP_TRANS_PARAM_1_DESC );
// TODO mlowery other transLogTable fields could be set for testing here
TransLogTable transLogTable = TransLogTable.getDefault( transMeta, transMeta, new ArrayList<StepMeta>( 0 ) );
transLogTable.setConnectionName( EXP_TRANS_LOG_TABLE_CONN_NAME );
transLogTable.setLogInterval( EXP_TRANS_LOG_TABLE_INTERVAL );
transLogTable.setSchemaName( EXP_TRANS_LOG_TABLE_SCHEMA_NAME );
transLogTable.setLogSizeLimit( EXP_TRANS_LOG_TABLE_SIZE_LIMIT );
transLogTable.setTableName( EXP_TRANS_LOG_TABLE_TABLE_NAME );
transLogTable.setTimeoutInDays( EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS );
transMeta.setTransLogTable( transLogTable );
// TODO mlowery other perfLogTable fields could be set for testing here
PerformanceLogTable perfLogTable = PerformanceLogTable.getDefault( transMeta, transMeta );
perfLogTable.setConnectionName( EXP_TRANS_LOG_TABLE_CONN_NAME );
perfLogTable.setLogInterval( EXP_TRANS_LOG_TABLE_INTERVAL );
perfLogTable.setSchemaName( EXP_TRANS_LOG_TABLE_SCHEMA_NAME );
perfLogTable.setTableName( EXP_TRANS_LOG_TABLE_TABLE_NAME );
perfLogTable.setTimeoutInDays( EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS );
transMeta.setPerformanceLogTable( perfLogTable );
// TODO mlowery other channelLogTable fields could be set for testing here
ChannelLogTable channelLogTable = ChannelLogTable.getDefault( transMeta, transMeta );
channelLogTable.setConnectionName( EXP_TRANS_LOG_TABLE_CONN_NAME );
channelLogTable.setSchemaName( EXP_TRANS_LOG_TABLE_SCHEMA_NAME );
channelLogTable.setTableName( EXP_TRANS_LOG_TABLE_TABLE_NAME );
channelLogTable.setTimeoutInDays( EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS );
transMeta.setChannelLogTable( channelLogTable );
// TODO mlowery other stepLogTable fields could be set for testing here
StepLogTable stepLogTable = StepLogTable.getDefault( transMeta, transMeta );
stepLogTable.setConnectionName( EXP_TRANS_LOG_TABLE_CONN_NAME );
stepLogTable.setSchemaName( EXP_TRANS_LOG_TABLE_SCHEMA_NAME );
stepLogTable.setTableName( EXP_TRANS_LOG_TABLE_TABLE_NAME );
stepLogTable.setTimeoutInDays( EXP_TRANS_LOG_TABLE_TIMEOUT_IN_DAYS );
transMeta.setStepLogTable( stepLogTable );
DatabaseMeta dbMeta = createDatabaseMeta( dbName );
// dbMeta must be saved so that it gets an ID
repository.save( dbMeta, VERSION_COMMENT_V1, null );
deleteStack.push( dbMeta );
transMeta.setMaxDateConnection( dbMeta );
transMeta.setMaxDateTable( EXP_TRANS_MAX_DATE_TABLE );
transMeta.setMaxDateField( EXP_TRANS_MAX_DATE_FIELD );
transMeta.setMaxDateOffset( EXP_TRANS_MAX_DATE_OFFSET );
transMeta.setMaxDateDifference( EXP_TRANS_MAX_DATE_DIFF );
transMeta.setSizeRowset( EXP_TRANS_SIZE_ROWSET );
transMeta.setSleepTimeEmpty( EXP_TRANS_SLEEP_TIME_EMPTY );
transMeta.setSleepTimeFull( EXP_TRANS_SLEEP_TIME_FULL );
transMeta.setUsingUniqueConnections( EXP_TRANS_USING_UNIQUE_CONN );
transMeta.setFeedbackShown( EXP_TRANS_FEEDBACK_SHOWN );
transMeta.setFeedbackSize( EXP_TRANS_FEEDBACK_SIZE );
transMeta.setUsingThreadPriorityManagment( EXP_TRANS_USING_THREAD_PRIORITY_MGMT );
transMeta.setSharedObjectsFile( EXP_TRANS_SHARED_OBJECTS_FILE );
transMeta.setCapturingStepPerformanceSnapShots( EXP_TRANS_CAPTURE_STEP_PERF_SNAPSHOTS );
transMeta.setStepPerformanceCapturingDelay( EXP_TRANS_STEP_PERF_CAP_DELAY );
transMeta.addDependency( new TransDependency( dbMeta, EXP_TRANS_DEP_TABLE_NAME, EXP_TRANS_DEP_FIELD_NAME ) );
DatabaseMeta stepDbMeta = createDatabaseMeta( EXP_DBMETA_NAME_STEP.concat( dbName ) );
repository.save( stepDbMeta, VERSION_COMMENT_V1, null );
deleteStack.push( stepDbMeta );
Condition cond = new Condition();
StepMeta step1 = createStepMeta1( transMeta, stepDbMeta, cond );
transMeta.addStep( step1 );
StepMeta step2 = createStepMeta2( stepDbMeta, cond );
transMeta.addStep( step2 );
transMeta.addTransHop( createTransHopMeta( step1, step2 ) );
SlaveServer slaveServer = createSlaveServer( dbName );
PartitionSchema partSchema = createPartitionSchema( dbName );
// slaveServer, partSchema must be saved so that they get IDs
repository.save( slaveServer, VERSION_COMMENT_V1, null );
deleteStack.push( slaveServer );
repository.save( partSchema, VERSION_COMMENT_V1, null );
deleteStack.push( partSchema );
SlaveStepCopyPartitionDistribution slaveStepCopyPartitionDistribution = new SlaveStepCopyPartitionDistribution();
slaveStepCopyPartitionDistribution.addPartition( EXP_SLAVE_NAME, EXP_PART_SCHEMA_NAME, 0 );
slaveStepCopyPartitionDistribution.setOriginalPartitionSchemas( Arrays
.asList( new PartitionSchema[] { partSchema } ) );
transMeta.setSlaveStepCopyPartitionDistribution( slaveStepCopyPartitionDistribution );
transMeta.setSlaveTransformation( EXP_TRANS_SLAVE_TRANSFORMATION );
return transMeta;
}
protected PartitionSchema createPartitionSchema( String partName ) throws Exception {
PartitionSchema partSchema = new PartitionSchema();
partSchema.setName( EXP_PART_SCHEMA_NAME.concat( partName ) );
partSchema.setDescription( EXP_PART_SCHEMA_DESC );
partSchema.setPartitionIDs( Arrays.asList( new String[] { EXP_PART_SCHEMA_PARTID_1, EXP_PART_SCHEMA_PARTID_2 } ) );
partSchema.setDynamicallyDefined( EXP_PART_SCHEMA_DYN_DEF );
partSchema.setNumberOfPartitionsPerSlave( EXP_PART_SCHEMA_PART_PER_SLAVE_COUNT );
return partSchema;
}
/**
* save(partitionSchema) exists() loadPartitionSchema() deletePartitionSchema() getPartitionSchemaID()
* getPartitionSchemaIDs() getPartitionSchemaNames()
*/
@Test
public void testPartitionSchemas() throws Exception {
// RepositoryDirectoryInterface rootDir =
initRepo();
PartitionSchema partSchema = createPartitionSchema( "" );
repository.save( partSchema, VERSION_COMMENT_V1, null );
assertNotNull( partSchema.getObjectId() );
ObjectRevision version = partSchema.getObjectRevision();
assertNotNull( version );
assertTrue( hasVersionWithComment( partSchema, VERSION_COMMENT_V1 ) );
assertTrue( repository.exists( EXP_PART_SCHEMA_NAME, null, RepositoryObjectType.PARTITION_SCHEMA ) );
PartitionSchema fetchedPartSchema = repository.loadPartitionSchema( partSchema.getObjectId(), null );
assertEquals( EXP_PART_SCHEMA_NAME, fetchedPartSchema.getName() );
// TODO mlowery partitionSchema.getXML doesn't output desc either; should it?
// assertEquals(EXP_PART_SCHEMA_DESC, fetchedPartSchema.getDescription());
assertEquals( Arrays.asList( new String[] { EXP_PART_SCHEMA_PARTID_1, EXP_PART_SCHEMA_PARTID_2 } ),
fetchedPartSchema.getPartitionIDs() );
assertEquals( EXP_PART_SCHEMA_DYN_DEF, fetchedPartSchema.isDynamicallyDefined() );
assertEquals( EXP_PART_SCHEMA_PART_PER_SLAVE_COUNT, fetchedPartSchema.getNumberOfPartitionsPerSlave() );
partSchema.setNumberOfPartitionsPerSlave( EXP_PART_SCHEMA_PART_PER_SLAVE_COUNT_V2 );
repository.save( partSchema, VERSION_COMMENT_V2, null );
assertEquals( VERSION_COMMENT_V2, partSchema.getObjectRevision().getComment() );
fetchedPartSchema = repository.loadPartitionSchema( partSchema.getObjectId(), null );
assertEquals( EXP_PART_SCHEMA_PART_PER_SLAVE_COUNT_V2, fetchedPartSchema.getNumberOfPartitionsPerSlave() );
fetchedPartSchema = repository.loadPartitionSchema( partSchema.getObjectId(), VERSION_LABEL_V1 );
assertEquals( EXP_PART_SCHEMA_PART_PER_SLAVE_COUNT, fetchedPartSchema.getNumberOfPartitionsPerSlave() );
assertEquals( partSchema.getObjectId(), repository.getPartitionSchemaID( EXP_PART_SCHEMA_NAME ) );
assertEquals( 1, repository.getPartitionSchemaIDs( false ).length );
assertEquals( 1, repository.getPartitionSchemaIDs( true ).length );
assertEquals( partSchema.getObjectId(), repository.getPartitionSchemaIDs( false )[0] );
assertEquals( 1, repository.getPartitionSchemaNames( false ).length );
assertEquals( 1, repository.getPartitionSchemaNames( true ).length );
assertEquals( EXP_PART_SCHEMA_NAME, repository.getPartitionSchemaNames( false )[0] );
repository.deletePartitionSchema( partSchema.getObjectId() );
assertFalse( repository.exists( EXP_PART_SCHEMA_NAME, null, RepositoryObjectType.PARTITION_SCHEMA ) );
assertEquals( 0, repository.getPartitionSchemaIDs( false ).length );
// shared object deletion is permanent by default
assertEquals( 0, repository.getPartitionSchemaIDs( true ).length );
assertEquals( 0, repository.getPartitionSchemaNames( false ).length );
// shared object deletion is permanent by default
assertEquals( 0, repository.getPartitionSchemaNames( true ).length );
}
/**
* save(clusterSchema) exists() loadClusterSchema() deleteClusterSchema() getClusterID() getClusterIDs()
* getClusterNames()
*/
@Test
public void testClusterSchemas() throws Exception {
// RepositoryDirectoryInterface rootDir =
initRepo();
ClusterSchema clusterSchema = createClusterSchema( EXP_CLUSTER_SCHEMA_NAME );
repository.save( clusterSchema, VERSION_COMMENT_V1, null );
assertNotNull( clusterSchema.getObjectId() );
ObjectRevision version = clusterSchema.getObjectRevision();
assertNotNull( version );
assertTrue( hasVersionWithComment( clusterSchema, VERSION_COMMENT_V1 ) );
assertTrue( repository.exists( EXP_CLUSTER_SCHEMA_NAME, null, RepositoryObjectType.CLUSTER_SCHEMA ) );
ClusterSchema fetchedClusterSchema =
repository.loadClusterSchema( clusterSchema.getObjectId(), repository.getSlaveServers(), null );
assertEquals( EXP_CLUSTER_SCHEMA_NAME, fetchedClusterSchema.getName() );
// TODO mlowery clusterSchema.getXML doesn't output desc either; should it?
// assertEquals(EXP_CLUSTER_SCHEMA_DESC, fetchedClusterSchema.getDescription());
assertEquals( EXP_CLUSTER_SCHEMA_BASE_PORT, fetchedClusterSchema.getBasePort() );
assertEquals( EXP_CLUSTER_SCHEMA_SOCKETS_BUFFER_SIZE, fetchedClusterSchema.getSocketsBufferSize() );
assertEquals( EXP_CLUSTER_SCHEMA_SOCKETS_FLUSH_INTERVAL, fetchedClusterSchema.getSocketsFlushInterval() );
assertEquals( EXP_CLUSTER_SCHEMA_SOCKETS_COMPRESSED, fetchedClusterSchema.isSocketsCompressed() );
assertEquals( EXP_CLUSTER_SCHEMA_DYN, fetchedClusterSchema.isDynamic() );
assertEquals( 1, fetchedClusterSchema.getSlaveServers().size() );
assertTrue( fetchedClusterSchema.getSlaveServers().get( 0 ).getName().startsWith( EXP_SLAVE_NAME ) );
// versioning test
clusterSchema.setBasePort( EXP_CLUSTER_SCHEMA_BASE_PORT_V2 );
repository.save( clusterSchema, VERSION_COMMENT_V2, null );
assertEquals( VERSION_COMMENT_V2, clusterSchema.getObjectRevision().getComment() );
fetchedClusterSchema =
repository.loadClusterSchema( clusterSchema.getObjectId(), repository.getSlaveServers(), null );
assertEquals( EXP_CLUSTER_SCHEMA_BASE_PORT_V2, fetchedClusterSchema.getBasePort() );
fetchedClusterSchema =
repository.loadClusterSchema( clusterSchema.getObjectId(), repository.getSlaveServers(), VERSION_LABEL_V1 );
assertEquals( EXP_CLUSTER_SCHEMA_BASE_PORT, fetchedClusterSchema.getBasePort() );
assertEquals( clusterSchema.getObjectId(), repository.getClusterID( EXP_CLUSTER_SCHEMA_NAME ) );
assertEquals( 1, repository.getClusterIDs( false ).length );
assertEquals( 1, repository.getClusterIDs( true ).length );
assertEquals( clusterSchema.getObjectId(), repository.getClusterIDs( false )[0] );
assertEquals( 1, repository.getClusterNames( false ).length );
assertEquals( 1, repository.getClusterNames( true ).length );
assertEquals( EXP_CLUSTER_SCHEMA_NAME, repository.getClusterNames( false )[0] );
repository.deleteClusterSchema( clusterSchema.getObjectId() );
assertFalse( repository.exists( EXP_CLUSTER_SCHEMA_NAME, null, RepositoryObjectType.CLUSTER_SCHEMA ) );
assertEquals( 0, repository.getClusterIDs( false ).length );
// shared object deletion is permanent by default
assertEquals( 0, repository.getClusterIDs( true ).length );
assertEquals( 0, repository.getClusterNames( false ).length );
// shared object deletion is permanent by default
assertEquals( 0, repository.getClusterNames( true ).length );
}
protected ClusterSchema createClusterSchema( String clusterName ) throws Exception {
ClusterSchema clusterSchema = new ClusterSchema();
clusterSchema.setName( clusterName );
clusterSchema.setBasePort( EXP_CLUSTER_SCHEMA_BASE_PORT );
clusterSchema.setSocketsBufferSize( EXP_CLUSTER_SCHEMA_SOCKETS_BUFFER_SIZE );
clusterSchema.setSocketsFlushInterval( EXP_CLUSTER_SCHEMA_SOCKETS_FLUSH_INTERVAL );
clusterSchema.setSocketsCompressed( EXP_CLUSTER_SCHEMA_SOCKETS_COMPRESSED );
clusterSchema.setDynamic( EXP_CLUSTER_SCHEMA_DYN );
SlaveServer slaveServer = createSlaveServer( clusterName );
repository.save( slaveServer, VERSION_COMMENT_V1, null );
deleteStack.push( slaveServer );
clusterSchema.setSlaveServers( Collections.singletonList( slaveServer ) );
return clusterSchema;
}
protected JobEntryInterface createJobEntry1( final DatabaseMeta dbMeta ) throws Exception {
JobEntryAttributeTesterJobEntry entry1 = new JobEntryAttributeTesterJobEntry( EXP_JOB_ENTRY_1_NAME );
entry1.setDatabaseMeta( dbMeta );
return entry1;
}
protected JobEntryInterface createJobEntry2( final DatabaseMeta dbMeta ) throws Exception {
JobEntryAttributeTesterJobEntry entry2 = new JobEntryAttributeTesterJobEntry( EXP_JOB_ENTRY_2_NAME );
entry2.setDatabaseMeta( dbMeta );
return entry2;
}
protected JobEntryCopy createJobEntry1Copy( final DatabaseMeta dbMeta ) throws Exception {
JobEntryCopy copy = new JobEntryCopy( createJobEntry1( dbMeta ) );
copy.setLocation( EXP_JOB_ENTRY_1_COPY_X_LOC, EXP_JOB_ENTRY_1_COPY_Y_LOC );
return copy;
}
protected JobEntryCopy createJobEntry2Copy( final DatabaseMeta dbMeta ) throws Exception {
JobEntryCopy copy = new JobEntryCopy( createJobEntry2( dbMeta ) );
copy.setLocation( EXP_JOB_ENTRY_2_COPY_X_LOC, EXP_JOB_ENTRY_2_COPY_Y_LOC );
return copy;
}
protected StepMeta createStepMeta1( final TransMeta transMeta, final DatabaseMeta dbMeta, final Condition condition )
throws Exception {
TransStepAttributeTesterTransStep step1 = new TransStepAttributeTesterTransStep();
step1.setDatabaseMeta( dbMeta );
step1.setCondition( condition );
StepMeta stepMeta1 = new StepMeta( EXP_TRANS_STEP_1_NAME, step1 );
StepErrorMeta stepErrorMeta1 = new StepErrorMeta( transMeta, stepMeta1 );
stepErrorMeta1.setEnabled( EXP_TRANS_STEP_ERROR_META_1_ENABLED );
stepErrorMeta1.setNrErrorsValuename( EXP_TRANS_STEP_ERROR_META_1_NR_ERRORS_VALUE_NAME );
stepErrorMeta1.setErrorDescriptionsValuename( EXP_TRANS_STEP_ERROR_META_1_DESC_VALUE_NAME );
stepErrorMeta1.setErrorFieldsValuename( EXP_TRANS_STEP_ERROR_META_1_FIELDS_VALUE_NAME );
stepErrorMeta1.setErrorCodesValuename( EXP_TRANS_STEP_ERROR_META_1_CODES_VALUE_NAME );
stepErrorMeta1.setMaxErrors( EXP_TRANS_STEP_ERROR_META_1_MAX_ERRORS );
stepErrorMeta1.setMaxPercentErrors( EXP_TRANS_STEP_ERROR_META_1_MAX_PERCENT_ERRORS );
stepErrorMeta1.setMinPercentRows( EXP_TRANS_STEP_ERROR_META_1_MIN_PERCENT_ROWS );
stepMeta1.setStepErrorMeta( stepErrorMeta1 );
return stepMeta1;
}
protected StepMeta createStepMeta2( final DatabaseMeta dbMeta, final Condition condition ) throws Exception {
TransStepAttributeTesterTransStep step2 = new TransStepAttributeTesterTransStep();
step2.setDatabaseMeta( dbMeta );
step2.setCondition( condition );
return new StepMeta( EXP_TRANS_STEP_2_NAME, step2 );
}
protected TransHopMeta createTransHopMeta( final StepMeta stepMeta1, final StepMeta stepMeta2 ) throws Exception {
return new TransHopMeta( stepMeta1, stepMeta2 );
}
protected NotePadMeta createNotePadMeta( String note ) throws Exception {
return new NotePadMeta( EXP_NOTEPAD_NOTE.concat( note ), EXP_NOTEPAD_X, EXP_NOTEPAD_Y, EXP_NOTEPAD_WIDTH,
EXP_NOTEPAD_HEIGHT );
}
protected JobHopMeta createJobHopMeta( final JobEntryCopy from, final JobEntryCopy to ) throws Exception {
return new JobHopMeta( from, to );
}
protected DatabaseMeta createDatabaseMeta( final String dbName ) throws Exception {
DatabaseMeta dbMeta = new DatabaseMeta();
dbMeta.setName( dbName );
dbMeta.setHostname( EXP_DBMETA_HOSTNAME );
dbMeta.setDatabaseType( EXP_DBMETA_TYPE );
dbMeta.setAccessType( EXP_DBMETA_ACCESS );
dbMeta.setDBName( EXP_DBMETA_DBNAME );
dbMeta.setDBPort( EXP_DBMETA_PORT );
dbMeta.setUsername( EXP_DBMETA_USERNAME );
dbMeta.setPassword( EXP_DBMETA_PASSWORD );
dbMeta.setServername( EXP_DBMETA_SERVERNAME );
dbMeta.setDataTablespace( EXP_DBMETA_DATA_TABLESPACE );
dbMeta.setIndexTablespace( EXP_DBMETA_INDEX_TABLESPACE );
// Properties attrs = new Properties();
// exposed mutable state; yikes
dbMeta.getAttributes().put( EXP_DBMETA_ATTR1_KEY, EXP_DBMETA_ATTR1_VALUE );
dbMeta.getAttributes().put( EXP_DBMETA_ATTR2_KEY, EXP_DBMETA_ATTR2_VALUE );
// TODO mlowery more testing on DatabaseMeta options
return dbMeta;
}
/**
* save(databaseMeta) loadDatabaseMeta() exists() deleteDatabaseMeta() getDatabaseID() getDatabaseIDs()
* getDatabaseNames() readDatabases()
*/
@Test
public void testDatabases() throws Exception {
DatabaseMeta dbMeta = createDatabaseMeta( EXP_DBMETA_NAME );
repository.save( dbMeta, VERSION_COMMENT_V1, null );
assertNotNull( dbMeta.getObjectId() );
ObjectRevision v1 = dbMeta.getObjectRevision();
assertNotNull( v1 );
assertTrue( hasVersionWithComment( dbMeta, VERSION_COMMENT_V1 ) );
// setting repository directory on dbMeta is not supported; use null parent directory
assertTrue( repository.exists( EXP_DBMETA_NAME, null, RepositoryObjectType.DATABASE ) );
DatabaseMeta fetchedDatabase = repository.loadDatabaseMeta( dbMeta.getObjectId(), null );
assertEquals( EXP_DBMETA_NAME, fetchedDatabase.getName() );
assertEquals( EXP_DBMETA_HOSTNAME, fetchedDatabase.getHostname() );
assertEquals( EXP_DBMETA_TYPE, fetchedDatabase.getPluginId() );
assertEquals( EXP_DBMETA_ACCESS, fetchedDatabase.getAccessType() );
assertEquals( EXP_DBMETA_DBNAME, fetchedDatabase.getDatabaseName() );
assertEquals( EXP_DBMETA_PORT, fetchedDatabase.getDatabasePortNumberString() );
assertEquals( EXP_DBMETA_USERNAME, fetchedDatabase.getUsername() );
assertEquals( EXP_DBMETA_PASSWORD, fetchedDatabase.getPassword() );
assertEquals( EXP_DBMETA_SERVERNAME, fetchedDatabase.getServername() );
assertEquals( EXP_DBMETA_DATA_TABLESPACE, fetchedDatabase.getDataTablespace() );
assertEquals( EXP_DBMETA_INDEX_TABLESPACE, fetchedDatabase.getIndexTablespace() );
// 2 for the ones explicitly set and 1 for port (set behind the scenes)
assertEquals( 2 + 1, fetchedDatabase.getAttributes().size() );
assertEquals( EXP_DBMETA_ATTR1_VALUE, fetchedDatabase.getAttributes().getProperty( EXP_DBMETA_ATTR1_KEY ) );
assertEquals( EXP_DBMETA_ATTR2_VALUE, fetchedDatabase.getAttributes().getProperty( EXP_DBMETA_ATTR2_KEY ) );
dbMeta.setHostname( EXP_DBMETA_HOSTNAME_V2 );
repository.save( dbMeta, VERSION_COMMENT_V2, null );
assertTrue( hasVersionWithComment( dbMeta, VERSION_COMMENT_V2 ) );
fetchedDatabase = repository.loadDatabaseMeta( dbMeta.getObjectId(), null );
assertEquals( EXP_DBMETA_HOSTNAME_V2, fetchedDatabase.getHostname() );
fetchedDatabase = repository.loadDatabaseMeta( dbMeta.getObjectId(), v1.getName() );
assertEquals( EXP_DBMETA_HOSTNAME, fetchedDatabase.getHostname() );
assertEquals( dbMeta.getObjectId(), repository.getDatabaseID( EXP_DBMETA_NAME ) );
assertEquals( 1, repository.getDatabaseIDs( false ).length );
assertEquals( 1, repository.getDatabaseIDs( true ).length );
assertEquals( dbMeta.getObjectId(), repository.getDatabaseIDs( false )[0] );
assertEquals( 1, repository.getDatabaseNames( false ).length );
assertEquals( 1, repository.getDatabaseNames( true ).length );
assertEquals( EXP_DBMETA_NAME, repository.getDatabaseNames( false )[0] );
assertEquals( 1, repository.readDatabases().size() );
repository.deleteDatabaseMeta( EXP_DBMETA_NAME );
assertFalse( repository.exists( EXP_DBMETA_NAME, null, RepositoryObjectType.DATABASE ) );
assertEquals( 0, repository.getDatabaseIDs( false ).length );
// shared object deletion is permanent by default
assertEquals( 0, repository.getDatabaseIDs( true ).length );
assertEquals( 0, repository.getDatabaseNames( false ).length );
// shared object deletion is permanent by default
assertEquals( 0, repository.getDatabaseNames( true ).length );
assertEquals( 0, repository.readDatabases().size() );
}
protected boolean hasVersionWithComment( final RepositoryElementInterface element, final String comment )
throws Exception {
IRevisionService service = (IRevisionService) repository.getService( IRevisionService.class );
List<ObjectRevision> versions = service.getRevisions( element );
for ( ObjectRevision version : versions ) {
if ( version.getComment().equals( comment ) ) {
return true;
}
}
return false;
}
protected boolean hasVersionWithCal( final RepositoryElementInterface element, final Calendar cal ) throws Exception {
IRevisionService service = (IRevisionService) repository.getService( IRevisionService.class );
List<ObjectRevision> versions = service.getRevisions( element );
for ( ObjectRevision version : versions ) {
if ( version.getCreationDate().equals( cal.getTime() ) ) {
return true;
}
}
return false;
}
/**
* save(slave) loadSlaveServer() exists() deleteSlave() getSlaveID() getSlaveIDs() getSlaveNames() getSlaveServers()
*/
@Test
public void testSlaves() throws Exception {
SlaveServer slave = createSlaveServer( "" );
repository.save( slave, VERSION_COMMENT_V1, null );
assertNotNull( slave.getObjectId() );
ObjectRevision version = slave.getObjectRevision();
assertNotNull( version );
assertTrue( hasVersionWithComment( slave, VERSION_COMMENT_V1 ) );
// setting repository directory on slave is not supported; use null parent directory
assertTrue( repository.exists( EXP_SLAVE_NAME, null, RepositoryObjectType.SLAVE_SERVER ) );
SlaveServer fetchedSlave = repository.loadSlaveServer( slave.getObjectId(), null );
assertEquals( EXP_SLAVE_NAME, fetchedSlave.getName() );
assertEquals( EXP_SLAVE_HOSTNAME, fetchedSlave.getHostname() );
assertEquals( EXP_SLAVE_PORT, fetchedSlave.getPort() );
assertEquals( EXP_SLAVE_USERNAME, fetchedSlave.getUsername() );
assertEquals( EXP_SLAVE_PASSWORD, fetchedSlave.getPassword() );
assertEquals( EXP_SLAVE_PROXY_HOSTNAME, fetchedSlave.getProxyHostname() );
assertEquals( EXP_SLAVE_PROXY_PORT, fetchedSlave.getProxyPort() );
assertEquals( EXP_SLAVE_NON_PROXY_HOSTS, fetchedSlave.getNonProxyHosts() );
assertEquals( EXP_SLAVE_MASTER, fetchedSlave.isMaster() );
slave.setHostname( EXP_SLAVE_HOSTNAME_V2 );
repository.save( slave, VERSION_COMMENT_V2, null );
assertEquals( VERSION_COMMENT_V2, slave.getObjectRevision().getComment() );
fetchedSlave = repository.loadSlaveServer( slave.getObjectId(), null );
assertEquals( EXP_SLAVE_HOSTNAME_V2, fetchedSlave.getHostname() );
fetchedSlave = repository.loadSlaveServer( slave.getObjectId(), VERSION_LABEL_V1 );
assertEquals( EXP_SLAVE_HOSTNAME, fetchedSlave.getHostname() );
assertEquals( slave.getObjectId(), repository.getSlaveID( EXP_SLAVE_NAME ) );
assertEquals( 1, repository.getSlaveIDs( false ).length );
assertEquals( 1, repository.getSlaveIDs( true ).length );
assertEquals( slave.getObjectId(), repository.getSlaveIDs( false )[0] );
assertEquals( 1, repository.getSlaveNames( false ).length );
assertEquals( 1, repository.getSlaveNames( true ).length );
assertEquals( EXP_SLAVE_NAME, repository.getSlaveNames( false )[0] );
assertEquals( 1, repository.getSlaveServers().size() );
assertEquals( EXP_SLAVE_NAME, repository.getSlaveServers().get( 0 ).getName() );
repository.deleteSlave( slave.getObjectId() );
assertFalse( repository.exists( EXP_SLAVE_NAME, null, RepositoryObjectType.SLAVE_SERVER ) );
assertEquals( 0, repository.getSlaveIDs( false ).length );
// shared object deletion is permanent by default
assertEquals( 0, repository.getSlaveIDs( true ).length );
assertEquals( 0, repository.getSlaveNames( false ).length );
// shared object deletion is permanent by default
assertEquals( 0, repository.getSlaveNames( true ).length );
assertEquals( 0, repository.getSlaveServers().size() );
}
protected SlaveServer createSlaveServer( String slaveName ) throws Exception {
SlaveServer slaveServer = new SlaveServer();
slaveServer.setName( EXP_SLAVE_NAME.concat( slaveName ) );
slaveServer.setHostname( EXP_SLAVE_HOSTNAME );
slaveServer.setPort( EXP_SLAVE_PORT );
slaveServer.setUsername( EXP_SLAVE_USERNAME );
slaveServer.setPassword( EXP_SLAVE_PASSWORD );
slaveServer.setProxyHostname( EXP_SLAVE_PROXY_HOSTNAME );
slaveServer.setProxyPort( EXP_SLAVE_PROXY_PORT );
slaveServer.setNonProxyHosts( EXP_SLAVE_NON_PROXY_HOSTS );
slaveServer.setMaster( EXP_SLAVE_MASTER );
return slaveServer;
}
@Ignore
@Test
public void testRenameAndUndelete() throws Exception {
RepositoryDirectoryInterface rootDir = initRepo();
JobMeta jobMeta = createJobMeta( EXP_JOB_NAME );
RepositoryDirectoryInterface jobsDir = rootDir.findDirectory( DIR_JOBS );
repository.save( jobMeta, VERSION_COMMENT_V1, null );
deleteStack.push( jobMeta );
repository.deleteJob( jobMeta.getObjectId() );
assertFalse( repository.exists( EXP_JOB_NAME, jobsDir, RepositoryObjectType.JOB ) );
RepositoryObject robj =
new RepositoryObject( jobMeta.getObjectId(), jobMeta.getName(), jobMeta.getRepositoryDirectory(), null, null,
jobMeta.getRepositoryElementType(), null, false );
repository.undeleteObject( robj );
assertTrue( repository.exists( EXP_JOB_NAME, jobsDir, RepositoryObjectType.JOB ) );
repository.renameJob( jobMeta.getObjectId(), jobsDir, EXP_JOB_NAME_NEW );
assertFalse( repository.exists( EXP_JOB_NAME, jobsDir, RepositoryObjectType.JOB ) );
assertTrue( repository.exists( EXP_JOB_NAME_NEW, jobsDir, RepositoryObjectType.JOB ) );
TransMeta transMeta = createTransMeta( EXP_DBMETA_NAME );
RepositoryDirectoryInterface transDir = rootDir.findDirectory( DIR_TRANSFORMATIONS );
repository.save( transMeta, VERSION_COMMENT_V1, null );
deleteStack.push( transMeta );
repository.renameTransformation( transMeta.getObjectId(), transDir, EXP_TRANS_NAME_NEW );
assertFalse( repository.exists( EXP_TRANS_NAME.concat( EXP_DBMETA_NAME ), transDir,
RepositoryObjectType.TRANSFORMATION ) );
assertTrue( repository.exists( EXP_TRANS_NAME_NEW, transDir, RepositoryObjectType.TRANSFORMATION ) );
DatabaseMeta dbMeta = createDatabaseMeta( EXP_DBMETA2_NAME );
repository.save( dbMeta, VERSION_COMMENT_V1, null );
deleteStack.push( dbMeta );
dbMeta.setName( EXP_DBMETA_NAME_NEW );
repository.save( dbMeta, VERSION_COMMENT_V2, null );
assertFalse( repository.exists( EXP_DBMETA2_NAME, null, RepositoryObjectType.DATABASE ) );
assertTrue( repository.exists( EXP_DBMETA_NAME_NEW, null, RepositoryObjectType.DATABASE ) );
}
@Test
public void testVersions() throws Exception {
IRevisionService service = (IRevisionService) repository.getService( IRevisionService.class );
DatabaseMeta dbMeta = createDatabaseMeta( EXP_DBMETA_NAME );
repository.save( dbMeta, VERSION_COMMENT_V1, null );
deleteStack.push( dbMeta );
List<ObjectRevision> revs = service.getRevisions( dbMeta );
assertTrue( revs.size() >= 1 );
dbMeta.setHostname( EXP_DBMETA_HOSTNAME_V2 );
repository.save( dbMeta, VERSION_COMMENT_V2, null );
revs = service.getRevisions( dbMeta );
assertTrue( revs.size() >= 2 );
// RepositoryVersionRegistry vReg = repository.getVersionRegistry();
// assertEquals(0, vReg.getVersions().size());
// vReg.addVersion(new SimpleObjectVersion(EXP_OBJECT_VERSION_LABEL, null, null, null));
// assertEquals(2, versions.size());
// assertEquals("1.0", versions.get(0).getLabel());
// assertEquals("1.1", versions.get(1).getLabel());
// TODO mlowery finish me
}
@Test
@Ignore
public void testGetSecurityProvider() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testGetVersionRegistry() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testInsertJobEntryDatabase() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testInsertLogEntry() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testInsertStepDatabase() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testLoadConditionFromStepAttribute() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testLoadDatabaseMetaFromJobEntryAttribute() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testLoadDatabaseMetaFromStepAttribute() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testReadJobMetaSharedObjects() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testReadTransSharedObjects() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testSaveConditionStepAttribute() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testGetAcl() throws Exception {
RepositoryDirectoryInterface rootDir = initRepo();
JobMeta jobMeta = createJobMeta( EXP_JOB_NAME );
RepositoryDirectoryInterface jobsDir = rootDir.findDirectory( DIR_JOBS );
repository.save( jobMeta, VERSION_COMMENT_V1, null );
deleteStack.push( jobMeta );
assertNotNull( jobMeta.getObjectId() );
ObjectRevision version = jobMeta.getObjectRevision();
assertNotNull( version );
assertTrue( hasVersionWithComment( jobMeta, VERSION_COMMENT_V1 ) );
assertTrue( repository.exists( EXP_JOB_NAME, jobsDir, RepositoryObjectType.JOB ) );
ObjectAcl acl = ( (IAclService) repository ).getAcl( jobMeta.getObjectId(), false );
assertNotNull( acl );
}
@Test
@Ignore
public void testSetAcl() throws Exception {
RepositoryDirectoryInterface rootDir = initRepo();
JobMeta jobMeta = createJobMeta( EXP_JOB_NAME );
RepositoryDirectoryInterface jobsDir = rootDir.findDirectory( DIR_JOBS );
repository.save( jobMeta, VERSION_COMMENT_V1, null );
deleteStack.push( jobMeta );
assertNotNull( jobMeta.getObjectId() );
ObjectRevision version = jobMeta.getObjectRevision();
assertNotNull( version );
assertTrue( hasVersionWithComment( jobMeta, VERSION_COMMENT_V1 ) );
assertTrue( repository.exists( EXP_JOB_NAME, jobsDir, RepositoryObjectType.JOB ) );
ObjectAcl acl = ( (IAclService) repository ).getAcl( jobMeta.getObjectId(), false );
assertNotNull( acl );
acl.setEntriesInheriting( false );
ObjectAce ace =
new RepositoryObjectAce( new RepositoryObjectRecipient( "suzy", Type.USER ), EnumSet
.of( RepositoryFilePermission.READ ) );
List<ObjectAce> aceList = new ArrayList<ObjectAce>();
aceList.add( ace );
acl.setAces( aceList );
( (IAclService) repository ).setAcl( jobMeta.getObjectId(), acl );
ObjectAcl acl1 = ( (IAclService) repository ).getAcl( jobMeta.getObjectId(), false );
assertEquals( Boolean.FALSE, acl1.isEntriesInheriting() );
assertEquals( 1, acl1.getAces().size() );
ObjectAce ace1 = acl1.getAces().get( 0 );
assertEquals( ace1.getRecipient().getName(), "suzy" );
assertTrue( ace1.getPermissions().contains( RepositoryFilePermission.READ ) );
}
@Test
@Ignore
public void testSaveDatabaseMetaJobEntryAttribute() throws Exception {
fail( "Not yet implemented" );
}
@Test
@Ignore
public void testSaveDatabaseMetaStepAttribute() throws Exception {
fail( "Not yet implemented" );
}
public static interface EntryAndStepConstants {
String ATTR_BOOL = "KDF";
boolean VALUE_BOOL = true;
String ATTR_BOOL_MULTI = "DFS";
boolean VALUE_BOOL_MULTI_0 = true;
boolean VALUE_BOOL_MULTI_1 = false;
String ATTR_BOOL_NOEXIST = "IXS";
boolean VALUE_BOOL_NOEXIST_DEF = true;
String ATTR_INT = "TAS";
int VALUE_INT = 4;
String ATTR_INT_MULTI = "EZA";
int VALUE_INT_MULTI_0 = 13;
int VALUE_INT_MULTI_1 = 42;
String ATTR_STRING = "YAZ";
String VALUE_STRING = "sdfsdfsdfswe2222";
String ATTR_STRING_MULTI = "LKS";
String VALUE_STRING_MULTI_0 = "LKS";
String VALUE_STRING_MULTI_1 = "LKS";
String ATTR_DB = "dbMeta1";
String ATTR_COND = "cond1";
}
/**
* Does assertions on all repository.getJobEntryAttribute* and repository.saveJobEntryAttribute* methods.
*/
@JobEntry( id = "JobEntryAttributeTester", image = "" )
public static class JobEntryAttributeTesterJobEntry extends JobEntryBase implements Cloneable, JobEntryInterface,
EntryAndStepConstants {
private DatabaseMeta databaseMeta;
public JobEntryAttributeTesterJobEntry() {
this( "" );
}
public JobEntryAttributeTesterJobEntry( final String name ) {
super( name, "" );
}
@Override
public void loadRep( final Repository rep, final IMetaStore metaStore, final ObjectId idJobentry,
final List<DatabaseMeta> databases, final List<SlaveServer> slaveServers ) throws KettleException {
assertEquals( 2, rep.countNrJobEntryAttributes( idJobentry, ATTR_BOOL_MULTI ) );
assertEquals( VALUE_BOOL, rep.getJobEntryAttributeBoolean( idJobentry, ATTR_BOOL ) );
assertEquals( VALUE_BOOL_MULTI_0, rep.getJobEntryAttributeBoolean( idJobentry, 0, ATTR_BOOL_MULTI ) );
assertEquals( VALUE_BOOL_MULTI_1, rep.getJobEntryAttributeBoolean( idJobentry, 1, ATTR_BOOL_MULTI ) );
assertEquals( VALUE_BOOL_NOEXIST_DEF, rep.getJobEntryAttributeBoolean( idJobentry, ATTR_BOOL_NOEXIST,
VALUE_BOOL_NOEXIST_DEF ) );
assertEquals( VALUE_INT, rep.getJobEntryAttributeInteger( idJobentry, ATTR_INT ) );
assertEquals( VALUE_INT_MULTI_0, rep.getJobEntryAttributeInteger( idJobentry, 0, ATTR_INT_MULTI ) );
assertEquals( VALUE_INT_MULTI_1, rep.getJobEntryAttributeInteger( idJobentry, 1, ATTR_INT_MULTI ) );
assertEquals( VALUE_STRING, rep.getJobEntryAttributeString( idJobentry, ATTR_STRING ) );
assertEquals( VALUE_STRING_MULTI_0, rep.getJobEntryAttributeString( idJobentry, 0, ATTR_STRING_MULTI ) );
assertEquals( VALUE_STRING_MULTI_1, rep.getJobEntryAttributeString( idJobentry, 1, ATTR_STRING_MULTI ) );
assertNotNull( rep.loadDatabaseMetaFromJobEntryAttribute( idJobentry, null, ATTR_DB, databases ) );
}
@Override
public void saveRep( final Repository rep, final IMetaStore metaStore, final ObjectId idJob )
throws KettleException {
rep.saveJobEntryAttribute( idJob, getObjectId(), ATTR_BOOL, VALUE_BOOL );
rep.saveJobEntryAttribute( idJob, getObjectId(), 0, ATTR_BOOL_MULTI, VALUE_BOOL_MULTI_0 );
rep.saveJobEntryAttribute( idJob, getObjectId(), 1, ATTR_BOOL_MULTI, VALUE_BOOL_MULTI_1 );
rep.saveJobEntryAttribute( idJob, getObjectId(), ATTR_INT, VALUE_INT );
rep.saveJobEntryAttribute( idJob, getObjectId(), 0, ATTR_INT_MULTI, VALUE_INT_MULTI_0 );
rep.saveJobEntryAttribute( idJob, getObjectId(), 1, ATTR_INT_MULTI, VALUE_INT_MULTI_1 );
rep.saveJobEntryAttribute( idJob, getObjectId(), ATTR_STRING, VALUE_STRING );
rep.saveJobEntryAttribute( idJob, getObjectId(), 0, ATTR_STRING_MULTI, VALUE_STRING_MULTI_0 );
rep.saveJobEntryAttribute( idJob, getObjectId(), 1, ATTR_STRING_MULTI, VALUE_STRING_MULTI_1 );
rep.saveDatabaseMetaJobEntryAttribute( idJob, getObjectId(), null, ATTR_DB, databaseMeta );
rep.insertJobEntryDatabase( idJob, getObjectId(), databaseMeta.getObjectId() );
}
public Result execute( final Result prevResult, final int nr ) throws KettleException {
throw new UnsupportedOperationException();
}
public void loadXML( final Node entrynode, final List<DatabaseMeta> databases,
final List<SlaveServer> slaveServers, final Repository rep, final IMetaStore metaStore )
throws KettleXMLException {
throw new UnsupportedOperationException();
}
public void setDatabaseMeta( DatabaseMeta databaseMeta ) {
this.databaseMeta = databaseMeta;
}
}
/**
* Does assertions on all repository.getStepAttribute* and repository.saveStepAttribute* methods.
*/
@Step( id = "StepAttributeTester", name = "StepAttributeTester", image = "" )
public static class TransStepAttributeTesterTransStep extends BaseStepMeta implements StepMetaInterface,
EntryAndStepConstants {
private DatabaseMeta databaseMeta;
private Condition condition;
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
}
public StepInterface getStep( StepMeta stepMeta, StepDataInterface stepDataInterface, int copyNr,
TransMeta transMeta, Trans trans ) {
return null;
}
public StepDataInterface getStepData() {
return null;
}
public void loadXML( Node stepnode, List<DatabaseMeta> databases, final IMetaStore metaStore )
throws KettleXMLException {
}
public void readRep( Repository rep, final IMetaStore metaStore, ObjectId idStep, List<DatabaseMeta> databases )
throws KettleException {
assertEquals( 2, rep.countNrStepAttributes( idStep, ATTR_BOOL_MULTI ) );
assertEquals( VALUE_BOOL, rep.getStepAttributeBoolean( idStep, ATTR_BOOL ) );
assertEquals( VALUE_BOOL_MULTI_0, rep.getStepAttributeBoolean( idStep, 0, ATTR_BOOL_MULTI ) );
assertEquals( VALUE_BOOL_MULTI_1, rep.getStepAttributeBoolean( idStep, 1, ATTR_BOOL_MULTI ) );
assertEquals( VALUE_BOOL_NOEXIST_DEF, rep.getStepAttributeBoolean( idStep, 0, ATTR_BOOL_NOEXIST,
VALUE_BOOL_NOEXIST_DEF ) );
assertEquals( VALUE_INT, rep.getStepAttributeInteger( idStep, ATTR_INT ) );
assertEquals( VALUE_INT_MULTI_0, rep.getStepAttributeInteger( idStep, 0, ATTR_INT_MULTI ) );
assertEquals( VALUE_INT_MULTI_1, rep.getStepAttributeInteger( idStep, 1, ATTR_INT_MULTI ) );
assertEquals( VALUE_STRING, rep.getStepAttributeString( idStep, ATTR_STRING ) );
assertEquals( VALUE_STRING_MULTI_0, rep.getStepAttributeString( idStep, 0, ATTR_STRING_MULTI ) );
assertEquals( VALUE_STRING_MULTI_1, rep.getStepAttributeString( idStep, 1, ATTR_STRING_MULTI ) );
assertNotNull( rep.loadDatabaseMetaFromStepAttribute( idStep, ATTR_DB, databases ) );
assertNotNull( rep.loadConditionFromStepAttribute( idStep, ATTR_COND ) );
}
public void saveRep( Repository rep, final IMetaStore metaStore, ObjectId idTransformation, ObjectId idStep )
throws KettleException {
rep.saveStepAttribute( idTransformation, idStep, ATTR_BOOL, VALUE_BOOL );
rep.saveStepAttribute( idTransformation, idStep, 0, ATTR_BOOL_MULTI, VALUE_BOOL_MULTI_0 );
rep.saveStepAttribute( idTransformation, idStep, 1, ATTR_BOOL_MULTI, VALUE_BOOL_MULTI_1 );
rep.saveStepAttribute( idTransformation, idStep, ATTR_INT, VALUE_INT );
rep.saveStepAttribute( idTransformation, idStep, 0, ATTR_INT_MULTI, VALUE_INT_MULTI_0 );
rep.saveStepAttribute( idTransformation, idStep, 1, ATTR_INT_MULTI, VALUE_INT_MULTI_1 );
rep.saveStepAttribute( idTransformation, idStep, ATTR_STRING, VALUE_STRING );
rep.saveStepAttribute( idTransformation, idStep, 0, ATTR_STRING_MULTI, VALUE_STRING_MULTI_0 );
rep.saveStepAttribute( idTransformation, idStep, 1, ATTR_STRING_MULTI, VALUE_STRING_MULTI_1 );
rep.saveDatabaseMetaStepAttribute( idTransformation, idStep, ATTR_DB, databaseMeta );
rep.insertStepDatabase( idTransformation, idStep, databaseMeta.getObjectId() );
rep.saveConditionStepAttribute( idTransformation, idStep, ATTR_COND, condition );
}
public void setDefault() {
}
public void setDatabaseMeta( final DatabaseMeta databaseMeta ) {
this.databaseMeta = databaseMeta;
}
public void setCondition( final Condition condition ) {
this.condition = condition;
}
}
}