package com.mobilesorcery.sdk.html5.debug.hotreplace;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.resources.IFile;
import com.mobilesorcery.sdk.core.Pair;
import com.mobilesorcery.sdk.html5.debug.IRedefinable;
import com.mobilesorcery.sdk.html5.debug.RedefinitionResult;
import com.mobilesorcery.sdk.html5.debug.rewrite.ISourceSupport;
public class HTMLRedefinable extends FileRedefinable {
private List<Pair<Integer, Integer>> htmlRanges;
private List<Pair<Integer, Integer>> htmlRangesRo;
public HTMLRedefinable(IRedefinable parent, IFile file, ISourceSupport source) {
this(parent, file, source, false);
}
public HTMLRedefinable(IRedefinable parent, IFile file, ISourceSupport source, boolean deleted) {
super(parent, file, deleted);
setSource(source);
}
public void setHtmlRanges(List<Pair<Integer, Integer>> htmlRanges) {
this.htmlRanges = htmlRanges;
this.htmlRangesRo = Collections.unmodifiableList(htmlRanges);
}
public List<Pair<Integer, Integer>> getHtmlRanges() {
return htmlRangesRo;
}
public boolean areHtmlRangesEqual(HTMLRedefinable redefinable) {
// Hmmmm... we actually perform a byte-by-byte comparison here.
// Fast enough?
List<Pair<Integer, Integer>> otherRanges = redefinable.getHtmlRanges();
if (otherRanges.size() != htmlRanges.size()) {
return false;
}
for (int i = 0; i < htmlRanges.size(); i++) {
Pair<Integer, Integer> htmlRange = htmlRanges.get(i);
Pair<Integer, Integer> otherRange = otherRanges.get(i);
String htmlSegment = getSourceRange(htmlRange.first,
htmlRange.second);
String otherSegment = redefinable.getSourceRange(otherRange.first,
otherRange.second);
if (!htmlSegment.equals(otherSegment)) {
return false;
}
}
return true;
}
}