package org.eclipse.emf.emfstore.client.ui.controller; import java.util.ArrayList; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.emfstore.client.model.ProjectSpace; import org.eclipse.emf.emfstore.client.model.ServerInfo; import org.eclipse.emf.emfstore.client.model.WorkspaceManager; import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand; import org.eclipse.emf.emfstore.client.ui.handlers.AbstractEMFStoreUIController; import org.eclipse.emf.emfstore.client.ui.views.emfstorebrowser.views.NewRepositoryWizard; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; public class UIServerController extends AbstractEMFStoreUIController { /** * * @param shell */ public UIServerController(Shell shell) { super(shell); } public void addServer() { NewRepositoryWizard wizard = new NewRepositoryWizard(); IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); wizard.init(activeWorkbenchWindow.getWorkbench(), (IStructuredSelection) activeWorkbenchWindow .getSelectionService().getSelection()); WizardDialog dialog = new WizardDialog(activeWorkbenchWindow.getShell(), wizard); dialog.create(); dialog.open(); } public void editProperties(ServerInfo serverInfo) { NewRepositoryWizard wizard = new NewRepositoryWizard(); wizard.setServerInfo(serverInfo); WizardDialog dialog = new WizardDialog(getShell(), wizard); dialog.create(); dialog.open(); } /** * TODO REFACTOR */ public void removeServer(final ServerInfo serverInfo) { if (!MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Confirm deletion", "Are you sure you want to delete \'" + serverInfo.getName() + "\'")) { return; } try { EList<ProjectSpace> projectSpaces = WorkspaceManager.getInstance().getCurrentWorkspace().getProjectSpaces(); ArrayList<ProjectSpace> usedSpaces = new ArrayList<ProjectSpace>(); for (ProjectSpace projectSpace : projectSpaces) { if (projectSpace.getUsersession() != null && projectSpace.getUsersession().getServerInfo().equals(serverInfo)) { usedSpaces.add(projectSpace); } } if (usedSpaces.size() > 0) { String message = ""; for (ProjectSpace pSpace : usedSpaces) { message += "\n" + pSpace.getProjectName(); } throw new IllegalStateException("Cannot delete \'" + serverInfo.getName() + "\' because it is currently used by the following projects: \n" + message); } else { // TODO: add code to add & remove server new EMFStoreCommand() { @Override protected void doRun() { WorkspaceManager.getInstance().getCurrentWorkspace().getServerInfos().remove(serverInfo); EcoreUtil.delete(serverInfo); WorkspaceManager.getInstance().getCurrentWorkspace().save(); }; }.run(false); } } catch (IllegalStateException e) { MessageDialog.openError(getShell(), "Error", e.getMessage()); } } }