public static ResourcePackageDetails packageVersionToDetails(PackageVersion packageVersion) { Package generalPackage = packageVersion.getGeneralPackage(); PackageDetailsKey key = new PackageDetailsKey(generalPackage.getName(), packageVersion.getVersion(), packageVersion.getGeneralPackage().getPackageType().getName(), packageVersion.getArchitecture().getName()); ResourcePackageDetails details = new ResourcePackageDetails(key); details.setClassification(generalPackage.getClassification()); details.setDisplayName(packageVersion.getDisplayName()); details.setFileCreatedDate(packageVersion.getFileCreatedDate()); details.setFileName(packageVersion.getFileName()); details.setFileSize(packageVersion.getFileSize()); details.setLicenseName(packageVersion.getLicenseName()); details.setLicenseVersion(packageVersion.getLicenseVersion()); details.setLongDescription(packageVersion.getLongDescription()); details.setMD5(packageVersion.getMD5()); details.setMetadata(packageVersion.getMetadata()); details.setSHA256(packageVersion.getSHA256()); details.setShortDescription(packageVersion.getShortDescription()); Long created = packageVersion.getFileCreatedDate(); if (created != null) { details.setInstallationTimestamp(created.longValue()); } return details; }
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public long outputPackageVersionBits(PackageVersion packageVersion, OutputStream outputStream) { // Used by export of content through http PackageDetailsKey packageDetailsKey = new PackageDetailsKey(packageVersion.getDisplayName(), packageVersion .getDisplayVersion(), packageVersion.getGeneralPackage().getPackageType().toString(), packageVersion .getArchitecture().toString()); int resourceId = 0; //set to dummy value log.debug("Calling outputPackageVersionBitsRangeHelper() with package details: " + packageDetailsKey); return outputPackageVersionBitsRangeHelper(resourceId, packageDetailsKey, outputStream, 0, -1, packageVersion .getId()); }
public int compare(PackageVersion p1, PackageVersion p2) { String v1 = p1.getVersion(); String v2 = p2.getVersion(); OSGiVersionComparator c = new OSGiVersionComparator(); if (v1 != null && v2 != null) { try { return c.compare(v1, v2); } catch (IllegalArgumentException e) { //well, this can happen.. not all packages have OSGi type versions. } } if (p1.getFileCreatedDate() != null && p2.getFileCreatedDate() != null) { return p1.getFileCreatedDate().compareTo(p2.getFileCreatedDate()); } //hmm... there's actually nothing we can sort these two by.. //let's compare them by id - the one inserted sooner will have a lower id return Integer.valueOf(p1.getId()).compareTo(p2.getId()); } };
@Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public PackageVersion persistPackageVersion(PackageVersion pv) { // EM.persist requires related entities to be attached, let's attach them now // package has persist cascade enabled, so skip loading it if we'll allow it to be created here if (pv.getGeneralPackage().getId() > 0) { pv.setGeneralPackage(entityManager.find(Package.class, pv.getGeneralPackage().getId())); } // arch has persist cascade enabled, so skip loading it if we'll allow it to be created here if (pv.getArchitecture().getId() > 0) { pv.setArchitecture(entityManager.find(Architecture.class, pv.getArchitecture().getId())); } // config is optional but has persist cascade enabled, so skip loading it if we'll allow it to be created here if (pv.getExtraProperties() != null && pv.getExtraProperties().getId() > 0) { pv.setExtraProperties(entityManager.find(Configuration.class, pv.getExtraProperties().getId())); } // our object's relations are now full attached, we can persist it entityManager.persist(pv); return pv; }
PackageVersion pv = new PackageVersion(pkg, newDetails.getVersion(), arch); pv.setDisplayName(newDetails.getDisplayName()); pv.setDisplayVersion(newDetails.getDisplayVersion()); pv.setExtraProperties(newDetails.getExtraProperties()); pv.setFileCreatedDate(newDetails.getFileCreatedDate()); pv.setFileName(newDetails.getFileName()); pv.setFileSize(newDetails.getFileSize()); pv.setLicenseName(newDetails.getLicenseName()); pv.setLicenseVersion(newDetails.getLicenseVersion()); pv.setLongDescription(newDetails.getLongDescription()); pv.setMD5(newDetails.getMD5()); pv.setMetadata(newDetails.getMetadata()); pv.setSHA256(newDetails.getSHA256()); pv.setShortDescription(newDetails.getShortDescription()); packageVersionAttributeCheck(pvExisting, pvExisting.getExtraProperties(), pv, pv.getExtraProperties(), "ExtraProps"); packageVersionAttributeCheck(pvExisting, pvExisting.getFileSize(), pv, pv.getFileSize(), "FileSize"); packageVersionAttributeCheck(pvExisting, pvExisting.getFileName(), pv, pv.getFileName(), "FileName"); packageVersionAttributeCheck(pvExisting, pvExisting.getMD5(), pv, pv.getMD5(), "MD5"); packageVersionAttributeCheck(pvExisting, pvExisting.getSHA256(), pv, pv.getSHA256(), "SHA256");
packageVersion = new PackageVersion(generalPackage, discoveredPackage.getVersion(), packageArchitecture); packageVersion.setDisplayName(discoveredPackage.getDisplayName()); packageVersion.setDisplayVersion(discoveredPackage.getDisplayVersion()); packageVersion.setFileCreatedDate(discoveredPackage.getFileCreatedDate()); packageVersion.setFileName(discoveredPackage.getFileName()); packageVersion.setFileSize(discoveredPackage.getFileSize()); packageVersion.setLicenseName(discoveredPackage.getLicenseName()); packageVersion.setLicenseVersion(discoveredPackage.getLicenseVersion()); packageVersion.setLongDescription(discoveredPackage.getLongDescription()); packageVersion.setMD5(discoveredPackage.getMD5()); packageVersion.setMetadata(discoveredPackage.getMetadata()); packageVersion.setSHA256(discoveredPackage.getSHA256()); packageVersion.setShortDescription(discoveredPackage.getShortDescription()); packageVersion.setExtraProperties(discoveredPackage.getExtraProperties()); InstalledPackage ip = i.next(); PackageVersion pv = ip.getPackageVersion(); if (pv.getId() == packageVersion.getId()) { i.remove(); return;
packageVersion = new PackageVersion(existingPackage, version, architecture); packageVersion.setDisplayName(existingPackage.getName()); entityManager.persist(packageVersion); PackageBits bits = loadPackageBits(packageBitStream, packageVersion.getId(), packageName, version, null, contentDetails); packageVersion.setPackageBits(bits); packageVersion.setFileSize(Long.valueOf(contentDetails.get(UPLOAD_FILE_SIZE)).longValue()); packageVersion.setSHA256(contentDetails.get(UPLOAD_SHA256)); packageVersion.setFileCreatedDate(Long.valueOf(packageUploadDetails .get(ContentManagerLocal.UPLOAD_FILE_INSTALL_DATE))); packageVersion.setFileName(packageUploadDetails.get(ContentManagerLocal.UPLOAD_FILE_NAME)); packageVersion.setMD5(packageUploadDetails.get(ContentManagerLocal.UPLOAD_MD5)); packageVersion.setDisplayVersion(packageUploadDetails.get(ContentManagerLocal.UPLOAD_DISPLAY_VERSION)); int[] packageVersionIds = new int[] { packageVersion.getId() }; repoManager.addPackageVersionsToRepo(subject, repoId, packageVersionIds);
if (pv.getId() == 0) { persisted = contentManager.persistPackageVersion(pv); q.setParameter("packageName", pv.getGeneralPackage().getName()); q.setParameter("packageTypeName", pv.getGeneralPackage().getPackageType().getName()); q.setParameter("architectureName", pv.getArchitecture().getName()); q.setParameter("version", pv.getVersion()); ResourceType rt = pv.getGeneralPackage().getPackageType().getResourceType(); q.setParameter("resourceType", rt); pv.setId(found.get(0).getId()); persisted = entityManager.merge(pv); persisted = entityManager.find(PackageVersion.class, persisted.getId()); persisted.getGeneralPackage().getId(); persisted.getArchitecture().getId(); if (persisted.getExtraProperties() != null) { persisted.getExtraProperties().getId();
PackageVersion pv = advManager.findPackageVersionByPkgId(overlord, pkg.getPkg().getFileName(), pc); AdvisoryPackageDetails apkg = new AdvisoryPackageDetails(pv.getDisplayName(), pv.getVersion(), pv .getArchitecture().getName(), pv.getFileName()); detail.addPkg(apkg);
PackageVersion existingPackageVersion = (PackageVersion) existingVersionList.get(0); if (displayVersion != null && !displayVersion.trim().isEmpty()) { existingPackageVersion.setDisplayVersion(displayVersion); existingPackageVersion = persistOrMergePackageVersionSafely(existingPackageVersion); PackageVersion newPackageVersion = new PackageVersion(existingPackage, version, architecture); newPackageVersion.setDisplayName(existingPackage.getName()); PackageBits bits = loadPackageBits(packageBitStream, newPackageVersion.getId(), packageName, version, null, contentDetails); newPackageVersion.setPackageBits(bits); newPackageVersion.setFileSize(Long.valueOf(contentDetails.get(UPLOAD_FILE_SIZE)).longValue()); newPackageVersion.setSHA256(contentDetails.get(UPLOAD_SHA256)); newPackageVersion.setDisplayVersion(displayVersion);
PackageVersionContentSourcePK pk = pvcs.getPackageVersionContentSourcePK(); int contentSourceId = pk.getContentSource().getId(); int packageVersionId = pk.getPackageVersion().getId(); String packageVersionLocation = pvcs.getLocation(); pv.setPackageBits(packageBits); // associate the entities File outputFile = getPackageBitsLocalFileAndCreateParentDir(pv.getId(), pv.getFileName()); log.info("OutPutFile is located at: " + outputFile); boolean download = false; String expectedMD5 = (pv.getMD5() != null) ? pv.getMD5() : "<unspecified MD5>"; String actualMD5 = MessageDigestGenerator.getDigestString(outputFile); if (!expectedMD5.trim().toLowerCase().equals(actualMD5.toLowerCase())) {
Long length = packageVersion.getFileSize(); if (length == null) { File tmpFile = File.createTempFile("rhq", ".stream"); PackageBits bits = entityManager.find(PackageBits.class, packageBits.getId()); String pkgName = "(set packageName)"; if ((packageVersion != null) && (packageVersion.getGeneralPackage() != null)) { pkgName = packageVersion.getGeneralPackage().getName(); bits = loadPackageBits(bitStream, packageVersion.getId(), pkgName, packageVersion.getVersion(), bits, null);
List<PackageVersion> packageVersions = getAllBundleVersionPackageVersions(bundleVersion); for (PackageVersion packageVersion : packageVersions) { File packageFile = new File(downloadDir, packageVersion.getFileName()); FileOutputStream fos = new FileOutputStream(packageFile); try { auditDeployment(resourceDeployment, AUDIT_FILE_DOWNLOAD_STARTED, packageVersion.getDisplayName(), "Downloading [" + packageVersion + "]"); if (packageVersion.getFileSize() != null && size != packageVersion.getFileSize()) { String message = "Downloaded bundle file [" + packageVersion + "] but its size was [" + size + "] when it was expected to be [" + packageVersion.getFileSize() + "]."; LOG.warn(message); auditDeployment(resourceDeployment, AUDIT_FILE_DOWNLOAD_ENDED, packageVersion.getDisplayName(), null, BundleResourceDeploymentHistory.Status.WARN, message, null); } else { auditDeployment(resourceDeployment, AUDIT_FILE_DOWNLOAD_ENDED, packageVersion.getDisplayName(), "Download complete for [" + packageVersion + "]"); String message = "Failed to downloaded bundle file [" + packageVersion + "] " + e2; LOG.warn(message); auditDeployment(resourceDeployment, AUDIT_FILE_DOWNLOAD_ENDED, packageVersion.getDisplayName(), null, BundleResourceDeploymentHistory.Status.FAILURE, message, null); } finally {
private InputStream preloadPackageBits(PackageVersionContentSource pvcs) throws Exception { PackageVersionContentSourcePK pk = pvcs.getPackageVersionContentSourcePK(); int contentSourceId = pk.getContentSource().getId(); int packageVersionId = pk.getPackageVersion().getId(); String packageVersionLocation = pvcs.getLocation(); log.debug("Downloading package bits to filesystem for package located at [" + packageVersionLocation + "] on content source [" + contentSourceId + "]"); File outputFile = getPackageBitsLocalFileAndCreateParentDir(pv.getId(), pv.getFileName()); log.info("OutPutFile is located at: " + outputFile); boolean download = false; String expectedMD5 = (pv.getMD5() != null) ? pv.getMD5() : "<unspecified MD5>"; String actualMD5 = MessageDigestGenerator.getDigestString(outputFile); if (!expectedMD5.trim().toLowerCase().equals(actualMD5.toLowerCase())) {
public void updateBackingContent(String filename, String displayVersion) { File file = new File(filename); if (!file.exists()) { throw new IllegalArgumentException("File not found: " + file.getAbsolutePath()); } if (file.isDirectory()) { throw new IllegalArgumentException("File expected, found directory: " + file.getAbsolutePath()); } String sha = null; try { sha = new MessageDigestGenerator(MessageDigestGenerator.SHA_256).calcDigestString(file); } catch (Exception e) { //do nothing because the sha will remain null. LOG.error("Message digest for the package bits failed.", e); } String packageVersion = "[sha256=" + sha + "]"; InstalledPackage oldPackage = getBackingContent(); ContentManagerRemote contentManager = remoteClient.getProxy(ContentManagerRemote.class); ContentUploader contentUploader = new ContentUploader(contentManager); String temporaryContentHandle = contentUploader.upload(file); PackageVersion pv = contentManager.createPackageVersionWithDisplayVersion(remoteClient.getSubject(), oldPackage.getPackageVersion().getGeneralPackage().getName(), oldPackage.getPackageVersion() .getGeneralPackage().getPackageType().getId(), packageVersion, displayVersion, oldPackage .getPackageVersion().getArchitecture().getId(), temporaryContentHandle); contentManager.deployPackagesWithNote(remoteClient.getSubject(), new int[] { resourceClientProxy.getId() }, new int[] { pv.getId() }, "CLI deployment request"); }
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public long outputPackageBitsForChildResource(int parentResourceId, String resourceTypeName, PackageDetailsKey packageDetailsKey, OutputStream outputStream) { Resource parentResource = entityManager.find(Resource.class, parentResourceId); ResourceType parentResourceType = parentResource.getResourceType(); Query query = entityManager.createNamedQuery(ResourceType.QUERY_FIND_BY_PARENT_AND_NAME); query.setParameter("parent", parentResourceType); query.setParameter("name", resourceTypeName); ResourceType childResourceType = (ResourceType) query.getSingleResult(); query = entityManager.createNamedQuery(PackageVersion.QUERY_FIND_BY_PACKAGE_DETAILS_KEY_WITH_NON_NULL_RESOURCE_TYPE); query.setParameter("packageName", packageDetailsKey.getName()); query.setParameter("packageTypeName", packageDetailsKey.getPackageTypeName()); query.setParameter("architectureName", packageDetailsKey.getArchitectureName()); query.setParameter("version", packageDetailsKey.getVersion()); query.setParameter("resourceTypeId", childResourceType.getId()); PackageVersion packageVersion = (PackageVersion) query.getSingleResult(); return outputPackageVersionBitsRangeHelper(parentResourceId, packageDetailsKey, outputStream, 0, -1, packageVersion.getId()); }
for (PackageVersionContentSource item : allPackageVersions) { PackageVersion pv = item.getPackageVersionContentSourcePK().getPackageVersion(); File verifyFile = getPackageBitsLocalFilesystemFile(pv.getId(), pv.getFileName()); if (!verifyFile.exists()) { log.info("Missing file from ContentProvider, adding to list: " + verifyFile.getAbsolutePath());
packageVersion.setFileName(name); packageVersion = entityManager.merge(packageVersion); new int[] { packageVersion.getId() }); Package generalPackage = packageVersion.getGeneralPackage(); generalPackage.setClassification(bundle.getName());
if (packageVersion.getMD5() != null) { realHash = new MessageDigestGenerator(MessageDigestGenerator.MD5).calcDigestString(packageFile); if (!packageVersion.getMD5().equals(realHash)) { throw new Exception("Package version [" + packageVersion + "] failed MD5 check. expected=[" + packageVersion.getMD5() + "], actual=[" + realHash + "]"); } else if (packageVersion.getSHA256() != null) { realHash = new MessageDigestGenerator(MessageDigestGenerator.SHA_256).calcDigestString(packageFile); if (!packageVersion.getSHA256().equals(realHash)) { throw new Exception("Package version [" + packageVersion + "] failed SHA256 check. expected=[" + packageVersion.getSHA256() + "], actual=[" + realHash + "]");
PackageVersionContentSourcePK pk = pvcs.getPackageVersionContentSourcePK(); int contentSourceId = pk.getContentSource().getId(); int packageVersionId = pk.getPackageVersion().getId(); String packageVersionLocation = pvcs.getLocation(); pv.setPackageBits(packageBits); // associate entities