package jetbrains.mps.vcs.util;
/*Generated by MPS */
import java.io.File;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.model.SModelName;
import java.io.IOException;
import jetbrains.mps.project.MPSExtentions;
import jetbrains.mps.util.FileUtil;
import org.jetbrains.annotations.NotNull;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MergeDriverBackupUtil {
private static String backupDirPath;
public MergeDriverBackupUtil() {
// Used in MergeProviderDecorator
}
public static File zipModel(byte[][] contents, @Nullable SModelName modelName) throws IOException {
String shortFileName = "unknown.mps";
if (modelName != null) {
shortFileName = modelName.getSimpleName() + MPSExtentions.DOT_MODEL;
}
File tmp = FileUtil.createTmpDir();
writeContentsToFile(contents[MergeConstants.ORIGINAL], shortFileName, tmp, MergeVersion.BASE.getSuffix());
writeContentsToFile(contents[MergeConstants.CURRENT], shortFileName, tmp, MergeVersion.MINE.getSuffix());
writeContentsToFile(contents[MergeConstants.LAST_REVISION], shortFileName, tmp, MergeVersion.REPOSITORY.getSuffix());
File zipfile = chooseZipFileForModelLongName("unknown.mps", modelName);
zipfile.getParentFile().mkdirs();
FileUtil.zip(tmp, zipfile);
FileUtil.delete(tmp);
return zipfile;
}
public static void writeContentsToFile(byte[] contents, String name, File tmpDir, String suffix) throws IOException {
File file = new File(tmpDir.getAbsolutePath() + File.separator + name + "." + suffix);
FileUtil.write(file, contents);
}
public static File chooseZipFileForModelLongName(@NotNull String defaultFileName, @Nullable SModelName modelName) {
String fileName = defaultFileName;
if (modelName != null) {
fileName = modelName.getLongName() + MPSExtentions.DOT_MODEL;
}
String prefix = getMergeBackupDirPath() + File.separator + fileName;
prefix = prefix + "." + new SimpleDateFormat("yyyy-MM-dd_HH-mm").format(new Date());
File zipfile = new File(prefix + ".zip");
int i = 0;
while (zipfile.exists()) {
zipfile = new File(prefix + "." + i + ".zip");
i++;
}
return zipfile;
}
public static String getMergeBackupDirPath() {
return backupDirPath;
}
public static void setMergeBackupDirPath(String path) {
backupDirPath = path;
}
}