/** * Unapply profiles duplicated for control action * * @param selection * @param target the resource target */ private void unapplyDuplicateProfiles(final EObject selection, Resource target) { Package _package = (Package) selection; EList<Profile> allAppliedProfiles = _package.getAllAppliedProfiles(); if (!allAppliedProfiles.isEmpty()) { for (Profile profile : new ArrayList<Profile>(_package.getAppliedProfiles())) { if (allAppliedProfiles.contains(profile)) { // profile is duplicated, unapply it ProfileApplicationHelper.removeProfileApplicationDuplication(_package, profile, true); } } } }
/** * Handle the case when a stereotype application is removed : - Forbid direct removal of a * duplicated profile application (with eAnnotation) - Inspect controlled sub-packages - Remove * duplicated profile applications on these (with eAnnotation) * * @param packageElement the package from which stereotype application has been removed * @param profileAppl the removed profile application * @param profile the unapplied profile * @return whether removal is allowed */ private boolean stereotypeApplicationRemoved( Package packageElement, ProfileApplication profileAppl, Profile profile) { // Forbid direct removal of a duplicated profile application (with eAnnotation) if (ProfileApplicationHelper.isDuplicatedProfileApplication(profileAppl)) { Package parentPack = ProfileApplicationHelper.getParentPackageWithProfile(packageElement, profile, true); // restore stereotype application when it is called from parent intermediate package ProfileApplicationHelper.duplicateProfileApplication(packageElement, profile); String msg; if (parentPack != null) { msg = NLS.bind( Messages.warning_cannot_delete_duplicated, EMFCoreUtil.getQualifiedName(packageElement, true), EMFCoreUtil.getQualifiedName(parentPack, true)); } else { // parent package can not be reached as it is in a different maybe not accessible resource // (working on controlled resource) msg = NLS.bind( Messages.warning_cannot_delete_duplicated_alt, EMFCoreUtil.getQualifiedName(packageElement, true)); } NotificationBuilder notifBuild = NotificationBuilder.createAsyncPopup(msg); notifBuild.run(); return true; } // Inspect controlled sub-packages Set<Package> controlledPack = getControlledSubPackages(packageElement); boolean update = checkControlledPackagesUpdateable(controlledPack); if (update) { for (Package pack : controlledPack) { ProfileApplicationHelper.removeProfileApplicationDuplication(pack, profile, false); } return true; } else { return false; } }