From 0cd5910ca2c949bab95ec73591729c4b7230fdd1 Mon Sep 17 00:00:00 2001 From: niamhcore Date: Mon, 30 Nov 2020 14:39:28 +0000 Subject: Create Common Model objects in SPI Issue-ID: CPS-100 Signed-off-by: niamhcore Change-Id: I8ba54cc5d881d9d5f18b77a54ae28d3dda8412c1 --- .../spi/impl/CpsAdminPersistenceServiceImpl.java | 73 ++++++++++++++ .../spi/impl/CpsModulePersistenceServiceImpl.java | 111 +++++++++++++++++++++ .../spi/impl/FragmentPersistenceServiceImpl.java | 72 ------------- .../cps/spi/impl/ModelPersistenceServiceImpl.java | 111 --------------------- 4 files changed, 184 insertions(+), 183 deletions(-) create mode 100644 cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java create mode 100644 cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java delete mode 100755 cps-ri/src/main/java/org/onap/cps/spi/impl/FragmentPersistenceServiceImpl.java delete mode 100755 cps-ri/src/main/java/org/onap/cps/spi/impl/ModelPersistenceServiceImpl.java (limited to 'cps-ri/src/main/java/org') diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java new file mode 100644 index 000000000..684750c45 --- /dev/null +++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java @@ -0,0 +1,73 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2020 Nordix Foundation. 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.spi.impl; + +import org.onap.cps.exceptions.CpsNotFoundException; +import org.onap.cps.exceptions.CpsValidationException; +import org.onap.cps.spi.CpsAdminPersistenceService; +import org.onap.cps.spi.entities.Dataspace; +import org.onap.cps.spi.entities.Fragment; +import org.onap.cps.spi.entities.Module; +import org.onap.cps.spi.model.Anchor; +import org.onap.cps.spi.repository.DataspaceRepository; +import org.onap.cps.spi.repository.FragmentRepository; +import org.onap.cps.spi.repository.ModuleRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.stereotype.Component; + +@Component +public class CpsAdminPersistenceServiceImpl implements CpsAdminPersistenceService { + + @Autowired + private DataspaceRepository dataspaceRepository; + + @Autowired + private FragmentRepository fragmentRepository; + + @Autowired + private ModuleRepository moduleRepository; + + @Override + public String createAnchor(final Anchor anchor) { + final String anchorName = anchor.getAnchorName(); + try { + final Dataspace dataspace = dataspaceRepository.getByName(anchor.getDataspaceName()); + final Module module = + moduleRepository.getByDataspaceAndNamespaceAndRevision(dataspace, + anchor.getNamespace(), anchor.getRevision()); + + final Fragment fragment = Fragment.builder().xpath(anchorName) + .anchorName(anchorName) + .dataspace(dataspace).module(module).build(); + + fragmentRepository.save(fragment); + return anchorName; + } catch (final CpsNotFoundException ex) { + throw new CpsValidationException("Validation Error", + "Dataspace and/or Module do not exist."); + } catch (final DataIntegrityViolationException ex) { + throw new CpsValidationException("Duplication Error", + String.format("Anchor with name %s already exist in dataspace %s.", + anchorName, anchor.getDataspaceName())); + } + } +} diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java new file mode 100644 index 000000000..52f803457 --- /dev/null +++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java @@ -0,0 +1,111 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2020 Nordix Foundation + * Modifications Copyright (C) 2020 Bell Canada. 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.spi.impl; + +import static org.onap.cps.exceptions.CpsExceptionBuilder.duplicateSchemaSetException; +import static org.onap.cps.exceptions.CpsExceptionBuilder.invalidDataspaceException; + +import com.google.common.collect.ImmutableSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import javax.transaction.Transactional; +import org.onap.cps.spi.CpsModulePersistenceService; +import org.onap.cps.spi.entities.Dataspace; +import org.onap.cps.spi.entities.SchemaSet; +import org.onap.cps.spi.entities.YangResource; +import org.onap.cps.spi.repository.DataspaceRepository; +import org.onap.cps.spi.repository.SchemaSetRepository; +import org.onap.cps.spi.repository.YangResourceRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.stereotype.Component; +import org.springframework.util.DigestUtils; + +@Component +public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceService { + + @Autowired + private YangResourceRepository yangResourceRepository; + + @Autowired + private SchemaSetRepository schemaSetRepository; + + @Autowired + private DataspaceRepository dataspaceRepository; + + @Override + public void storeModule(final String namespace, final String moduleContent, final String revision, + final String dataspaceName) { + // TODO this method should be removed as obsolete. + // Modules to be processed within schema sets only. + } + + @Override + @Transactional + public void storeSchemaSet(final String dataspaceName, final String schemaSetName, + final Set yangResourcesAsStrings) { + + final Dataspace dataspace = dataspaceRepository.findByName(dataspaceName) + .orElseThrow(() -> invalidDataspaceException(dataspaceName)); + + final Set yangResources = synchronizeYangResources(yangResourcesAsStrings); + final SchemaSet schemaSet = new SchemaSet(); + schemaSet.setName(schemaSetName); + schemaSet.setDataspace(dataspace); + schemaSet.setYangResources(yangResources); + try { + schemaSetRepository.save(schemaSet); + } catch (final DataIntegrityViolationException e) { + throw duplicateSchemaSetException(dataspaceName, schemaSetName); + } + } + + private Set synchronizeYangResources(final Set yangResourcesAsStrings) { + final Map checksumToContentMap = yangResourcesAsStrings.stream() + .collect(Collectors.toMap( + content -> DigestUtils.md5DigestAsHex(content.getBytes()), + content -> content) + ); + + final List existingYangResources = + yangResourceRepository.findAllByChecksumIn(checksumToContentMap.keySet()); + existingYangResources.forEach(yangFile -> checksumToContentMap.remove(yangFile.getChecksum())); + + final List newYangResources = checksumToContentMap.entrySet().stream() + .map(entry -> { + final YangResource yangResource = new YangResource(); + yangResource.setChecksum(entry.getKey()); + yangResource.setContent(entry.getValue()); + return yangResource; + }).collect(Collectors.toList()); + if (!newYangResources.isEmpty()) { + yangResourceRepository.saveAll(newYangResources); + } + + return ImmutableSet.builder() + .addAll(existingYangResources) + .addAll(newYangResources) + .build(); + } + +} diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/FragmentPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/FragmentPersistenceServiceImpl.java deleted file mode 100755 index 82554b3d0..000000000 --- a/cps-ri/src/main/java/org/onap/cps/spi/impl/FragmentPersistenceServiceImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2020 Nordix Foundation. 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.cps.spi.impl; - -import org.onap.cps.api.model.AnchorDetails; -import org.onap.cps.exceptions.CpsNotFoundException; -import org.onap.cps.exceptions.CpsValidationException; -import org.onap.cps.spi.FragmentPersistenceService; -import org.onap.cps.spi.entities.Dataspace; -import org.onap.cps.spi.entities.Fragment; -import org.onap.cps.spi.entities.Module; -import org.onap.cps.spi.repository.DataspaceRepository; -import org.onap.cps.spi.repository.FragmentRepository; -import org.onap.cps.spi.repository.ModuleRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.stereotype.Component; - -@Component -public class FragmentPersistenceServiceImpl implements FragmentPersistenceService { - - @Autowired - private DataspaceRepository dataspaceRepository; - - @Autowired - private FragmentRepository fragmentRepository; - - @Autowired - private ModuleRepository moduleRepository; - - @Override - public String createAnchor(final AnchorDetails anchorDetails) { - try { - final Dataspace dataspace = dataspaceRepository.getByName(anchorDetails.getDataspace()); - final Module module = - moduleRepository.getByDataspaceAndNamespaceAndRevision(dataspace, - anchorDetails.getNamespace(), anchorDetails.getRevision()); - - final Fragment fragment = Fragment.builder().xpath(anchorDetails.getAnchorName()) - .anchorName(anchorDetails.getAnchorName()) - .dataspace(dataspace).module(module).build(); - - fragmentRepository.save(fragment); - return anchorDetails.getAnchorName(); - } catch (final CpsNotFoundException ex) { - throw new CpsValidationException("Validation Error", - "Dataspace and/or Module do not exist."); - } catch (final DataIntegrityViolationException ex) { - throw new CpsValidationException("Duplication Error", - String.format("Anchor with name %s already exist in dataspace %s.", - anchorDetails.getAnchorName(), anchorDetails.getDataspace())); - } - } -} diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/ModelPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/ModelPersistenceServiceImpl.java deleted file mode 100755 index 2207f7940..000000000 --- a/cps-ri/src/main/java/org/onap/cps/spi/impl/ModelPersistenceServiceImpl.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2020 Nordix Foundation - * Modifications Copyright (C) 2020 Bell Canada. 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.cps.spi.impl; - -import static org.onap.cps.exceptions.CpsExceptionBuilder.duplicateSchemaSetException; -import static org.onap.cps.exceptions.CpsExceptionBuilder.invalidDataspaceException; - -import com.google.common.collect.ImmutableSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import javax.transaction.Transactional; -import org.onap.cps.spi.ModelPersistenceService; -import org.onap.cps.spi.entities.Dataspace; -import org.onap.cps.spi.entities.SchemaSet; -import org.onap.cps.spi.entities.YangResource; -import org.onap.cps.spi.repository.DataspaceRepository; -import org.onap.cps.spi.repository.SchemaSetRepository; -import org.onap.cps.spi.repository.YangResourceRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.stereotype.Component; -import org.springframework.util.DigestUtils; - -@Component -public class ModelPersistenceServiceImpl implements ModelPersistenceService { - - @Autowired - private YangResourceRepository yangResourceRepository; - - @Autowired - private SchemaSetRepository schemaSetRepository; - - @Autowired - private DataspaceRepository dataspaceRepository; - - @Override - public void storeModule(final String namespace, final String moduleContent, final String revision, - final String dataspaceName) { - // TODO this method should be removed as obsolete. - // Modules to be processed within schema sets only. - } - - @Override - @Transactional - public void storeSchemaSet(final String dataspaceName, final String schemaSetName, - final Set yangResourcesAsStrings) { - - final Dataspace dataspace = dataspaceRepository.findByName(dataspaceName) - .orElseThrow(() -> invalidDataspaceException(dataspaceName)); - - final Set yangResources = synchronizeYangResources(yangResourcesAsStrings); - final SchemaSet schemaSet = new SchemaSet(); - schemaSet.setName(schemaSetName); - schemaSet.setDataspace(dataspace); - schemaSet.setYangResources(yangResources); - try { - schemaSetRepository.save(schemaSet); - } catch (final DataIntegrityViolationException e) { - throw duplicateSchemaSetException(dataspaceName, schemaSetName); - } - } - - private Set synchronizeYangResources(final Set yangResourcesAsStrings) { - final Map checksumToContentMap = yangResourcesAsStrings.stream() - .collect(Collectors.toMap( - content -> DigestUtils.md5DigestAsHex(content.getBytes()), - content -> content) - ); - - final List existingYangResources = - yangResourceRepository.findAllByChecksumIn(checksumToContentMap.keySet()); - existingYangResources.forEach(yangFile -> checksumToContentMap.remove(yangFile.getChecksum())); - - final List newYangResources = checksumToContentMap.entrySet().stream() - .map(entry -> { - final YangResource yangResource = new YangResource(); - yangResource.setChecksum(entry.getKey()); - yangResource.setContent(entry.getValue()); - return yangResource; - }).collect(Collectors.toList()); - if (!newYangResources.isEmpty()) { - yangResourceRepository.saveAll(newYangResources); - } - - return ImmutableSet.builder() - .addAll(existingYangResources) - .addAll(newYangResources) - .build(); - } - -} -- cgit 1.2.3-korg