public void retrieveBackingContent(String fileName) throws IOException { InstalledPackage installedPackage = getBackingContent(); if (installedPackage != null) { if (fileName == null) { fileName = installedPackage.getPackageVersion().getFileName(); } File file = new File(fileName); byte[] data = remoteClient.getProxy(ContentManagerRemote.class).getPackageBytes( remoteClient.getSubject(), resourceClientProxy.resourceId, installedPackage.getId()); FileOutputStream fos = new FileOutputStream(file); try { fos.write(data); } finally { fos.close(); } } else { throw new RuntimeException( "Content not available in the content repository. If you recently deployed content to this resource, then the content repository has not yet received the content or content information. The content for a resource is available only after the deployment and discovery process completes. Please try again in a few minutes."); } }
public void addInstalledPackage(InstalledPackage installedPackage) { if (this.installedPackages == null) { this.installedPackages = new LinkedHashSet<InstalledPackage>(1); } this.installedPackages.add(installedPackage); installedPackage.setResource(this); }
PackageVersion pv = ip.getPackageVersion(); if (pv.getId() == packageVersion.getId()) { i.remove(); InstalledPackage newlyInstalledPackage = new InstalledPackage(); newlyInstalledPackage.setPackageVersion(packageVersion); newlyInstalledPackage.setResource(resource); newlyInstalledPackage.setInstallationDate(discoveredPackage.getInstallationTimestamp());
public static ResourcePackageDetails installedPackageToDetails(InstalledPackage installedPackage) { PackageVersion packageVersion = installedPackage.getPackageVersion(); ResourcePackageDetails details = packageVersionToDetails(packageVersion); return details; }
@Override public InstalledPackage getBackingPackageForResource(Subject subject, int resourceId) { InstalledPackage result = null; // check if the resource is content backed if not, return null Resource res = resourceManager.getResourceById(subject, resourceId); ResourceType type = res.getResourceType(); if (!ResourceCreationDataType.CONTENT.equals(type.getCreationDataType())) { return null; } InstalledPackageCriteria criteria = new InstalledPackageCriteria(); criteria.addFilterResourceId(resourceId); PageList<InstalledPackage> ips = findInstalledPackagesByCriteria(subject, criteria); // should not be more than 1 if ((null != ips) && (ips.size() > 0)) { int mostRecentPackageIndex = 0; if (ips.size() > 1) { for (int index = 1; index < ips.size(); index++) { if (ips.get(index).getInstallationDate() > ips.get(mostRecentPackageIndex).getInstallationDate()) { mostRecentPackageIndex = index; } } } result = ips.get(mostRecentPackageIndex); // fetch these result.getPackageVersion().getGeneralPackage().getId(); result.getPackageVersion().getGeneralPackage().getPackageType().getId(); result.getPackageVersion().getArchitecture().getId(); } return result; }
PackageBits bits = installedPackage.getPackageVersion().getPackageBits(); if (bits == null || bits.getBlob().getBits().length == 0) { long start = System.currentTimeMillis(); retrieveBitsFromResource(user, resourceId, installedPackageId); bits = installedPackage.getPackageVersion().getPackageBits(); while ((bits == null || bits.getBlob().getBits() == null) && (System.currentTimeMillis() - start < 30000)) { bits = installedPackage.getPackageVersion().getPackageBits();
@Override public void removeInstalledPackages(Resource resource, Set<InstalledPackage> doomedPackages, long timestamp) { // first, create history records to audit that the previously discovered package was no longer found for (InstalledPackage doomedPackage : doomedPackages) { InstalledPackageHistory history = new InstalledPackageHistory(); history.setPackageVersion(doomedPackage.getPackageVersion()); history.setResource(resource); history.setStatus(InstalledPackageHistoryStatus.MISSING); history.setTimestamp(timestamp); entityManager.persist(history); } // let's flush these to not buffer too much entityManager.flush(); // now, remove the installed packages (in batches to protect against oracle limit) Query query = entityManager.createNamedQuery(InstalledPackage.QUERY_DELETE_BY_IDS); final int batchSize = 200; List<Integer> doomedIds = new ArrayList(doomedPackages.size()); for (InstalledPackage ip : doomedPackages) { doomedIds.add(ip.getId()); } while (!doomedIds.isEmpty()) { int size = doomedIds.size(); int end = (batchSize < size) ? batchSize : size; List<Integer> idBatch = doomedIds.subList(0, end); query.setParameter("ids", idBatch); query.executeUpdate(); // Advance our progress and possibly help GC. This will remove the processed ids from the backing list idBatch.clear(); } }
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"); }
@Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public ContentServiceRequest createRetrieveBitsRequest(int resourceId, String username, int installedPackageId) { Resource resource = entityManager.find(Resource.class, resourceId); ContentServiceRequest persistedRequest = new ContentServiceRequest(resource, username, ContentRequestType.GET_BITS); persistedRequest.setStatus(ContentRequestStatus.IN_PROGRESS); long timestamp = System.currentTimeMillis(); // Load the InstalledPackage to get its package version for the relationship InstalledPackage ip = entityManager.find(InstalledPackage.class, installedPackageId); PackageVersion packageVersion = ip.getPackageVersion(); // Create the history entity InstalledPackageHistory history = new InstalledPackageHistory(); history.setContentServiceRequest(persistedRequest); history.setPackageVersion(packageVersion); history.setResource(resource); history.setStatus(InstalledPackageHistoryStatus.BEING_RETRIEVED); history.setTimestamp(timestamp); persistedRequest.addInstalledPackageHistory(history); entityManager.persist(persistedRequest); return persistedRequest; }
@Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public ContentServiceRequest createRemoveRequest(int resourceId, String username, int[] installedPackageIds, String requestNotes) { Resource resource = entityManager.find(Resource.class, resourceId); ContentServiceRequest persistedRequest = new ContentServiceRequest(resource, username, ContentRequestType.DELETE); persistedRequest.setStatus(ContentRequestStatus.IN_PROGRESS); persistedRequest.setNotes(requestNotes); long timestamp = System.currentTimeMillis(); for (int installedPackageId : installedPackageIds) { // Load the InstalledPackage to get its package version for the relationship InstalledPackage ip = entityManager.find(InstalledPackage.class, installedPackageId); PackageVersion packageVersion = ip.getPackageVersion(); // Create the history entity InstalledPackageHistory history = new InstalledPackageHistory(); history.setContentServiceRequest(persistedRequest); history.setPackageVersion(packageVersion); history.setResource(resource); history.setStatus(InstalledPackageHistoryStatus.BEING_DELETED); history.setTimestamp(timestamp); persistedRequest.addInstalledPackageHistory(history); } entityManager.persist(persistedRequest); return persistedRequest; }