package jetbrains.mps.vcs;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import jetbrains.mps.tool.environment.Environment;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.mock.MockProjectEx;
import jetbrains.mps.project.MPSProject;
import jetbrains.mps.ide.bookmark.BookmarkManager;
import jetbrains.mps.project.StandaloneMPSProject;
import org.jdom.JDOMException;
import java.io.IOException;
import jetbrains.mps.smodel.persistence.def.ModelReadException;
import java.util.Scanner;
import jetbrains.mps.tool.environment.IdeaEnvironment;
import jetbrains.mps.tool.environment.EnvironmentConfig;
import com.intellij.openapi.util.IconLoader;
import jetbrains.mps.vcs.platform.util.MergeBackupUtil;
import java.io.File;
import jetbrains.mps.vcs.util.MergeVersion;
import jetbrains.mps.project.MPSExtentions;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import jetbrains.mps.ide.vfs.VirtualFileUtils;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import com.intellij.diff.merge.MergeRequest;
import com.intellij.diff.DiffRequestFactory;
import jetbrains.mps.fileTypes.MPSFileTypeFactory;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.diff.DiffManager;
import com.intellij.diff.InvalidDiffRequestException;
import org.apache.log4j.Level;
/**
* Class for analyzing merge driver dumps
*/
public class TestMergeDialog {
private static final Logger LOG = LogManager.getLogger(TestMergeDialog.class);
private static Environment ENV;
private static Disposable myParentDisposable = Disposer.newDisposable();
private static Object ___init = new Object() {
{
Extensions.registerAreaClass("IDEA_PROJECT", null);
}
};
private static Project ourProject = new MockProjectEx(TestMergeDialog.myParentDisposable) {
@Override
public <T> T getComponent(Class<T> interfaceClass) {
if (interfaceClass == MPSProject.class) {
return (T) TestMergeDialog.ourMPSProject;
}
if (interfaceClass == BookmarkManager.class) {
return (T) new BookmarkManager(TestMergeDialog.ourMPSProject, null);
}
return null;
}
};
private static MPSProject ourMPSProject = new StandaloneMPSProject(TestMergeDialog.ourProject, null, null);
public TestMergeDialog() {
}
public static void main(String[] args) throws JDOMException, IOException, ModelReadException {
if (args.length == 0) {
System.out.print("Input path to model zip: ");
String line = new Scanner(System.in).nextLine();
args = new String[]{((line == null ? null : line.trim()))};
}
TestMergeDialog.ENV = IdeaEnvironment.getOrCreate(EnvironmentConfig.defaultConfig());
IconLoader.activate();
final String[] models = new String[3];
String resultFile;
if (args.length == 2 || args.length == 1) {
final String[] zipped = MergeBackupUtil.loadZippedModelsAsText(new File(args[0]), new MergeVersion[]{MergeVersion.BASE, MergeVersion.MINE, MergeVersion.REPOSITORY});
models[0] = zipped[0];
models[1] = zipped[1];
models[2] = zipped[2];
if (args.length == 1) {
resultFile = File.createTempFile("mpstmd", MPSExtentions.DOT_MODEL).getAbsolutePath();
} else {
resultFile = args[1];
}
} else
if (args.length == 4 || args.length == 3) {
models[0] = FileUtil.loadFile(new File(args[0]));
models[1] = FileUtil.loadFile(new File(args[1]));
models[2] = FileUtil.loadFile(new File(args[2]));
if (args.length == 3) {
resultFile = File.createTempFile("", MPSExtentions.DOT_MODEL).getAbsolutePath();
} else {
resultFile = args[3];
}
} else {
System.err.println("There must be 1-4 parameters");
return;
}
VirtualFile resFile = VirtualFileUtils.getVirtualFile(resultFile);
List<String> contents = ListSequence.fromListAndArray(new ArrayList<String>(), models);
List<String> titles = ListSequence.fromListAndArray(new ArrayList<String>(), "Local Version", "Merge Result", "Remote Version");
try {
MergeRequest request = DiffRequestFactory.getInstance().createMergeRequest(ourProject, MPSFileTypeFactory.MPS_FILE_TYPE, FileDocumentManager.getInstance().getDocument(resFile), contents, "Merge files and save result to " + resultFile, titles, null);
DiffManager.getInstance().showMerge(ourProject, request);
} catch (InvalidDiffRequestException e) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("", e);
}
}
}
}