blob: e16179716954de4ca394318c5641a12db84a8886 [file] [log] [blame]
/**
* Copyright (c) 2014, 2019 Mia-Software and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Gregoire Dupe (Mia-Software) - Bug 441051 - Reusable customization and facet loading dialogs
* Gregoire Dupe (Mia-Software) - Bug 443682 - Access to the super facet
*/
package org.eclipse.modisco.facet.custom.ui.internal.handler;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.modisco.facet.custom.core.ICustomizationCatalogManager;
import org.eclipse.modisco.facet.custom.core.ICustomizationCatalogManagerFactory;
import org.eclipse.modisco.facet.custom.core.ICustomizationManager;
import org.eclipse.modisco.facet.custom.core.ICustomizationManagerProvider;
import org.eclipse.modisco.facet.custom.metamodel.v0_2_0.custom.Customization;
import org.eclipse.modisco.facet.custom.ui.internal.exported.dialog.ILoadCustomizationsDialog;
import org.eclipse.modisco.facet.custom.ui.internal.exported.dialog.ILoadCustomizationsDialogFactory;
import org.eclipse.modisco.facet.efacet.core.IFacetManager;
import org.eclipse.modisco.facet.util.ui.internal.exported.dialog.IDialogCallback;
import org.eclipse.modisco.facet.util.ui.internal.exported.dialog.IDialogCallbackWithPreCommit;
import org.eclipse.modisco.facet.util.ui.internal.exported.dialog.IQuestionDialog;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
public class LoadCustomizationsHandler extends AbstractHandler {
public Object execute(final ExecutionEvent event) throws ExecutionException {
final IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
if (activePart != null) {
final ICustomizationManagerProvider customMgrProvider = (ICustomizationManagerProvider) activePart
.getAdapter(ICustomizationManagerProvider.class);
if (customMgrProvider != null) {
final ICustomizationManager manager = customMgrProvider
.getCustomizationManager();
final Set<Customization> availableCustoms = new HashSet<Customization>();
final ICustomizationCatalogManager catalog = ICustomizationCatalogManagerFactory.DEFAULT
.getOrCreateCustomizationCatalogManager(manager.getResourceSet());
availableCustoms.addAll(catalog.getRegisteredCustomizations());
availableCustoms.addAll(manager.getManagedCustomizations());
final IDialogCallbackWithPreCommit<List<Customization>, Boolean, IQuestionDialog> callback = new DialogCallbackWithPreCommit(manager);
final List<Customization> availableCustomsL = new ArrayList<Customization>(
availableCustoms);
final ILoadCustomizationsDialog<IQuestionDialog> dialog = ILoadCustomizationsDialogFactory.DEFAULT
.createLoadCustomizationDialog(null,
availableCustomsL,
manager.getManagedCustomizations(),
new ArrayList<Customization>(),
callback,
""); //$NON-NLS-1$
dialog.asyncOpen();
}
}
return null;
}
private class DialogCallbackWithPreCommit implements IDialogCallbackWithPreCommit<List<Customization>, Boolean, IQuestionDialog> {
private final ICustomizationManager manager;
public DialogCallbackWithPreCommit(final ICustomizationManager manager) {
this.manager = manager;
}
public void committed(final List<Customization> result,
final Boolean precommitResult) {
if (precommitResult.booleanValue()) {
this.manager.getManagedCustomizations().clear();
final IFacetManager facetManager = this.manager.getFacetManager();
facetManager.getManagedFacetSets().addAll(0, result);
}
}
public IQuestionDialog openPrecommitDialog(
final List<Customization> result,
final IDialogCallback<Boolean> precommitCallback) {
return null;
}
}
}