/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
******************************************************************************/
package org.eclipse.emf.emfstore.client.ui.controller;
import org.eclipse.emf.emfstore.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.client.ui.handlers.AbstractEMFStoreUIController;
import org.eclipse.emf.emfstore.client.ui.views.historybrowserview.HistoryBrowserView;
import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
import org.eclipse.emf.emfstore.server.model.versioning.HistoryInfo;
import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
import org.eclipse.emf.emfstore.server.model.versioning.TagVersionSpec;
import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
/**
* UI-related controller for adding and removing version tags.
*
* @author emueller
*
*/
// TODO: re-package exception for more sensible error messages
public class UITagController extends AbstractEMFStoreUIController {
/**
* Constructor.
*
* @param shell
* the parent {@link Shell}
*/
public UITagController(Shell shell) {
super(shell);
}
public void addTag(ProjectSpace projectSpace, HistoryInfo historyInfo) throws EmfStoreException {
PrimaryVersionSpec versionSpec = ModelUtil.clone(historyInfo.getPrimerySpec());
InputDialog inputDialog = new InputDialog(getShell(), "Add tag", "Please enter the tag's name.", "", null);
inputDialog.open();
String str = inputDialog.getValue().trim();
if (str != null && str.length() > 0) {
TagVersionSpec tag = VersioningFactory.eINSTANCE.createTagVersionSpec();
tag.setName(str);
projectSpace.addTag(versionSpec, tag);
}
}
public void removeTag(HistoryInfo historyInfo) throws EmfStoreException {
final LabelProvider tagLabelProvider = new LabelProvider() {
@Override
public String getText(Object element) {
return ((TagVersionSpec) element).getName();
}
};
ElementListSelectionDialog dlg = new ElementListSelectionDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), tagLabelProvider);
dlg.setElements(historyInfo.getTagSpecs().toArray());
dlg.setTitle("Tag selection");
dlg.setBlockOnOpen(true);
dlg.setMultipleSelection(true);
int ret = dlg.open();
if (ret != Window.OK) {
return;
}
// TODO: controller currently does not work if the active workbench window is not
// the history view
IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
if (activePage == null || !(activePage.getActivePart() instanceof HistoryBrowserView)) {
return;
}
HistoryBrowserView historyBrowserView = (HistoryBrowserView) activePage.getActivePart();
Object[] tags = dlg.getResult();
for (Object tag : tags) {
// TODO: do not fetch project space via history browser view
historyBrowserView.getProjectSpace().removeTag(historyInfo.getPrimerySpec(), (TagVersionSpec) tag);
}
// TODO: remove manual refresh
historyBrowserView.refresh();
return;
}
}