/*******************************************************************************
* 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.dialogs.merge;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.emfstore.client.model.exceptions.ChangeConflictException;
import org.eclipse.emf.emfstore.client.model.observers.ConflictResolver;
import org.eclipse.emf.emfstore.client.ui.dialogs.merge.util.CaseStudySwitch;
import org.eclipse.emf.emfstore.common.model.Project;
import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Display;
/**
* This is an alternative merge handler, using the new merge wizard.
*
* @author wesendon
*/
public class MergeProjectHandler implements ConflictResolver {
private List<AbstractOperation> acceptedMine;
private List<AbstractOperation> rejectedTheirs;
/**
* Default constructor.
*
* @param conflictException
* the ChangeConflictException
*/
public MergeProjectHandler(ChangeConflictException conflictException) {
acceptedMine = new ArrayList<AbstractOperation>();
rejectedTheirs = new ArrayList<AbstractOperation>();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.client.model.observers.ConflictResolver#getAcceptedMine()
*/
public List<AbstractOperation> getAcceptedMine() {
return acceptedMine;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.client.model.observers.ConflictResolver#getAcceptedMine()
*/
public List<AbstractOperation> getRejectedTheirs() {
return rejectedTheirs;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.client.model.observers.ConflictResolver#getAcceptedMine()
*/
public boolean resolveConflicts(Project project, List<ChangePackage> theirChangePackages,
ChangePackage myChangePackage, PrimaryVersionSpec base, PrimaryVersionSpec target) {
boolean caseStudy = false;
if (caseStudy) {
CaseStudySwitch studySwitch = new CaseStudySwitch();
studySwitch.flattenChangePackages(myChangePackage, theirChangePackages);
}
DecisionManager decisionManager = new DecisionManager(project, myChangePackage, theirChangePackages, base,
target);
if (decisionManager.getConflicts().size() == 0) {
// conflict has been resolved automatically
return true;
}
MergeWizard wizard = new MergeWizard(decisionManager);
WizardDialog dialog = new WizardDialog(Display.getCurrent().getActiveShell(), wizard);
dialog.setPageSize(1000, 500);
dialog.setBlockOnOpen(true);
dialog.create();
int open = dialog.open();
acceptedMine = decisionManager.getAcceptedMine();
rejectedTheirs = decisionManager.getRejectedTheirs();
return (open == Window.OK);
}
}