home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / text / AbstractDocument.class (.txt) next >
Encoding:
Java Class File  |  1998-02-26  |  9.3 KB  |  320 lines

  1. package com.sun.java.swing.text;
  2.  
  3. import com.sun.java.swing.event.DocumentEvent;
  4. import com.sun.java.swing.event.DocumentListener;
  5. import com.sun.java.swing.event.EventListenerList;
  6. import com.sun.java.swing.event.UndoableEditEvent;
  7. import com.sun.java.swing.event.UndoableEditListener;
  8. import com.sun.java.swing.event.DocumentEvent.EventType;
  9. import com.sun.java.swing.undo.CompoundEdit;
  10. import com.sun.java.swing.undo.UndoableEdit;
  11. import java.io.IOException;
  12. import java.io.ObjectInputStream;
  13. import java.io.PrintStream;
  14. import java.io.Serializable;
  15. import java.util.Dictionary;
  16. import java.util.Hashtable;
  17.  
  18. public abstract class AbstractDocument implements Document, Serializable {
  19.    private transient int numReaders;
  20.    private transient Thread currWriter;
  21.    private Dictionary documentProperties;
  22.    protected EventListenerList listenerList;
  23.    private Content data;
  24.    private AttributeContext context;
  25.    private static final String BAD_LOCK_STATE = "document lock failure";
  26.    protected static final String BAD_LOCATION = "document location failure";
  27.    public static final String ParagraphElementName = "paragraph";
  28.    public static final String ContentElementName = "content";
  29.    public static final String SectionElementName = "section";
  30.    public static final String ElementNameAttribute = "$ename";
  31.    // $FF: synthetic field
  32.    static Class class$com$sun$java$swing$event$DocumentListener;
  33.    // $FF: synthetic field
  34.    static Class class$com$sun$java$swing$event$UndoableEditListener;
  35.  
  36.    protected AbstractDocument(Content var1) {
  37.       this(var1, StyleContext.getDefaultStyleContext());
  38.    }
  39.  
  40.    protected AbstractDocument(Content var1, AttributeContext var2) {
  41.       this.listenerList = new EventListenerList();
  42.       this.data = var1;
  43.       this.context = var2;
  44.    }
  45.  
  46.    public Dictionary getDocumentProperties() {
  47.       if (this.documentProperties == null) {
  48.          this.documentProperties = new Hashtable(2);
  49.       }
  50.  
  51.       return this.documentProperties;
  52.    }
  53.  
  54.    public void setDocumentProperties(Dictionary var1) {
  55.       this.documentProperties = var1;
  56.    }
  57.  
  58.    protected void fireInsertUpdate(DocumentEvent var1) {
  59.       Object[] var2 = this.listenerList.getListenerList();
  60.  
  61.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  62.          if (var2[var3] == (class$com$sun$java$swing$event$DocumentListener != null ? class$com$sun$java$swing$event$DocumentListener : (class$com$sun$java$swing$event$DocumentListener = class$("com.sun.java.swing.event.DocumentListener")))) {
  63.             ((DocumentListener)var2[var3 + 1]).insertUpdate(var1);
  64.          }
  65.       }
  66.  
  67.    }
  68.  
  69.    protected void fireChangedUpdate(DocumentEvent var1) {
  70.       Object[] var2 = this.listenerList.getListenerList();
  71.  
  72.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  73.          if (var2[var3] == (class$com$sun$java$swing$event$DocumentListener != null ? class$com$sun$java$swing$event$DocumentListener : (class$com$sun$java$swing$event$DocumentListener = class$("com.sun.java.swing.event.DocumentListener")))) {
  74.             ((DocumentListener)var2[var3 + 1]).changedUpdate(var1);
  75.          }
  76.       }
  77.  
  78.    }
  79.  
  80.    protected void fireRemoveUpdate(DocumentEvent var1) {
  81.       Object[] var2 = this.listenerList.getListenerList();
  82.  
  83.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  84.          if (var2[var3] == (class$com$sun$java$swing$event$DocumentListener != null ? class$com$sun$java$swing$event$DocumentListener : (class$com$sun$java$swing$event$DocumentListener = class$("com.sun.java.swing.event.DocumentListener")))) {
  85.             ((DocumentListener)var2[var3 + 1]).removeUpdate(var1);
  86.          }
  87.       }
  88.  
  89.    }
  90.  
  91.    protected void fireUndoableEditUpdate(UndoableEditEvent var1) {
  92.       Object[] var2 = this.listenerList.getListenerList();
  93.  
  94.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  95.          if (var2[var3] == (class$com$sun$java$swing$event$UndoableEditListener != null ? class$com$sun$java$swing$event$UndoableEditListener : (class$com$sun$java$swing$event$UndoableEditListener = class$("com.sun.java.swing.event.UndoableEditListener")))) {
  96.             ((UndoableEditListener)var2[var3 + 1]).undoableEditHappened(var1);
  97.          }
  98.       }
  99.  
  100.    }
  101.  
  102.    public void render(Runnable var1) {
  103.       try {
  104.          this.readLock();
  105.          var1.run();
  106.       } finally {
  107.          this.readUnlock();
  108.       }
  109.  
  110.    }
  111.  
  112.    public int getLength() {
  113.       return this.data.length() - 1;
  114.    }
  115.  
  116.    public void addDocumentListener(DocumentListener var1) {
  117.       this.listenerList.add(class$com$sun$java$swing$event$DocumentListener != null ? class$com$sun$java$swing$event$DocumentListener : (class$com$sun$java$swing$event$DocumentListener = class$("com.sun.java.swing.event.DocumentListener")), var1);
  118.    }
  119.  
  120.    public void removeDocumentListener(DocumentListener var1) {
  121.       this.listenerList.remove(class$com$sun$java$swing$event$DocumentListener != null ? class$com$sun$java$swing$event$DocumentListener : (class$com$sun$java$swing$event$DocumentListener = class$("com.sun.java.swing.event.DocumentListener")), var1);
  122.    }
  123.  
  124.    public void addUndoableEditListener(UndoableEditListener var1) {
  125.       this.listenerList.add(class$com$sun$java$swing$event$UndoableEditListener != null ? class$com$sun$java$swing$event$UndoableEditListener : (class$com$sun$java$swing$event$UndoableEditListener = class$("com.sun.java.swing.event.UndoableEditListener")), var1);
  126.    }
  127.  
  128.    public void removeUndoableEditListener(UndoableEditListener var1) {
  129.       this.listenerList.remove(class$com$sun$java$swing$event$UndoableEditListener != null ? class$com$sun$java$swing$event$UndoableEditListener : (class$com$sun$java$swing$event$UndoableEditListener = class$("com.sun.java.swing.event.UndoableEditListener")), var1);
  130.    }
  131.  
  132.    public final Object getProperty(Object var1) {
  133.       return this.getDocumentProperties().get(var1);
  134.    }
  135.  
  136.    public final void putProperty(Object var1, Object var2) {
  137.       if (var2 != null) {
  138.          this.getDocumentProperties().put(var1, var2);
  139.       } else {
  140.          this.getDocumentProperties().remove(var1);
  141.       }
  142.    }
  143.  
  144.    public void remove(int var1, int var2) throws BadLocationException {
  145.       if (var2 > 0) {
  146.          try {
  147.             this.writeLock();
  148.             DefaultDocumentEvent var5 = new DefaultDocumentEvent(this, var1, var2, EventType.REMOVE);
  149.             this.removeUpdate(var5);
  150.             UndoableEdit var6 = this.data.remove(var1, var2);
  151.             if (var6 != null) {
  152.                var5.addEdit(var6);
  153.             }
  154.  
  155.             ((CompoundEdit)var5).end();
  156.             this.fireRemoveUpdate(var5);
  157.             if (var6 != null) {
  158.                this.fireUndoableEditUpdate(new UndoableEditEvent(this, var5));
  159.             }
  160.          } finally {
  161.             this.writeUnlock();
  162.          }
  163.  
  164.       }
  165.    }
  166.  
  167.    public void insertString(int var1, String var2, AttributeSet var3) throws BadLocationException {
  168.       if (var2 != null && var2.length() != 0) {
  169.          try {
  170.             this.writeLock();
  171.             UndoableEdit var6 = this.data.insertString(var1, var2);
  172.             DefaultDocumentEvent var7 = new DefaultDocumentEvent(this, var1, var2.length(), EventType.INSERT);
  173.             if (var6 != null) {
  174.                var7.addEdit(var6);
  175.             }
  176.  
  177.             this.insertUpdate(var7, var3);
  178.             ((CompoundEdit)var7).end();
  179.             this.fireInsertUpdate(var7);
  180.             if (var6 != null) {
  181.                this.fireUndoableEditUpdate(new UndoableEditEvent(this, var7));
  182.             }
  183.          } finally {
  184.             this.writeUnlock();
  185.          }
  186.  
  187.       }
  188.    }
  189.  
  190.    public String getText(int var1, int var2) throws BadLocationException {
  191.       String var3 = this.data.getString(var1, var2);
  192.       return var3;
  193.    }
  194.  
  195.    public void getText(int var1, int var2, Segment var3) throws BadLocationException {
  196.       this.data.getChars(var1, var2, var3);
  197.    }
  198.  
  199.    public synchronized Position createPosition(int var1) throws BadLocationException {
  200.       return this.data.createPosition(var1);
  201.    }
  202.  
  203.    public final Position getStartPosition() {
  204.       Position var1;
  205.       try {
  206.          var1 = this.createPosition(0);
  207.       } catch (BadLocationException var2) {
  208.          var1 = null;
  209.       }
  210.  
  211.       return var1;
  212.    }
  213.  
  214.    public final Position getEndPosition() {
  215.       Position var1;
  216.       try {
  217.          var1 = this.createPosition(this.data.length());
  218.       } catch (BadLocationException var2) {
  219.          var1 = null;
  220.       }
  221.  
  222.       return var1;
  223.    }
  224.  
  225.    public Element[] getRootElements() {
  226.       Element[] var1 = new Element[]{this.getDefaultRootElement()};
  227.       return var1;
  228.    }
  229.  
  230.    public abstract Element getDefaultRootElement();
  231.  
  232.    protected final AttributeContext getAttributeContext() {
  233.       return this.context;
  234.    }
  235.  
  236.    protected void insertUpdate(DefaultDocumentEvent var1, AttributeSet var2) {
  237.    }
  238.  
  239.    protected void removeUpdate(DefaultDocumentEvent var1) {
  240.    }
  241.  
  242.    public void dump(PrintStream var1) {
  243.       Element var2 = this.getDefaultRootElement();
  244.       if (var2 instanceof AbstractElement) {
  245.          ((AbstractElement)var2).dump(var1, 0);
  246.       }
  247.  
  248.    }
  249.  
  250.    protected final Content getContent() {
  251.       return this.data;
  252.    }
  253.  
  254.    protected Element createLeafElement(Element var1, AttributeSet var2, int var3, int var4) {
  255.       return new LeafElement(this, var1, var2, var3, var4);
  256.    }
  257.  
  258.    protected Element createBranchElement(Element var1, AttributeSet var2) {
  259.       return new BranchElement(this, var1, var2);
  260.    }
  261.  
  262.    protected final synchronized Thread getCurrentWriter() {
  263.       return this.currWriter;
  264.    }
  265.  
  266.    protected final synchronized void writeLock() {
  267.       try {
  268.          while(this.numReaders > 0 || this.currWriter != null) {
  269.             this.wait();
  270.          }
  271.  
  272.          this.currWriter = Thread.currentThread();
  273.       } catch (InterruptedException var1) {
  274.       }
  275.    }
  276.  
  277.    protected final synchronized void writeUnlock() {
  278.       if (this.numReaders <= 0 && this.currWriter != null) {
  279.          this.currWriter = null;
  280.          this.notify();
  281.       } else {
  282.          throw new StateInvariantError("document lock failure");
  283.       }
  284.    }
  285.  
  286.    protected final synchronized void readLock() {
  287.       try {
  288.          while(this.currWriter != null) {
  289.             this.wait();
  290.          }
  291.  
  292.          ++this.numReaders;
  293.       } catch (InterruptedException var1) {
  294.       }
  295.    }
  296.  
  297.    protected final synchronized void readUnlock() {
  298.       if (this.numReaders <= 0) {
  299.          throw new StateInvariantError("document lock failure");
  300.       } else {
  301.          --this.numReaders;
  302.          this.notify();
  303.       }
  304.    }
  305.  
  306.    private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
  307.       var1.defaultReadObject();
  308.       this.listenerList = new EventListenerList();
  309.    }
  310.  
  311.    // $FF: synthetic method
  312.    static Class class$(String var0) {
  313.       try {
  314.          return Class.forName(var0);
  315.       } catch (ClassNotFoundException var2) {
  316.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  317.       }
  318.    }
  319. }
  320.