Dialog porównywania plików [message #1067341] |
Mon, 08 July 2013 11:11 |
Piotr Siupa Messages: 4 Registered: October 2012 |
Junior Member |
|
|
Witam,
Umieściłem w moim pluginie dialog, w którym porównuję ze sobą dwa pliki. Użyłem standardowego dialogu, wywoływanego przez CompareUI.openCompareDialog. Pliki i różnice między nimi wyświeltają się prawidłowo. Proszę o pomoc w rozwiązaniu dwóch problemów:
1) Nie mogę edytować treści porównywanych plików
2) Przycisk commit jest nieaktywny
Kod wywołujący dialog:
CompareConfiguration compareConfig = new CompareConfiguration();
compareConfig.setLeftLabel("Local version");
compareConfig.setRightLabel("Server version");
compareConfig.setLeftEditable(true); compareConfig.setRightEditable(true); compareConfig.setProperty(CompareConfiguration.IGNORE_WHITESPACE, Boolean.TRUE);
String file1 = getFile1();
String file2 = getFile2();
CompareUI.openCompareDialog(new CompareConfigEditorInput(compareConfig, file1, file2));
CompareConfigEditorInput jest klasą utworzoną przeze mnie, a jej implementacja wygląda następująco:
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.CompareEditorInput;
import org.eclipse.compare.IEditableContent;
import org.eclipse.compare.IStreamContentAccessor;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.Differencer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.swt.graphics.Image;
public class CompareConfigEditorInput extends CompareEditorInput implements IEditableContent {
private class Input implements ITypedElement, IStreamContentAccessor {
private String fContent;
public Input(String s) {
fContent = s;
}
public String getName() {
return "name";
}
public Image getImage() {
return null;
}
public String getType() {
return "xml";
}
public InputStream getContents() throws CoreException {
return new ByteArrayInputStream(fContent.getBytes());
}
}
private String left, right;
public CompareConfigEditorInput(CompareConfiguration configuration, String leftContent, String rightContent) {
super(configuration);
left = leftContent;
right = rightContent;
}
protected Object prepareInput(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
Differencer diferencer = new Differencer();
Object diff = diferencer.findDifferences(false, new NullProgressMonitor(), null, null,
new Input(left), new Input(right));
return diff;
}
public boolean isEditable() {
return true;
}
public void setContent(byte[] newContent) {
}
public ITypedElement replace(ITypedElement dest, ITypedElement src) {
return dest;
}
public void save(IProgressMonitor pm) {
super.save(pm);
}
public void saveChanges(IProgressMonitor pm)
throws CoreException{
super.saveChanges(pm);
}
}
Implementacje metod interfejsu IEditableContent są błedne, ale za pomocą debugera przekonałem się, że w ogóle nie są wywoływane.
|
|
|
|
Powered by
FUDForum. Page generated in 0.03713 seconds