package de.cinovo.cloudconductor.server.rest.impl; /* * #%L * cloudconductor-server * %% * Copyright (C) 2013 - 2014 Cinovo AG * %% * 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. * #L% */ import java.util.HashSet; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import de.cinovo.cloudconductor.api.interfaces.IPackage; import de.cinovo.cloudconductor.api.model.Dependency; import de.cinovo.cloudconductor.api.model.Package; import de.cinovo.cloudconductor.api.model.PackageVersion; import de.cinovo.cloudconductor.server.dao.IDependencyDAO; import de.cinovo.cloudconductor.server.dao.IPackageDAO; import de.cinovo.cloudconductor.server.dao.IPackageVersionDAO; import de.cinovo.cloudconductor.server.model.EDependency; import de.cinovo.cloudconductor.server.model.EPackage; import de.cinovo.cloudconductor.server.model.EPackageVersion; import de.cinovo.cloudconductor.server.rest.helper.AMConverter; import de.cinovo.cloudconductor.server.rest.helper.MAConverter; import de.taimos.restutils.RESTAssert; import de.taimos.springcxfdaemon.JaxRsComponent; /** * Copyright 2013 Cinovo AG<br> * <br> * * @author psigloch * */ @JaxRsComponent public class PackageImpl extends ImplHelper implements IPackage { @Autowired private IPackageDAO dpkg; @Autowired private IPackageVersionDAO drpm; @Autowired private IDependencyDAO ddep; @Autowired private AMConverter amc; @Override @Transactional public Package[] get() { Set<Package> result = new HashSet<>(); for (EPackage m : this.dpkg.findList()) { result.add(MAConverter.fromModel(m)); } return result.toArray(new Package[result.size()]); } @Override @Transactional public void save(String name, Package apiObject) { this.assertName(name, apiObject); EPackage m = this.amc.toModel(apiObject); if ((apiObject.getRpms() != null) && !apiObject.getRpms().isEmpty()) { Set<EPackageVersion> found = new HashSet<>(); for (String s : apiObject.getRpms()) { EPackageVersion rpm = this.drpm.find(m.getName(), s); this.assertModelFound(rpm); found.add(rpm); } m.setRPMs(found); } else { m.setRPMs(null); } this.dpkg.save(m); } @Override @Transactional public Package get(String name) { RESTAssert.assertNotEmpty(name); EPackage model = this.findByName(this.dpkg, name); return MAConverter.fromModel(model); } @Override @Transactional public void delete(String name) { RESTAssert.assertNotEmpty(name); EPackage model = this.dpkg.findByName(name); this.assertModelFound(model); this.dpkg.delete(model); } @Override @Transactional public PackageVersion[] getRPMS(String name) { RESTAssert.assertNotEmpty(name); Set<PackageVersion> result = new HashSet<>(); for (EPackageVersion m : this.drpm.find(name)) { result.add(MAConverter.fromModel(m)); } return result.toArray(new PackageVersion[result.size()]); } @Override @Transactional public void addRPM(String name, String version, PackageVersion rpm) { RESTAssert.assertNotEmpty(name); RESTAssert.assertNotNull(rpm); RESTAssert.assertEquals(rpm.getVersion(), version); EPackageVersion model = this.amc.toModel(rpm); EPackage pkg = this.findByName(this.dpkg, name); model.setPkg(pkg); Set<EDependency> found = new HashSet<>(); if (rpm.getDependencies() != null) { for (Dependency d : rpm.getDependencies()) { EDependency md = this.amc.toModel(d); md = this.ddep.save(md); found.add(md); } } model.setDependencies(found); model = this.drpm.save(model); pkg.getRPMs().add(model); this.dpkg.save(pkg); } @Override @Transactional public void removeRPM(String name, String version) { RESTAssert.assertNotEmpty(name); RESTAssert.assertNotEmpty(version); EPackageVersion rpm = this.drpm.find(name, version); this.assertModelFound(rpm); this.drpm.delete(rpm); } }