/** * Copyright (C) Intersect 2012. * * This module contains Proprietary Information of Intersect, * and should be treated as Confidential. */ package au.org.intersect.exsite9.wizard.metadatacategory; import java.util.List; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.PlatformUI; import au.org.intersect.exsite9.domain.Group; import au.org.intersect.exsite9.domain.MetadataCategory; import au.org.intersect.exsite9.domain.MetadataValue; import au.org.intersect.exsite9.domain.ResearchFile; import au.org.intersect.exsite9.domain.Schema; import au.org.intersect.exsite9.service.IGroupService; import au.org.intersect.exsite9.service.IMetadataCategoryService; import au.org.intersect.exsite9.service.IResearchFileService; import au.org.intersect.exsite9.service.ISchemaService; /** * Wizard use to remove metadata categories. */ public final class RemoveMetadataCategoryWizard extends Wizard { private final Schema schema; private final ListMetadataCategoriesWizardPage listCategoriesPage; public RemoveMetadataCategoryWizard(final Schema schema) { super(); setNeedsProgressMonitor(true); setWindowTitle("Delete Metadata Category"); this.schema = schema; this.listCategoriesPage = new ListMetadataCategoriesWizardPage("Delete Metadata Category", "Select metadata categories to be deleted.", this.schema, true); } @Override public void addPages() { addPage(this.listCategoriesPage); } /** * @{inheritDoc} */ @Override public boolean performFinish() { final IMetadataCategoryService metadataCategoryService = (IMetadataCategoryService) PlatformUI.getWorkbench().getService(IMetadataCategoryService.class); final IGroupService groupService = (IGroupService) PlatformUI.getWorkbench().getService(IGroupService.class); final IResearchFileService fileService = (IResearchFileService) PlatformUI.getWorkbench().getService(IResearchFileService.class); final ISchemaService schemaService = (ISchemaService) PlatformUI.getWorkbench().getService(ISchemaService.class); final List<MetadataCategory> categoriesToDelete = listCategoriesPage.getMetadataCategoriesToDelete(); for (final MetadataCategory mdc : categoriesToDelete) { for (final MetadataValue mdv : mdc.getValues()) { final List<ResearchFile> researchFiles = fileService.getResearchFilesWithAssociatedMetadata(mdc, mdv); for (final ResearchFile researchFile : researchFiles) { fileService.disassociateMetadata(researchFile, mdc, mdv); } final List<Group> groups = groupService.getGroupsWithAssociatedMetadata(mdc, mdv); for (final Group group : groups) { groupService.disassociateMetadata(group, mdc, mdv); } } schemaService.removeMetadataCategoryFromSchema(schema, mdc); metadataCategoryService.deleteMetadataCategory(mdc); } return true; } }