/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
package org.eclipse.compare.internal.patch; | |
import java.util.*; | |
import org.eclipse.core.runtime.IPath; | |
import org.eclipse.compare.structuremergeviewer.Differencer; | |
/* package */ class Diff { | |
IPath fOldPath, fNewPath; | |
long fOldDate, fNewDate; // if 0: no file | |
List fHunks= new ArrayList(); | |
boolean fMatches= false; | |
private boolean fIsEnabled2= true; | |
String fRejected; | |
/* package */ Diff(IPath oldPath, long oldDate, IPath newPath, long newDate) { | |
fOldPath= oldPath; | |
fOldDate= oldPath == null ? 0 : oldDate; | |
fNewPath= newPath; | |
fNewDate= newPath == null ? 0 : newDate; | |
} | |
boolean isEnabled() { | |
return fIsEnabled2; | |
} | |
void setEnabled(boolean b) { | |
fIsEnabled2= b; | |
} | |
void reverse() { | |
IPath tp= fOldPath; | |
fOldPath= fNewPath; | |
fNewPath= tp; | |
long t= fOldDate; | |
fOldDate= fNewDate; | |
fNewDate= t; | |
Iterator iter= fHunks.iterator(); | |
while (iter.hasNext()) { | |
Hunk hunk= (Hunk) iter.next(); | |
hunk.reverse(); | |
} | |
} | |
Hunk[] getHunks() { | |
return (Hunk[]) fHunks.toArray((Hunk[]) new Hunk[fHunks.size()]); | |
} | |
IPath getPath() { | |
if (fOldPath != null) | |
return fOldPath; | |
return fNewPath; | |
} | |
void finish() { | |
if (fHunks.size() == 1) { | |
Hunk h= (Hunk) fHunks.get(0); | |
if (h.fNewLength == 0) { | |
fNewDate= 0; | |
fNewPath= fOldPath; | |
} | |
} | |
} | |
/* package */ void add(Hunk hunk) { | |
fHunks.add(hunk); | |
} | |
/* package */ int getType() { | |
if (fOldDate == 0) | |
return Differencer.ADDITION; | |
if (fNewDate == 0) | |
return Differencer.DELETION; | |
return Differencer.CHANGE; | |
} | |
/* package */ String getDescription(int strip) { | |
IPath path= fOldPath; | |
if (fOldDate == 0) | |
path= fNewPath; | |
if (strip > 0 && strip < path.segmentCount()) | |
path= path.removeFirstSegments(strip); | |
return path.toOSString(); | |
} | |
} | |