import java.io.BufferedReader; import java.io.IOException; import java.util.StringTokenizer; import java.util.Enumeration; import util.list.Vector; import util.file.InvalidFileFormatException; import util.log.Log; import misc.Separators; import integer.IntPair; import string.StrUtil; class KeyProto extends ItemProto { Vector doorReferences = new Vector(); // salva base da zona para permitir salvar os identificadores // de porta corretos (obtidos via subtracao deste valor) int savedZoneBase; KeyProto(int zoneBase, int itemId, BufferedReader itemFile) throws InvalidFileFormatException { super(zoneBase, itemId, itemFile); Log.debug("Chave: " + getName()); savedZoneBase = zoneBase; try { for (; ; ) { if (!itemFile.ready()) throw new InvalidFileFormatException(); String line = itemFile.readLine(); if (line.startsWith(Separators.EOR)) break; StringTokenizer toker = new StringTokenizer(line); if (!toker.hasMoreTokens()) throw new InvalidFileFormatException(); int room = Integer.parseInt(toker.nextToken()); if (!toker.hasMoreTokens()) throw new InvalidFileFormatException(); int dir = Door.getDirectionByName(toker.nextToken()); doorReferences.insert(new IntPair(room + zoneBase, dir)); } doorReferences.trim(); } catch(IOException e) { throw new InvalidFileFormatException(); } catch(NumberFormatException e) { throw new InvalidFileFormatException(); } } protected void finalize() { super.finalize(); } int getProtoType() { return Item.T_KEY; } Item create() { return new Key(this); } ///////////// // Sheetable: private String listDoors() { String list = ""; for (Enumeration enum = doorReferences.elements(); enum.hasMoreElements(); ) { IntPair pair = (IntPair) enum.nextElement(); list += Separators.NL + (pair.getValue1() - savedZoneBase) + " " + Door.getDirectionName(pair.getValue2()); } return list; } public String getSheet() { return super.getSheet() + Separators.NL + "Portas:" + StrUtil.wrapList(listDoors(), "Nenhuma"); } // ///////////// }