/** * This also updates the inverse relation (remove this bundle group from bundle) * @param bundle * @return true if bundle was removed, otherwise false */ public boolean removeBundle(Bundle bundle) { boolean result = getBundles().remove(bundle); bundle.removeBundleGroup(this); return result; }
/** * This also updates the inverse relation (add this bundle group to bundle) * @param bundle */ public void addBundle(Bundle bundle) { getBundles().add(bundle); bundle.addBundleGroup(this); }
/** * This also updates the inverse relations * @param bundles */ public void setBundles(Set<Bundle> bundles) { for (Bundle bundle : getBundles()) { bundle.removeBundleGroup(this); } this.bundles.clear(); if (null != bundles) { for (Bundle bundle : bundles) { addBundle(bundle); } } }
@Override @RequiredPermission(Permission.MANAGE_BUNDLE_GROUPS) public void deleteBundleGroups(Subject subject, int[] bundleGroupIds) throws Exception { for (int bundleGroupId : bundleGroupIds) { BundleGroup bundleGroup = this.entityManager.find(BundleGroup.class, bundleGroupId); if (null == bundleGroup) { return; } // unassign any bundles assigned to the bundle group // wrap in new HashSet to avoid ConcurrentModificationExceptions. Set<Bundle> bundlesToRemove = new HashSet<Bundle>(bundleGroup.getBundles()); for (Bundle b : bundlesToRemove) { bundleGroup.removeBundle(b); } // remove from any roles for (Role r : bundleGroup.getRoles()) { r.removeBundleGroup(bundleGroup); } bundleGroup = entityManager.merge(bundleGroup); // now remove the bundle group entityManager.remove(bundleGroup); } }
@Override public BundleGroup updateBundleGroup(Subject subject, BundleGroup bundleGroup) throws Exception { BundleGroup attachedBundleGroup = entityManager.find(BundleGroup.class, bundleGroup.getId()); if (attachedBundleGroup == null) { throw new IllegalArgumentException("Cannot update " + bundleGroup + ", because no bundle group exists with id [" + bundleGroup.getId() + "]."); } // First update the simple fields and the permissions. attachedBundleGroup.setName(bundleGroup.getName()); attachedBundleGroup.setDescription(bundleGroup.getDescription()); Set<Bundle> newBundles = bundleGroup.getBundles(); if (newBundles != null) { // wrap in new HashSet to avoid ConcurrentModificationExceptions. Set<Bundle> currentBundles = attachedBundleGroup.getBundles(); Set<Bundle> BundlesToRemove = new HashSet<Bundle>(currentBundles); for (Bundle bg : newBundles) { BundlesToRemove.remove(bg); } for (Bundle bg : BundlesToRemove) { attachedBundleGroup.removeBundle(bg); } for (Bundle bg : newBundles) { Bundle attachedBundle = entityManager.find(Bundle.class, bg.getId()); attachedBundleGroup.addBundle(attachedBundle); } } // Fetch the lazy Set for the return attachedBundleGroup.getBundles().size(); return attachedBundleGroup; }
@Override @RequiredPermission(Permission.MANAGE_BUNDLE_GROUPS) public BundleGroup createBundleGroup(Subject subject, BundleGroup bundleGroup) throws Exception { String name = bundleGroup.getName(); if (null == name || "".equals(name.trim())) { throw new IllegalArgumentException("Invalid bundleGroupName: " + name); } BundleGroupCriteria c = new BundleGroupCriteria(); c.addFilterName(name); c.setStrict(true); if (!bundleManager.findBundleGroupsByCriteria(subject, c).isEmpty()) { throw new IllegalArgumentException("Invalid bundleGroupName, bundle group already exists with name: " + name); } entityManager.persist(bundleGroup); Set<Bundle> bundles = bundleGroup.getBundles(); if (null != bundles) { int[] bundleIds = new int[bundles.size()]; int i = 0; for (Bundle b : bundles) { bundleIds[i++] = b.getId(); } assignBundlesToBundleGroups(subject, new int[] { bundleGroup.getId() }, bundleIds); } return bundleGroup; }