package org.eclipse.ltk.core.refactoring.codingspectator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
* @author Mohsen Vakilian
* @author nchen
* @author Balaji Ambresh Rajkumar
*
*/
public class NavigationHistory {
final List navigationHistoryItems;
public NavigationHistory() {
navigationHistoryItems= new ArrayList();
}
public void addItem(NavigationHistoryItem item) {
navigationHistoryItems.add(item);
}
public List getNavigationHistoryItems() {
return Collections.unmodifiableList(navigationHistoryItems);
}
public String toString() {
StringBuilder builder= new StringBuilder("{"); //$NON-NLS-1$
for (Iterator iterator= navigationHistoryItems.iterator(); iterator.hasNext();) {
NavigationHistoryItem item= (NavigationHistoryItem)iterator.next();
builder.append(item);
builder.append(","); //$NON-NLS-1$
}
builder.append("}"); //$NON-NLS-1$
return builder.toString();
}
public static NavigationHistory parse(String navigationHistoryString) throws ParseException {
NavigationHistory navigationHistory= new NavigationHistory();
int head= 0;
while (true) {
int indexOfBeginMarker= navigationHistoryString.indexOf(NavigationHistoryItem.BEGIN_MARKER, head);
if (indexOfBeginMarker == -1)
break;
head= indexOfBeginMarker + 1;
int indexOfEndMarker= navigationHistoryString.indexOf(NavigationHistoryItem.END_MARKER, head);
if (indexOfEndMarker == -1) {
throw new ParseException("Expected " + NavigationHistoryItem.END_MARKER + " in " + navigationHistoryString + " starting from index " + head);
}
head= indexOfEndMarker + 1;
navigationHistory.addItem(NavigationHistoryItem.parse(navigationHistoryString.substring(indexOfBeginMarker, indexOfEndMarker + 1)));
}
return navigationHistory;
}
public static class ParseException extends Exception {
public ParseException(String message) {
super(message);
}
}
}