import java.util.Set;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.onap.cps.spi.CascadeDeleteAllowed;
+import org.onap.cps.spi.CpsAdminPersistenceService;
import org.onap.cps.spi.CpsModulePersistenceService;
+import org.onap.cps.spi.entities.AnchorEntity;
import org.onap.cps.spi.entities.DataspaceEntity;
import org.onap.cps.spi.entities.SchemaSetEntity;
import org.onap.cps.spi.entities.YangResourceEntity;
-import org.onap.cps.spi.exceptions.SchemaSetAlreadyDefinedException;
+import org.onap.cps.spi.exceptions.AlreadyDefinedException;
+import org.onap.cps.spi.exceptions.SchemaSetInUseException;
+import org.onap.cps.spi.model.Anchor;
+import org.onap.cps.spi.repository.AnchorRepository;
import org.onap.cps.spi.repository.DataspaceRepository;
+import org.onap.cps.spi.repository.FragmentRepository;
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 DataspaceRepository dataspaceRepository;
+ @Autowired
+ private AnchorRepository anchorRepository;
+
+ @Autowired
+ private FragmentRepository fragmentRepository;
+
+ @Autowired
+ private CpsAdminPersistenceService cpsAdminPersistenceService;
+
@Override
@Transactional
public void storeSchemaSet(final String dataspaceName, final String schemaSetName,
try {
schemaSetRepository.save(schemaSetEntity);
} catch (final DataIntegrityViolationException e) {
- throw new SchemaSetAlreadyDefinedException(dataspaceName, schemaSetName, e);
+ throw AlreadyDefinedException.forSchemaSet(schemaSetName, dataspaceName, e);
}
}
private Set<YangResourceEntity> synchronizeYangResources(final Map<String, String> yangResourcesNameToContentMap) {
final Map<String, YangResourceEntity> checksumToEntityMap = yangResourcesNameToContentMap.entrySet().stream()
.map(entry -> {
- final String checksum = DigestUtils.md5DigestAsHex(entry.getValue().getBytes(StandardCharsets.UTF_8));
+ final String checksum = DigestUtils.sha256Hex(entry.getValue().getBytes(StandardCharsets.UTF_8));
final YangResourceEntity yangResourceEntity = new YangResourceEntity();
yangResourceEntity.setName(entry.getKey());
yangResourceEntity.setContent(entry.getValue());
return schemaSetEntity.getYangResources().stream().collect(
Collectors.toMap(YangResourceEntity::getName, YangResourceEntity::getContent));
}
+
+ @Override
+ public Map<String, String> getYangSchemaSetResources(final String dataspaceName, final String anchorName) {
+ final Anchor anchor = cpsAdminPersistenceService.getAnchor(dataspaceName, anchorName);
+ return getYangSchemaResources(dataspaceName, anchor.getSchemaSetName());
+ }
+
+ @Override
+ @Transactional
+ public void deleteSchemaSet(final String dataspaceName, final String schemaSetName,
+ final CascadeDeleteAllowed cascadeDeleteAllowed) {
+ final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
+ final SchemaSetEntity schemaSetEntity =
+ schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName);
+
+ final Collection<AnchorEntity> anchorEntities = anchorRepository.findAllBySchemaSet(schemaSetEntity);
+ if (!anchorEntities.isEmpty()) {
+ if (cascadeDeleteAllowed != CascadeDeleteAllowed.CASCADE_DELETE_ALLOWED) {
+ throw new SchemaSetInUseException(dataspaceName, schemaSetName);
+ }
+ fragmentRepository.deleteByAnchorIn(anchorEntities);
+ anchorRepository.deleteAll(anchorEntities);
+ }
+ schemaSetRepository.delete(schemaSetEntity);
+ yangResourceRepository.deleteOrphans();
+ }
}