/* */ package NET.worlds.scape; /* */ /* */ import NET.worlds.console.Console; /* */ import NET.worlds.network.URL; /* */ import java.io.ByteArrayInputStream; /* */ import java.io.ByteArrayOutputStream; /* */ import java.io.DataInputStream; /* */ import java.io.DataOutputStream; /* */ import java.io.FileNotFoundException; /* */ import java.io.IOException; /* */ import java.io.PrintStream; /* */ import java.text.MessageFormat; /* */ import java.util.Enumeration; /* */ import java.util.Hashtable; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public class SuperRoot /* */ implements Properties, Persister /* */ { /* */ private String name; /* */ /* */ public final String getShortClassName() /* */ { /* 128 */ String s = getClass().getName(); /* */ int index; /* 130 */ if ((index = s.lastIndexOf('.')) != -1) /* 131 */ s = s.substring(index + 1); /* 132 */ return s; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public String getName() /* */ { /* 150 */ if (this.name == null) { /* 151 */ int digits = 0; /* 152 */ String classname = getShortClassName(); /* */ /* 154 */ Enumeration en = getRoot().getDeepOwned(); /* */ /* 156 */ while (en.hasMoreElements()) { /* 157 */ SuperRoot x = (SuperRoot)en.nextElement(); /* 158 */ if ((x.name != null) && (x.name.startsWith(classname))) { /* */ try /* */ { /* 161 */ int tmp = Integer.valueOf( /* 162 */ x.name.substring(classname.length())) /* 163 */ .intValue(); /* 164 */ if (tmp > digits) { /* 165 */ digits = tmp; /* */ } /* */ } /* */ catch (NumberFormatException localNumberFormatException) {} /* */ } /* */ } /* */ /* */ /* */ /* 174 */ digits++; /* */ /* */ /* */ /* 178 */ this.name = (classname + digits); /* */ } /* */ /* 181 */ return this.name; /* */ } /* */ /* */ /* */ /* */ /* */ public String getNameMaybeNull() /* */ { /* 189 */ return this.name; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void setName(String v) /* */ { /* 200 */ if ((v == null) && /* 201 */ (this.owner != null)) { /* 202 */ Object[] arguments = { new String(this.owner.getName()) }; /* 203 */ Console.println(MessageFormat.format( /* 204 */ Console.message("Warning-null-name"), arguments)); /* */ } /* */ /* 207 */ this.name = v; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public static SuperRoot nameSearch(Enumeration enumeration, String name) /* */ { /* 216 */ while (enumeration.hasMoreElements()) { /* 217 */ SuperRoot n = (SuperRoot)enumeration.nextElement(); /* 218 */ if (name.equals(n.name)) { /* 219 */ return n; /* */ } /* */ } /* 222 */ return null; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 236 */ protected static String helpURL = "home:internal/"; /* */ private SuperRoot owner; /* */ /* 239 */ public URL getHelpURL() { String helpString = helpURL + getClass().getName() + /* 240 */ Console.message(".html"); /* 241 */ URL helpPage = URL.make(helpString); /* */ /* 243 */ if (Console.wasHttpNoSuchFile(helpString)) /* 244 */ helpPage = URL.make(helpURL + getClass().getName() + ".html"); /* 245 */ return helpPage; /* */ } /* */ /* */ /* */ /* */ public URL getHelpURL(Property p) /* */ { /* 252 */ String namesub = p.getName().replace(' ', '_'); /* 253 */ String helpString = helpURL + getClass().getName() + "#" + namesub + /* 254 */ Console.message(".html"); /* 255 */ URL helpPage = URL.make(helpString); /* 256 */ if (Console.wasHttpNoSuchFile(helpString)) /* 257 */ helpPage = URL.make(helpURL + getClass().getName() + "#" + namesub + /* 258 */ ".html"); /* 259 */ return helpPage; /* */ } /* */ /* */ /* */ /* */ /* */ public String toString() /* */ { /* 267 */ if (isActive()) { /* 268 */ return getName(); /* */ } /* 270 */ return getName() + "(inactive)"; /* */ } /* */ /* */ /* */ public Object properties(int index, int offset, int mode, Object value) /* */ throws NoSuchPropertyException /* */ { /* 277 */ Object ret = null; /* 278 */ switch (index - offset) { /* */ case 0: /* 280 */ if (mode == 0) { /* 281 */ ret = StringPropertyEditor.make(new Property(this, index, /* 282 */ "Name")); /* 283 */ } else if (mode == 1) { /* 284 */ ret = getName(); /* 285 */ } else if (mode == 4) { /* 286 */ setName(null); /* 287 */ } else if (mode == 2) { /* 288 */ String s = (String)value; /* 289 */ if ((s.equals(this.name)) || (this.owner == null) || /* 290 */ (nameSearch(getRoot().getDeepOwned(), s) == null)) { /* 291 */ setName((String)value); /* */ } else { /* 293 */ Object[] arguments = { new String(s), /* 294 */ new String(getRoot().getName()) }; /* 295 */ Console.println(MessageFormat.format( /* 296 */ Console.message("Name-in-use"), arguments)); /* */ } /* */ } /* 299 */ break; /* */ /* */ case 1: /* 302 */ if (mode == 0) /* */ { /* */ /* 305 */ ret = URLPropertyEditor.make(new Property(this, index, /* 306 */ "Source URL").allowSetNull(), "*wob", false); /* 307 */ } else if (mode == 1) { /* 308 */ ret = this.sourceURL; /* 309 */ } else if (mode == 2) /* 310 */ setSourceURL((URL)value); /* 311 */ break; /* */ /* */ default: /* 314 */ throw new NoSuchPropertyException(); /* */ } /* 316 */ return ret; /* */ } /* */ /* */ public Object propertyParent() { /* 320 */ return this.owner; /* */ } /* */ /* */ /* */ /* */ /* */ public SuperRoot getOwner() /* */ { /* 328 */ return this.owner; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void discard() /* */ { /* 342 */ detach(); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ protected void add(SuperRoot x) /* */ { /* 353 */ if ((x.owner != null) && (x.owner != this)) { /* 354 */ System.out.println("double-setting owner of " + x + " from " + /* 355 */ x.owner + " to " + this); /* 356 */ throw new Error("double-setting owner of " + x); /* */ } /* 358 */ x.noteAddingTo(this); /* 359 */ x.owner = this; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public void detach() /* */ { /* 368 */ if (this.owner != null) /* */ { /* 370 */ this.owner.noteUnadding(this); /* */ /* 372 */ this.owner = null; /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ protected void noteAddingTo(SuperRoot s) {} /* */ /* */ /* */ /* */ /* */ /* */ protected void noteUnadding(SuperRoot s) {} /* */ /* */ /* */ /* */ /* */ /* */ public Enumeration getOwned() /* */ { /* 395 */ return new ShallowEnumeration(this); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public Enumeration getDeepOwned() /* */ { /* 404 */ return new DeepEnumeration(this); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void getChildren(DeepEnumeration d) {} /* */ /* */ /* */ /* */ /* */ /* */ public World getWorld() /* */ { /* 420 */ SuperRoot owner = getOwner(); /* */ /* 422 */ if (owner == null) { /* 423 */ return null; /* */ } /* 425 */ return owner.getWorld(); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public Room getRoom() /* */ { /* 436 */ SuperRoot owner = getOwner(); /* */ /* 438 */ if (owner == null) { /* 439 */ return null; /* */ } /* 441 */ return owner.getRoom(); /* */ } /* */ /* */ /* */ /* */ /* */ public SuperRoot getRoot() /* */ { /* 449 */ SuperRoot owner = getOwner(); /* */ /* 451 */ if (owner == null) { /* 452 */ return this; /* */ } /* 454 */ return owner.getRoot(); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ public boolean isActive() /* */ { /* 464 */ return getWorld() != null; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public URL getSourceURL() /* */ { /* 476 */ return this.sourceURL; /* */ } /* */ /* */ /* */ /* */ /* */ public void setSourceURL(URL s) /* */ { /* 484 */ this.sourceURL = s; /* */ } /* */ /* */ /* */ /* */ /* */ public URL getContainingSourceURL() /* */ { /* 492 */ if (this.sourceURL != null) { /* 493 */ return this.sourceURL; /* */ } /* 495 */ if (this.owner != null) { /* 496 */ return this.owner.getContainingSourceURL(); /* */ } /* 498 */ return null; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void markEdited() /* */ { /* 511 */ if (this.owner != null) { /* 512 */ this.owner.markEdited(); /* */ } /* */ } /* */ /* */ /* */ /* */ public static SuperRoot readFile(String urlLocal, URL url) /* */ { /* */ Exception ex; /* */ /* */ try /* */ { /* 524 */ Restorer r = new Restorer(urlLocal, url); /* 525 */ SuperRoot o = (SuperRoot)r.restore(); /* 526 */ r.done(); /* 527 */ o.setSourceURL(url); /* 528 */ return o; /* */ } catch (FileNotFoundException e) { /* 530 */ ex = e; /* */ } catch (ClassCastException e) { Exception ex; /* 532 */ ex = e; /* */ } catch (IOException e) { Exception ex; /* 534 */ ex = e; /* */ } catch (TooNewException e) { Exception ex; /* 536 */ ex = e; /* */ } catch (BadFormatException e) { Exception ex; /* 538 */ ex = e; /* */ } /* */ /* */ /* */ /* 543 */ return null; /* */ } /* */ /* */ public static SuperRoot readFile(URL url) { /* 547 */ return readFile(url.unalias(), url); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ protected URL sourceURL; /* */ /* */ /* */ /* */ /* */ public void loadInit() {} /* */ /* */ /* */ /* */ /* */ /* */ public void saveFile(URL url) /* */ throws IOException /* */ { /* 568 */ if ((this instanceof NonPersister)) { /* 569 */ throw new IOException("Can't save NonPersister"); /* */ } /* 571 */ Saver s = new Saver(url); /* 572 */ s.save(this); /* 573 */ s.done(); /* 574 */ setSourceURL(url); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ public Object clone() /* */ { /* 584 */ byte[] b = getByteCopy(); /* */ /* 586 */ return getCopyFromBytes(b); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public byte[] getByteCopy() /* */ { /* 595 */ if ((this instanceof NonPersister)) { /* 596 */ return null; /* */ } /* 598 */ ByteArrayOutputStream buffer = new ByteArrayOutputStream(); /* */ try { /* 600 */ Saver saver = new Saver(new DataOutputStream(buffer)); /* 601 */ saver.save(this); /* 602 */ saver.done(); /* 603 */ return buffer.toByteArray(); /* */ } catch (Exception e) { /* 605 */ e.printStackTrace(System.out); /* 606 */ throw new Error("Can't save"); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ public static SuperRoot getCopyFromBytes(byte[] b) /* */ { /* 615 */ if (b == null) { /* 616 */ return null; /* */ } /* */ try { /* 619 */ Restorer r = new Restorer(new DataInputStream( /* 620 */ new ByteArrayInputStream(b))); /* 621 */ SuperRoot obj = (SuperRoot)r.restore(); /* 622 */ r.done(); /* 623 */ return obj; /* */ } catch (Exception e) { /* 625 */ e.printStackTrace(System.out); /* 626 */ throw new Error("Can't restore"); /* */ } /* */ } /* */ /* */ /* */ /* 632 */ private static Object classCookie = new Object(); /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void saveState(Saver s) /* */ throws IOException /* */ { /* 643 */ s.saveVersion(2, classCookie); /* 644 */ s.saveString(this.name); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void restoreState(Restorer r) /* */ throws IOException, TooNewException /* */ { /* 658 */ restoreStateSuperRoot(r); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ protected final void restoreStateSuperRoot(Restorer r) /* */ throws IOException, TooNewException /* */ { /* 668 */ switch (r.restoreVersion(classCookie)) { /* */ case 1: /* 670 */ r.setOldFlag(); /* 671 */ String n; if ((n = r.restoreString()) != null) /* 672 */ setName(n); /* 673 */ r.restoreMaybeNull(); /* 674 */ break; /* */ case 0: /* 676 */ r.setOldFlag(); /* */ case 2: String n; /* 678 */ if ((n = r.restoreString()) != null) /* 679 */ setName(n); /* 680 */ break; /* */ /* */ default: /* 683 */ throw new TooNewException(); /* */ } /* */ /* */ /* */ String n; /* */ } /* */ /* */ /* */ public void postRestore(int version) {} /* */ /* */ /* 694 */ static Hashtable, Integer> finalizedClasses = new Hashtable(); /* */ /* */ public static void finalizeCounter(Object o) { /* 697 */ Class c = o.getClass(); /* 698 */ Integer icnt = (Integer)finalizedClasses.get(c); /* 699 */ int cnt = 0; /* 700 */ if (icnt != null) { /* 701 */ cnt = icnt.intValue(); /* */ } /* 703 */ cnt++; if (cnt == 1000) { /* 704 */ System.out.println("Finalized 1000 times: " + c); /* 705 */ cnt = 0; /* */ } /* */ /* 708 */ finalizedClasses.put(o.getClass(), new Integer(cnt)); /* */ } /* */ /* */ /* */ protected void finalize() {} /* */ /* */ /* 715 */ static Hashtable, Integer> classCounter = new Hashtable(); /* */ /* */ public static void countClass(Object o, int inc) { /* 718 */ Class c = o.getClass(); /* 719 */ Integer icnt = (Integer)classCounter.get(c); /* 720 */ int cnt = 0; /* 721 */ if (icnt != null) { /* 722 */ cnt = icnt.intValue(); /* */ } /* 724 */ cnt += inc; /* */ /* 726 */ classCounter.put(c, new Integer(cnt)); /* */ } /* */ /* */ public static void printClassCounts() { /* 730 */ for (Enumeration> e = classCounter.keys(); e.hasMoreElements();) { /* 731 */ Class c = (Class)e.nextElement(); /* 732 */ System.out.println("Class " + c.getName() + " has " + /* 733 */ classCounter.get(c)); /* */ } /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\SuperRoot.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */