/* * 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.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.finra.herd.dao.impl.AbstractHerdDao; import org.finra.herd.model.api.xml.BusinessObjectDataKey; import org.finra.herd.model.api.xml.BusinessObjectFormatKey; import org.finra.herd.model.jpa.BusinessObjectDataEntity; import org.finra.herd.model.jpa.BusinessObjectDataStatusEntity; import org.finra.herd.model.jpa.BusinessObjectDataStatusHistoryEntity; import org.finra.herd.model.jpa.BusinessObjectFormatEntity; @Component public class BusinessObjectDataDaoTestHelper { @Autowired private BusinessObjectDataDao businessObjectDataDao; @Autowired private BusinessObjectDataStatusDao businessObjectDataStatusDao; @Autowired private BusinessObjectDataStatusDaoTestHelper businessObjectDataStatusDaoTestHelper; @Autowired private BusinessObjectFormatDao businessObjectFormatDao; @Autowired private BusinessObjectFormatDaoTestHelper businessObjectFormatDaoTestHelper; /** * Resets business object data entity "created on" field value back by the specified number of days. * * @param businessObjectDataEntity the business object data entity * @param offsetInDays the number of days to reset the business object data "created on" field value */ public void ageBusinessObjectData(BusinessObjectDataEntity businessObjectDataEntity, long offsetInDays) { // Apply the offset in days to business object data "created on" value. businessObjectDataEntity .setCreatedOn(new Timestamp(businessObjectDataEntity.getCreatedOn().getTime() - offsetInDays * 86400000L)); // 24L * 60L * 60L * 1000L businessObjectDataDao.saveAndRefresh(businessObjectDataEntity); } /** * Creates and persists a new business object data entity. * * @return the newly created business object data entity. */ public BusinessObjectDataEntity createBusinessObjectDataEntity(String namespaceCode, String businessObjectDefinitionName, String businessObjectFormatUsage, String businessObjectFormatFileType, Integer businessObjectFormatVersion, String businessObjectDataPartitionValue, Integer businessObjectDataVersion, Boolean businessObjectDataLatestVersion, String businessObjectDataStatusCode) { return createBusinessObjectDataEntity(namespaceCode, businessObjectDefinitionName, businessObjectFormatUsage, businessObjectFormatFileType, businessObjectFormatVersion, businessObjectDataPartitionValue, AbstractDaoTest.NO_SUBPARTITION_VALUES, businessObjectDataVersion, businessObjectDataLatestVersion, businessObjectDataStatusCode); } /** * Creates and persists a new business object data entity. * * @return the newly created business object data entity. */ public BusinessObjectDataEntity createBusinessObjectDataEntity(BusinessObjectDataKey businessObjectDataKey, Boolean businessObjectDataLatestVersion, String businessObjectDataStatusCode) { return createBusinessObjectDataEntity(businessObjectDataKey.getNamespace(), businessObjectDataKey.getBusinessObjectDefinitionName(), businessObjectDataKey.getBusinessObjectFormatUsage(), businessObjectDataKey.getBusinessObjectFormatFileType(), businessObjectDataKey.getBusinessObjectFormatVersion(), businessObjectDataKey.getPartitionValue(), businessObjectDataKey.getSubPartitionValues(), businessObjectDataKey.getBusinessObjectDataVersion(), businessObjectDataLatestVersion, businessObjectDataStatusCode); } /** * Creates and persists a new business object data entity. * * @return the newly created business object data entity. */ public BusinessObjectDataEntity createBusinessObjectDataEntity(String namespaceCode, String businessObjectDefinitionName, String businessObjectFormatUsage, String businessObjectFormatFileType, Integer businessObjectFormatVersion, String businessObjectDataPartitionValue, List<String> businessObjectDataSubPartitionValues, Integer businessObjectDataVersion, Boolean businessObjectDataLatestVersion, String businessObjectDataStatusCode) { // Create a business object format entity if it does not exist. BusinessObjectFormatEntity businessObjectFormatEntity = businessObjectFormatDao.getBusinessObjectFormatByAltKey( new BusinessObjectFormatKey(namespaceCode, businessObjectDefinitionName, businessObjectFormatUsage, businessObjectFormatFileType, businessObjectFormatVersion)); if (businessObjectFormatEntity == null) { businessObjectFormatEntity = businessObjectFormatDaoTestHelper .createBusinessObjectFormatEntity(namespaceCode, businessObjectDefinitionName, businessObjectFormatUsage, businessObjectFormatFileType, businessObjectFormatVersion, AbstractDaoTest.FORMAT_DESCRIPTION, true, AbstractDaoTest.PARTITION_KEY); } // Create a business object data status entity if it does not exist. BusinessObjectDataStatusEntity businessObjectDataStatusEntity = businessObjectDataStatusDao.getBusinessObjectDataStatusByCode(businessObjectDataStatusCode); if (businessObjectDataStatusEntity == null) { businessObjectDataStatusEntity = businessObjectDataStatusDaoTestHelper.createBusinessObjectDataStatusEntity(businessObjectDataStatusCode); } return createBusinessObjectDataEntity(businessObjectFormatEntity, businessObjectDataPartitionValue, businessObjectDataSubPartitionValues, businessObjectDataVersion, businessObjectDataLatestVersion, businessObjectDataStatusEntity); } /** * Creates and persists a new business object data entity. * * @return the newly created business object data entity. */ public BusinessObjectDataEntity createBusinessObjectDataEntity(BusinessObjectFormatEntity businessObjectFormatEntity, String businessObjectDataPartitionValue, Integer businessObjectDataVersion, Boolean businessObjectDataLatestVersion, String businessObjectDataStatusCode) { // Create a business object data status entity if it does not exist. BusinessObjectDataStatusEntity businessObjectDataStatusEntity = businessObjectDataStatusDao.getBusinessObjectDataStatusByCode(businessObjectDataStatusCode); if (businessObjectDataStatusEntity == null) { businessObjectDataStatusEntity = businessObjectDataStatusDaoTestHelper.createBusinessObjectDataStatusEntity(businessObjectDataStatusCode); } return createBusinessObjectDataEntity(businessObjectFormatEntity, businessObjectDataPartitionValue, AbstractDaoTest.NO_SUBPARTITION_VALUES, businessObjectDataVersion, businessObjectDataLatestVersion, businessObjectDataStatusEntity); } /** * Creates and persists a new business object data entity. * * @return the newly created business object data entity. */ public BusinessObjectDataEntity createBusinessObjectDataEntity(BusinessObjectFormatEntity businessObjectFormatEntity, String businessObjectDataPartitionValue, Integer businessObjectDataVersion, Boolean businessObjectDataLatestVersion, BusinessObjectDataStatusEntity businessObjectDataStatusEntity) { return createBusinessObjectDataEntity(businessObjectFormatEntity, businessObjectDataPartitionValue, AbstractDaoTest.NO_SUBPARTITION_VALUES, businessObjectDataVersion, businessObjectDataLatestVersion, businessObjectDataStatusEntity); } /** * Creates and persists a new business object data entity. * * @return the newly created business object data entity. */ public BusinessObjectDataEntity createBusinessObjectDataEntity(BusinessObjectFormatEntity businessObjectFormatEntity, String businessObjectDataPartitionValue, List<String> businessObjectDataSubPartitionValues, Integer businessObjectDataVersion, Boolean businessObjectDataLatestVersion, String businessObjectDataStatusCode) { // Create a business object data status entity if it does not exist. BusinessObjectDataStatusEntity businessObjectDataStatusEntity = businessObjectDataStatusDao.getBusinessObjectDataStatusByCode(businessObjectDataStatusCode); if (businessObjectDataStatusEntity == null) { businessObjectDataStatusEntity = businessObjectDataStatusDaoTestHelper.createBusinessObjectDataStatusEntity(businessObjectDataStatusCode); } return createBusinessObjectDataEntity(businessObjectFormatEntity, businessObjectDataPartitionValue, businessObjectDataSubPartitionValues, businessObjectDataVersion, businessObjectDataLatestVersion, businessObjectDataStatusEntity); } /** * Creates and persists a new business object data entity. * * @return the newly created business object data entity. */ public BusinessObjectDataEntity createBusinessObjectDataEntity(BusinessObjectFormatEntity businessObjectFormatEntity, String businessObjectDataPartitionValue, List<String> businessObjectDataSubPartitionValues, Integer businessObjectDataVersion, Boolean businessObjectDataLatestVersion, BusinessObjectDataStatusEntity businessObjectDataStatusEntity) { BusinessObjectDataEntity businessObjectDataEntity = new BusinessObjectDataEntity(); businessObjectDataEntity.setVersion(businessObjectDataVersion); businessObjectDataEntity.setPartitionValue(businessObjectDataPartitionValue); if (businessObjectDataSubPartitionValues != null) { businessObjectDataEntity.setPartitionValue2(businessObjectDataSubPartitionValues.size() > 0 ? businessObjectDataSubPartitionValues.get(0) : null); businessObjectDataEntity.setPartitionValue3(businessObjectDataSubPartitionValues.size() > 1 ? businessObjectDataSubPartitionValues.get(1) : null); businessObjectDataEntity.setPartitionValue4(businessObjectDataSubPartitionValues.size() > 2 ? businessObjectDataSubPartitionValues.get(2) : null); businessObjectDataEntity.setPartitionValue5(businessObjectDataSubPartitionValues.size() > 3 ? businessObjectDataSubPartitionValues.get(3) : null); } businessObjectDataEntity.setBusinessObjectFormat(businessObjectFormatEntity); businessObjectDataEntity.setLatestVersion(businessObjectDataLatestVersion); businessObjectDataEntity.setStatus(businessObjectDataStatusEntity); // Add an entry to the business object data status history table. BusinessObjectDataStatusHistoryEntity businessObjectDataStatusHistoryEntity = new BusinessObjectDataStatusHistoryEntity(); businessObjectDataStatusHistoryEntity.setBusinessObjectData(businessObjectDataEntity); businessObjectDataStatusHistoryEntity.setStatus(businessObjectDataStatusEntity); List<BusinessObjectDataStatusHistoryEntity> businessObjectDataStatusHistoryEntities = new ArrayList<>(); businessObjectDataStatusHistoryEntities.add(businessObjectDataStatusHistoryEntity); businessObjectDataEntity.setHistoricalStatuses(businessObjectDataStatusHistoryEntities); return businessObjectDataDao.saveAndRefresh(businessObjectDataEntity); } /** * Creates and persists a new business object data entity. * * @return the newly created business object data entity. */ public BusinessObjectDataEntity createBusinessObjectDataEntity() { return createBusinessObjectDataEntity(businessObjectFormatDaoTestHelper.createBusinessObjectFormatEntity(false), new SimpleDateFormat(AbstractHerdDao.DEFAULT_SINGLE_DAY_DATE_MASK).format(System.currentTimeMillis()), AbstractDaoTest.SUBPARTITION_VALUES, AbstractDaoTest.INITIAL_DATA_VERSION, true, BusinessObjectDataStatusEntity.VALID); } }