@Transactional public void delete(PackageMetadata packageMetadata) { Assert.notNull(packageMetadata, "Can't download PackageMetadata, it is a null value."); Assert.hasText(packageMetadata.getName(), "Package name can not be empty."); Assert.hasText(packageMetadata.getVersion(), "Package version can not be empty."); Assert.isTrue(packageMetadata.getRepositoryId() > 0, "Invalid Repository ID."); this.packageMetadataRepository.delete(packageMetadata); }
public void setPkg(Package pkg) { this.pkg = pkg; this.packageMetadataId = pkg.getMetadata().getId(); this.repositoryId = pkg.getMetadata().getRepositoryId(); ObjectMapper mapper = new ObjectMapper(); try { // Note that @JsonIgnore is on the package file byte array field. this.pkgJsonString = mapper.writeValueAsString(pkg); } catch (JsonProcessingException e) { throw new SkipperException("Error processing pkg json string", e); } }
private Package createPackage(String packageName, String packageVersion, StreamDeploymentRequest streamDeploymentRequest) { Package pkg = new Package(); PackageMetadata packageMetadata = new PackageMetadata(); packageMetadata.setApiVersion(SkipperStream.SKIPPER_DEFAULT_API_VERSION); packageMetadata.setKind(SkipperStream.SKIPPER_DEFAULT_KIND); packageMetadata.setName(packageName); packageMetadata.setVersion(packageVersion); packageMetadata.setMaintainer(SkipperStream.SKIPPER_DEFAULT_MAINTAINER); packageMetadata.setDescription(streamDeploymentRequest.getDslText()); pkg.setMetadata(packageMetadata); pkg.setDependencies(createDependentPackages(packageVersion, streamDeploymentRequest)); return pkg; }
public static File calculatePackageZipFile(PackageMetadata packageMetadata, File targetPath) { return new File(targetPath, packageMetadata.getName() + "-" + packageMetadata.getVersion() + ".zip"); } }
for (PackageMetadata packageMetadata : packageMetadataList) { List<Release> releases = this.releaseRepository.findByRepositoryIdAndPackageMetadataIdOrderByNameAscVersionDesc( packageMetadata.getRepositoryId(), packageMetadata.getId()); boolean canDelete = true; List<Release> releasesFromLocalRepositories = filterReleasesFromLocalRepos(releases, packageMetadata.getName()); Repository repository = this.repositoryRepository.findOne(packageMetadata.getRepositoryId()); errorMessages.add(String.format("Can not delete Package Metadata [%s:%s] in Repository [%s]. " + "Not all releases of this package have the status DELETED. Active Releases [%s]", packageMetadata.getName(), packageMetadata.getVersion(), repository.getName(), StringUtils.collectionToCommaDelimitedString(activeReleaseNames))); packageMetadataRepository.deleteByRepositoryIdAndName(packageMetadata.getRepositoryId(), packageMetadata.getName());
Package packageToUpload = this.packageReader.read(unpackagedFile); PackageMetadata packageMetadata = packageToUpload.getMetadata(); if (!packageMetadata.getName().equals(uploadRequest.getName()) || !packageMetadata.getVersion().equals(uploadRequest.getVersion())) { throw new SkipperException(String.format("Package definition in the request [%s:%s] " + "differs from one inside the package.yml [%s:%s]", uploadRequest.getName(), uploadRequest.getVersion(), packageMetadata.getName(), packageMetadata.getVersion())); packageMetadata.setRepositoryId(localRepositoryToUpload.getId()); packageMetadata.setRepositoryName(localRepositoryToUpload.getName()); packageMetadata.setPackageFile(new PackageFile((uploadRequest.getPackageFileAsBytes()))); return this.packageMetadataRepository.save(packageMetadata);
targetPath = TempFileUtils.createTempDirectory("skipper" + packageMetadata.getName()); File targetFile = PackageFileUtils.calculatePackageZipFile(packageMetadata, targetPath.toFile()); logger.debug("Finding repository for package {}", packageMetadata.getName()); Repository packageRepository = repositoryRepository.findById(packageMetadata.getRepositoryId()).orElse(null); if (packageRepository == null) { return throwDescriptiveException(packageMetadata); Resource sourceResource = getResourceForRepository(packageRepository, packageMetadata.getName(), packageMetadata.getVersion()); packageMetadata.getName(), packageMetadata.getVersion(), sourceResource.getDescription(), targetFile); try { throw new SkipperException("Could not copy package file for " + packageMetadata.getName() + "-" + packageMetadata.getVersion() + " from " + sourceResource.getDescription() + " to target file " + targetFile + ". " + e.getMessage(), e); .read(new File(targetPath.toFile(), packageMetadata.getName() + "-" + packageMetadata.getVersion())); packageMetadata.setPackageFile(new PackageFile(Files.readAllBytes(targetFile.toPath()))); + packageMetadata.getName() + "-" + packageMetadata.getVersion() + ". PackageMetadata repositoryId = " + packageMetadata.getRepositoryId(), ex); + packageMetadata.getName() + "-" + packageMetadata.getVersion() + ". PackageMetadata repositoryId = " + packageMetadata.getRepositoryId() + "No repository found.", ex);
private Package deserializePackageFromDatabase(PackageMetadata packageMetadata) { // package file was uploaded to a local DB hosted repository Path tmpDirPath = null; try { tmpDirPath = TempFileUtils.createTempDirectory("skipper"); File targetPath = new File(tmpDirPath + File.separator + packageMetadata.getName()); targetPath.mkdirs(); File targetFile = PackageFileUtils.calculatePackageZipFile(packageMetadata, targetPath); try { StreamUtils.copy(packageMetadata.getPackageFile().getPackageBytes(), new FileOutputStream(targetFile)); } catch (IOException e) { throw new SkipperException( "Could not copy package file for " + packageMetadata.getName() + "-" + packageMetadata.getVersion() + " from database to target file " + targetFile, e); } ZipUtil.unpack(targetFile, targetPath); Package pkgToReturn = this.packageReader.read(new File(targetPath, packageMetadata.getName() + "-" + packageMetadata.getVersion())); pkgToReturn.setMetadata(packageMetadata); return pkgToReturn; } finally { if (tmpDirPath != null && !FileSystemUtils.deleteRecursively(tmpDirPath.toFile())) { logger.warn("Temporary directory can not be deleted: " + tmpDirPath); } } }
packageIdentifier.setPackageName(releaseToRollback.getPkg().getMetadata().getName()); packageIdentifier.setPackageVersion(releaseToRollback.getPkg().getMetadata().getVersion()); packageIdentifier.setRepositoryName(releaseToRollback.getPkg().getMetadata().getRepositoryName());
String dependencyName = dependency.getMetadata().getName(); Map<String, Object> currentPackageValueMapForDependency = (Map<String, Object>) currentPackageValueMap .getOrDefault(dependencyName, new TreeMap<>()); mergedValues.put(dependency.getMetadata().getName(), mergeOverrideMap(dependency, currentPackageValueMapForDependency));
private boolean checkIfPackageIsFromLocalRepo(List<String> errorMessages, PackageMetadata packageMetadata) { Repository repository = this.repositoryRepository.findOne(packageMetadata.getRepositoryId()); if (repository != null) { if (!repository.isLocal()) { errorMessages.add(String.format("Can not delete package [%s], associated repository [%s] is remote.", packageMetadata.getName(), repository.getName())); return true; } } else { errorMessages.add(String.format("Can not delete package {}, repositoryId {} does not exist.", packageMetadata.getName(), packageMetadata.getRepositoryId())); } return false; }
@Override public String toString() { return "PackageMetadata{" + "id='" + getId() + '\'' + ", apiVersion='" + apiVersion + '\'' + ", origin='" + origin + '\'' + ", repositoryName='" + repositoryName + '\'' + ", kind='" + kind + '\'' + ", name='" + name + '\'' + ", version='" + version + '\'' + ", packageSourceUrl='" + packageSourceUrl + '\'' + ", packageHomeUrl='" + packageHomeUrl + '\'' + ", tags='" + tags + '\'' + ", maintainer='" + maintainer + '\'' + ", description='" + description + '\'' + ", sha256='" + sha256 + '\'' + ", iconUrl='" + iconUrl + '\'' + '}'; } }
private Package throwDescriptiveException(PackageMetadata packageMetadata) { List<Repository> list = StreamSupport .stream(repositoryRepository.findAll().spliterator(), false) .collect(Collectors.toList()); throw new SkipperException("Can not find packageRepository with Id = " + packageMetadata.getRepositoryId() + ". Known repositories are " + Arrays.toString(list.toArray())); }
@Transactional public Package downloadPackage(PackageMetadata packageMetadata) { Assert.notNull(packageMetadata, "Can't download PackageMetadata, it is a null value."); // Database contains the package file from a previous upload if (packageMetadata.getPackageFile() != null) { return deserializePackageFromDatabase(packageMetadata); } else { return downloadAndDeserializePackage(packageMetadata); } }
for (PackageMetadata packageMetadata : packageMetadataList) { List<Release> releases = this.releaseRepository.findByRepositoryIdAndPackageMetadataIdOrderByNameAscVersionDesc( packageMetadata.getRepositoryId(), packageMetadata.getId()); boolean canDelete = true; List<Release> releasesFromLocalRepositories = filterReleasesFromLocalRepos(releases, packageMetadata.getName()); Repository repository = this.repositoryRepository.findById(packageMetadata.getRepositoryId()).get(); errorMessages.add(String.format("Can not delete Package Metadata [%s:%s] in Repository [%s]. " + "Not all releases of this package have the status DELETED. Active Releases [%s]", packageMetadata.getName(), packageMetadata.getVersion(), repository.getName(), StringUtils.collectionToCommaDelimitedString(activeReleaseNames))); packageMetadataRepository.deleteByRepositoryIdAndName(packageMetadata.getRepositoryId(), packageMetadata.getName());
public static File calculatePackageZipFile(PackageMetadata packageMetadata, File targetPath) { return new File(targetPath, packageMetadata.getName() + "-" + packageMetadata.getVersion() + ".zip"); } }
Package packageToUpload = this.packageReader.read(unpackagedFile); PackageMetadata packageMetadata = packageToUpload.getMetadata(); if (!packageMetadata.getName().equals(uploadRequest.getName()) || !packageMetadata.getVersion().equals(uploadRequest.getVersion())) { throw new SkipperException(String.format("Package definition in the request [%s:%s] " + "differs from one inside the package.yml [%s:%s]", uploadRequest.getName(), uploadRequest.getVersion(), packageMetadata.getName(), packageMetadata.getVersion())); packageMetadata.setRepositoryId(localRepositoryToUpload.getId()); packageMetadata.setRepositoryName(localRepositoryToUpload.getName()); packageMetadata.setPackageFile(new PackageFile((uploadRequest.getPackageFileAsBytes()))); return this.packageMetadataRepository.save(packageMetadata);
targetPath = TempFileUtils.createTempDirectory("skipper" + packageMetadata.getName()); File targetFile = PackageFileUtils.calculatePackageZipFile(packageMetadata, targetPath.toFile()); logger.debug("Finding repository for package {}", packageMetadata.getName()); Repository packageRepository = repositoryRepository.findOne(packageMetadata.getRepositoryId()); if (packageRepository == null) { return throwDescriptiveException(packageMetadata); Resource sourceResource = getResourceForRepository(packageRepository, packageMetadata.getName(), packageMetadata.getVersion()); packageMetadata.getName(), packageMetadata.getVersion(), sourceResource.getDescription(), targetFile); try { throw new SkipperException("Could not copy package file for " + packageMetadata.getName() + "-" + packageMetadata.getVersion() + " from " + sourceResource.getDescription() + " to target file " + targetFile + ". " + e.getMessage(), e); .read(new File(targetPath.toFile(), packageMetadata.getName() + "-" + packageMetadata.getVersion())); packageMetadata.setPackageFile(new PackageFile(Files.readAllBytes(targetFile.toPath()))); + packageMetadata.getName() + "-" + packageMetadata.getVersion() + ". PackageMetadata repositoryId = " + packageMetadata.getRepositoryId(), ex); + packageMetadata.getName() + "-" + packageMetadata.getVersion() + ". PackageMetadata repositoryId = " + packageMetadata.getRepositoryId() + "No repository found.", ex);
private Package deserializePackageFromDatabase(PackageMetadata packageMetadata) { // package file was uploaded to a local DB hosted repository Path tmpDirPath = null; try { tmpDirPath = TempFileUtils.createTempDirectory("skipper"); File targetPath = new File(tmpDirPath + File.separator + packageMetadata.getName()); targetPath.mkdirs(); File targetFile = PackageFileUtils.calculatePackageZipFile(packageMetadata, targetPath); try { StreamUtils.copy(packageMetadata.getPackageFile().getPackageBytes(), new FileOutputStream(targetFile)); } catch (IOException e) { throw new SkipperException( "Could not copy package file for " + packageMetadata.getName() + "-" + packageMetadata.getVersion() + " from database to target file " + targetFile, e); } ZipUtil.unpack(targetFile, targetPath); Package pkgToReturn = this.packageReader.read(new File(targetPath, packageMetadata.getName() + "-" + packageMetadata.getVersion())); pkgToReturn.setMetadata(packageMetadata); return pkgToReturn; } finally { if (tmpDirPath != null && !FileSystemUtils.deleteRecursively(tmpDirPath.toFile())) { logger.warn("Temporary directory can not be deleted: " + tmpDirPath); } } }
packageIdentifier.setPackageName(releaseToRollback.getPkg().getMetadata().getName()); packageIdentifier.setPackageVersion(releaseToRollback.getPkg().getMetadata().getVersion()); packageIdentifier.setRepositoryName(releaseToRollback.getPkg().getMetadata().getRepositoryName());