package org.waarp.xample; /* * Copyright (c) 2002 Felix Golubov */ import java.util.*; /** * A helper class for the XAmple application which holds pathes of accessed * XSD and XML files. * * @author Felix Golubov * @version 1.0 */ public class History { public static final int MAX_ITEM_COUNT = 20; public static final int MAX_LABEL_LENGTH = 70; ArrayList items = null; String path; String label; public History(String path) { this.path = path.replace('\\', '/'); label = abbreviatePath(this.path, MAX_LABEL_LENGTH); } public static String abbreviatePath(String path, int limitLength) { if (path.length() <= limitLength) return path; int k = path.indexOf("/", 1); if (k < 0) return "..." + path.substring(path.length() - limitLength + 3); k = path.indexOf("/", k + 1); if (k < 0) return "..." + path.substring(path.length() - limitLength + 3); String prefix = path.substring(0, k + 1); String suffix = path.substring(k + 1); k = suffix.indexOf('/', 1); if (k < 0) return "..." + path.substring(path.length() - limitLength + 3); int limit = MAX_LABEL_LENGTH - prefix.length() - 3; while (k >= 0 && suffix.length() > limit) { suffix = suffix.substring(k); k = suffix.indexOf('/', 1); } if (suffix.length() <= limit) return prefix + "..." + suffix; else return "..." + path.substring(path.length() - limitLength + 3); } public boolean equals(Object obj) { if (obj == null || !(obj instanceof History)) return false; History history = (History)obj; if (path == null) return (history.path == null); return path.equals(history.path); } public String toString() { return label; } public History put(String childPath) { if (items == null) items = new ArrayList(); History child = new History(childPath); int index = items.indexOf(child); if (index >= 0) child = (History)items.remove(index); items.add(0, child); if (items.size() > MAX_ITEM_COUNT) items.remove(items.size()-1); return child; } public History getFirstChild() { if (items == null && items.size() == 0) return null; return (History)items.get(0); } public void remove(String childPath) { if (items == null) items = new ArrayList(); History child = new History(childPath); int index = items.indexOf(child); if (index >= 0) items.remove(index); } }