package org.eclipse.emf.ecp.emfstore.handler;

import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider;
import org.eclipse.emf.ecp.spi.core.InternalProject;
import org.eclipse.emf.ecp.spi.core.InternalRepository;
import org.eclipse.emf.ecp.wizards.RepositoryWizard;
import org.eclipse.emf.emfstore.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.client.model.ServerInfo;
import org.eclipse.emf.emfstore.client.ui.controller.UIShareProjectController;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.ui.handlers.HandlerUtil;

/**
 * @author Eugen Neufeld
 */
public class ShareProjectHandler extends AbstractHandler
{

  public Object execute(ExecutionEvent event) throws ExecutionException
  {
    InternalProject project = (InternalProject)((IStructuredSelection)HandlerUtil.getCurrentSelection(event))
        .getFirstElement();

    RepositoryWizard rw = new RepositoryWizard();
    rw.init(project.getProvider());

    WizardDialog wd = new WizardDialog(HandlerUtil.getActiveShell(event), rw);
    int result = wd.open();
    if (result == WizardDialog.OK)
    {
      // TODO internal cast again
      InternalRepository repository = (InternalRepository)rw.getSelectedRepository();
      project.undispose(repository);
      ProjectSpace projectSpace = EMFStoreProvider.INSTANCE.getProjectSpace(project);
      // TODO Ugly
      if (projectSpace.getUsersession() == null)
      {
        ServerInfo serverInfo = EMFStoreProvider.INSTANCE.getServerInfo(project.getRepository());
        projectSpace.setUsersession(serverInfo.getLastUsersession());
      }
      new UIShareProjectController(HandlerUtil.getActiveShell(event)).share(projectSpace);

    }
    return null;
  }
}
