/*
* Copyright © 2017-2018 AT&T Intellectual Property.
* Modifications Copyright © 2019 IBM.
*
* 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.onap.ccsdk.cds.blueprintsprocessor.designer.api.handler
import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.repository.ModelTypeRepository
import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.utils.ModelTypeValidator
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException
import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.domain.ModelType
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
@Service
open class ModelTypeHandler(private val modelTypeRepository: ModelTypeRepository) {
private val log = LoggerFactory.getLogger(ModelTypeHandler::class.java)!!
/**
* This is a getModelTypeByName service
*
* @param modelTypeName modelTypeName
* @return ModelType
*/
suspend fun getModelTypeByName(modelTypeName: String): ModelType {
log.info("Searching : $modelTypeName")
check(modelTypeName.isNotBlank()) { "Model Name Information is missing." }
val modelType = modelTypeRepository.findByModelName(modelTypeName)
return if (modelType != null) {
modelType
} else {
throw BluePrintException("couldn't get modelType($modelTypeName)")
}
}
/**
* This is a searchModelTypes service
*
* @param tags tags
* @return List
*/
suspend fun searchModelTypes(tags: String): List {
check(tags.isNotBlank()) { "No Search Information provide" }
return modelTypeRepository.findByTagsContainingIgnoreCase(tags)
}
/**
* This is a saveModel service
*
* @param modelType modelType
* @return ModelType
* @throws BluePrintException BluePrintException
*/
@Throws(BluePrintException::class)
suspend open fun saveModel(modelType: ModelType): ModelType {
lateinit var dbModel: ModelType
ModelTypeValidator.validateModelType(modelType)
val dbModelType: ModelType? = modelTypeRepository.findByModelName(modelType.modelName)
if (dbModelType != null) {
dbModel = dbModelType
dbModel.description = modelType.description
dbModel.definition = modelType.definition
dbModel.definitionType = modelType.definitionType
dbModel.derivedFrom = modelType.derivedFrom
dbModel.tags = modelType.tags
dbModel.version = modelType.version
dbModel.updatedBy = modelType.updatedBy
dbModel = modelTypeRepository.save(dbModel)
} else {
dbModel = modelTypeRepository.save(modelType)
}
return dbModel
}
/**
* This is a deleteByModelName service
*
* @param modelName modelName
*/
suspend open fun deleteByModelName(modelName: String) {
check(modelName.isNotBlank()) { "Model Name Information is missing." }
modelTypeRepository.deleteByModelName(modelName)
}
/**
* This is a getModelTypeByDefinitionType service
*
* @param definitionType definitionType
* @return List
*/
suspend fun getModelTypeByDefinitionType(definitionType: String): List {
check(definitionType.isNotBlank()) { "Model definitionType Information is missing." }
return modelTypeRepository.findByDefinitionType(definitionType)
}
/**
* This is a getModelTypeByDerivedFrom service
*
* @param derivedFrom derivedFrom
* @return List
*/
suspend fun getModelTypeByDerivedFrom(derivedFrom: String): List {
check(derivedFrom.isNotBlank()) { "Model derivedFrom Information is missing." }
return modelTypeRepository.findByDerivedFrom(derivedFrom)
}
}