/*
* Copyright 2015 herd contributors
*
* 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.finra.herd.dao;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.finra.herd.model.api.xml.SchemaColumn;
import org.finra.herd.model.jpa.BusinessObjectDefinitionColumnEntity;
import org.finra.herd.model.jpa.BusinessObjectFormatEntity;
import org.finra.herd.model.jpa.SchemaColumnEntity;
@Component
public class SchemaColumnDaoTestHelper
{
@Autowired
private SchemaColumnDao schemaColumnDao;
/**
* Creates and persists a new schema column entity.
*
* @param businessObjectFormatEntity the business object format entity
* @param columnName the name of the schema column
*
* @return the newly created schema column entity
*/
public SchemaColumnEntity createSchemaColumnEntity(BusinessObjectFormatEntity businessObjectFormatEntity, String columnName)
{
return createSchemaColumnEntity(businessObjectFormatEntity, columnName, null);
}
/**
* Creates and persists a new schema column entity.
*
* @param businessObjectFormatEntity the business object format entity
* @param columnName the name of the schema column
* @param businessObjectDefinitionColumnEntity the business object definition column entity
*
* @return the newly created schema column entity
*/
public SchemaColumnEntity createSchemaColumnEntity(BusinessObjectFormatEntity businessObjectFormatEntity, String columnName,
BusinessObjectDefinitionColumnEntity businessObjectDefinitionColumnEntity)
{
SchemaColumnEntity schemaColumnEntity = new SchemaColumnEntity();
schemaColumnEntity.setBusinessObjectFormat(businessObjectFormatEntity);
schemaColumnEntity.setName(columnName);
schemaColumnEntity.setType(AbstractDaoTest.COLUMN_DATA_TYPE);
schemaColumnEntity.setBusinessObjectDefinitionColumn(businessObjectDefinitionColumnEntity);
return schemaColumnDao.saveAndRefresh(schemaColumnEntity);
}
/**
* Returns a list of schema columns that use hard coded test values.
*
* @return the list of test schema column entities
*/
public List<SchemaColumn> getTestPartitionColumns()
{
return getTestSchemaColumns("PRTN_CLMN", AbstractDaoTest.PARTITION_COLUMNS);
}
/**
* Returns a list of schema partition columns that use hard coded test values.
*
* @return the list of test schema partition columns
*/
public List<SchemaColumn> getTestPartitionColumns(String randomSuffix)
{
List<SchemaColumn> partitionColumns = new ArrayList<>();
// Add first 3 partition column matching to regular partition columns.
partitionColumns.addAll(getTestSchemaColumns(AbstractDaoTest.SCHEMA_COLUMN_NAME_PREFIX, 0, 3, randomSuffix));
// Add the remaining partition columns.
partitionColumns.addAll(getTestSchemaColumns(AbstractDaoTest.SCHEMA_PARTITION_COLUMN_NAME_PREFIX, 3, AbstractDaoTest.MAX_PARTITIONS - 3, randomSuffix));
// Update top level partition column name to match the business object format partition key.
partitionColumns.get(0).setName(AbstractDaoTest.PARTITION_KEY);
return partitionColumns;
}
/**
* Returns a list of schema columns that use hard coded test values.
*
* @param randomSuffix the random suffix
*
* @return the list of test schema columns
*/
public List<SchemaColumn> getTestSchemaColumns(String randomSuffix)
{
return getTestSchemaColumns(AbstractDaoTest.SCHEMA_COLUMN_NAME_PREFIX, 0, AbstractDaoTest.MAX_COLUMNS, randomSuffix);
}
/**
* Returns a list of schema columns that use passed attributes and hard coded test values.
*
* @param columnNamePrefix the column name prefix to use for the test columns
* @param offset the offset index to start generating columns with
* @param numColumns the number of columns
* @param randomSuffix the random suffix
*
* @return the list of test schema columns
*/
public List<SchemaColumn> getTestSchemaColumns(String columnNamePrefix, Integer offset, Integer numColumns, String randomSuffix)
{
// Build a list of schema columns.
List<SchemaColumn> columns = new ArrayList<>();
for (int i = 0; i < numColumns; i++)
{
SchemaColumn schemaColumn = new SchemaColumn();
columns.add(schemaColumn);
// Set a value for the required column name field.
schemaColumn.setName(String.format("%s-%d%s", columnNamePrefix, i + offset, randomSuffix));
// Set a value for the required column type field.
schemaColumn.setType(String.format("Type-%d", i + offset));
// Set a value for the optional column size field for every other column.
schemaColumn.setSize(i % 2 == 0 ? null : String.format("Size-%d", i + offset));
// Set a value for the optional column required flag for each two out of 3 columns with the flag value alternating between true and false.
schemaColumn.setRequired(i % 3 == 0 ? null : i % 2 == 0);
// Set a value for the optional default value field for every other column.
schemaColumn.setDefaultValue(i % 2 == 0 ? null : String.format("Clmn-Dflt-Value-%d%s", i, randomSuffix));
// Set a value for the optional column size field for every other column.
schemaColumn.setDescription(i % 2 == 0 ? null : String.format("Clmn-Desc-%d%s", i, randomSuffix));
}
return columns;
}
/**
* Returns a list of schema columns that use hard coded test values.
*
* @return the list of test schema column entities
*/
public List<SchemaColumn> getTestSchemaColumns()
{
return getTestSchemaColumns("COLUMN", AbstractDaoTest.SCHEMA_COLUMNS);
}
/**
* Returns a list of schema columns that use hard coded test values.
*
* @param columnNamePrefix the column name prefix
* @param schemaColumnDataTypes the list of schema column data types
*
* @return the list of test schema column entities
*/
public List<SchemaColumn> getTestSchemaColumns(String columnNamePrefix, String[][] schemaColumnDataTypes)
{
// Build a list of schema columns.
List<SchemaColumn> schemaColumns = new ArrayList<>();
int index = 1;
for (String[] schemaColumnDataType : schemaColumnDataTypes)
{
SchemaColumn schemaColumn = new SchemaColumn();
schemaColumns.add(schemaColumn);
String columnName = String.format("%s%03d", columnNamePrefix, index);
schemaColumn.setName(columnName);
schemaColumn.setType(schemaColumnDataType[0]);
schemaColumn.setSize(schemaColumnDataType[1]);
index++;
}
// Column comment is an optional field, so provide comment for the second column only.
schemaColumns.get(1).setDescription(
String.format("This is '%s' column. Here are \\'single\\' and \"double\" quotes along with a backslash \\.", schemaColumns.get(1).getName()));
return schemaColumns;
}
}