/* Item9: read from and write to a file */ import java.util.*; public class Item9 extends Item8 { // CONVERT AN ITEM INTO A STRING REPRESENTATION public String toString() { return "Item {\n" + fieldsToString() + "}\n"; } public String fieldsToString() { String s = ""; s += " id " + id + "\n"; s += " nPts " + nPts + "\n"; s += " x0 " + x0 + "\n"; s += " y0 " + y0 + "\n"; s += " nKeys " + nKeys + "\n"; s += " nLinked " + nLinked + "\n"; s += " text \"" + text + "\"\n"; s += " X " + toString(X, nPts) + "\n"; s += " Y " + toString(Y, nPts) + "\n"; s += " xKey " + toString(xKey, nKeys) + "\n"; s += " yKey " + toString(yKey, nKeys) + "\n"; s += " ckx " + toString(ckx, nKeys, nLinked) + "\n"; s += " cky " + toString(cky, nKeys, nLinked) + "\n"; s += " ckc " + toString(ckc, nKeys, nLinked) + "\n"; s += " linkedItem { "; for (int i = 0 ; i < nLinked ; i++) s += linkedItem[i].id + " "; s += "}\n"; return s; } String toString(int A[], int len) { String s = "{ "; for (int i = 0 ; i < len ; i++) s += A[i] + " "; return s + "} "; } String toString(int A[][], int m, int n) { String s = "{ "; for (int i = 0 ; i < m ; i++) s += toString(A[i], n); return s + "} "; } // CONVERT A STRING REPRESENTAION INTO AN ITEM StringTokenizer st; String token; Item item[]; public void parse(StringTokenizer st, Item item[]) { this.st = st; this.item = item; getToken(); // "Item" for (getToken() ; ! getToken().equals("}") ; ) { parseField(); } } public void parseField() { if (token.equals("id" )) id = parseInt(); else if (token.equals("nPts" )) nPts = parseInt(); else if (token.equals("x0" )) x0 = parseInt(); else if (token.equals("y0" )) y0 = parseInt(); else if (token.equals("nKeys" )) nKeys = parseInt(); else if (token.equals("nLinked" )) nLinked = parseInt(); else if (token.equals("text" )) text = parseStr(); else if (token.equals("X" )) parse(X ); else if (token.equals("Y" )) parse(Y ); else if (token.equals("xKey" )) parse(xKey); else if (token.equals("yKey" )) parse(yKey); else if (token.equals("ckx" )) parse(ckx ); else if (token.equals("cky" )) parse(cky ); else if (token.equals("ckc" )) parse(ckc ); else if (token.equals("ckc" )) parse(ckc ); else if (token.equals("linkedItem")) parse(linkedItem, item); } String getToken() { return token = st.nextToken(); } int parseInt() { getToken(); return intValue(); } int intValue() { return (new Integer(token)).intValue(); } String parseStr() { String s = getToken(); while (s.charAt(token.length()-1) != '\"') s += getToken(); return s.substring(1, s.length()-1); } int parse(int val[]) { getToken(); return parseList(val); } int parseList(int val[]) { int n = 0; while ( ! getToken().equals("}") ) { val[n++] = intValue(); } return n; } int parse(int val[][]) { getToken(); int m = 0; while ( ! getToken().equals("}") ) parseList(val[m++]); return m; } int parse(Item val[], Item item[]) { getToken(); int n = 0; while ( ! getToken().equals("}") ) val[n++] = item[intValue()]; return n; } }