DocxDifferencer.java
package org.docascode.api.diff;
import com.profesorfalken.jpowershell.PowerShell;
import org.docascode.api.core.errors.DocAsCodeException;
import org.docascode.api.event.Event;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import java.io.*;
public class DocxDifferencer extends AbstractDifferencer{
private File createEmpty() throws DocAsCodeException {
try {
File result = File.createTempFile("empty",".docx");
WordprocessingMLPackage empty = WordprocessingMLPackage.createPackage();
empty.save(result);
return result;
} catch (Docx4JException | IOException e) {
throw new DocAsCodeException("Unable to create empty .docx file.",e);
}
}
@Override
public void diff() throws DocAsCodeException {
try (PowerShell powerShell = PowerShell.openSession()) {
String script = "powershell/diff-docx.ps1";
if (baseFile == null) {
baseFile = createEmpty();
}
if (revisedFile == null) {
revisedFile = createEmpty();
}
Event e = new Event(this);
e.setMessage(String.format(
"Getting diff of '%s' against '%s'...",
baseFile,
revisedFile));
fireEvent(e);
//Read the resource
BufferedReader srcReader = new BufferedReader(
new InputStreamReader(getClass().getClassLoader().getResourceAsStream(script)));
powerShell.executeScript(srcReader,
String.format("-BaseFilePath %s -RevisedFilePath %s -Revision %s -TargetFilePath %s",
baseFile.getAbsolutePath(),
revisedFile.getAbsolutePath(),
revision,
targetFile.getAbsolutePath()));
}
}
}