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

  1. package com.sun.java.swing.preview;
  2.  
  3. import com.sun.java.swing.ListModel;
  4. import com.sun.java.swing.event.EventListenerList;
  5. import com.sun.java.swing.event.ListDataEvent;
  6. import com.sun.java.swing.event.ListDataListener;
  7. import java.beans.PropertyChangeListener;
  8. import java.beans.PropertyChangeSupport;
  9. import java.io.File;
  10. import java.util.Enumeration;
  11. import java.util.Vector;
  12.  
  13. public class DirectoryModel implements ListModel {
  14.    protected transient Vector currentFiles;
  15.    protected transient boolean currentFilesFresh;
  16.    protected Vector knownTypes;
  17.    protected FileType shownType;
  18.    protected FileType hiddenRule;
  19.    protected FileType[] overrideTypes;
  20.    protected FileType[] cleanupTypes;
  21.    protected File curDir;
  22.    protected boolean haveCheckedWindows;
  23.    protected boolean isWindows;
  24.    protected EventListenerList listenerList;
  25.    protected PropertyChangeSupport changeSupport;
  26.    // $FF: synthetic field
  27.    static Class class$com$sun$java$swing$event$ListDataListener;
  28.  
  29.    public DirectoryModel() {
  30.       this((File)null);
  31.    }
  32.  
  33.    public DirectoryModel(File var1) {
  34.       this.currentFiles = new Vector();
  35.       this.currentFilesFresh = false;
  36.       this.knownTypes = new Vector();
  37.       this.cleanupTypes = new FileType[]{FileType.SharedFolder, FileType.SharedGenericFile};
  38.       this.haveCheckedWindows = false;
  39.       this.listenerList = new EventListenerList();
  40.       this.setCurrentDirectory(var1);
  41.       if (this.isWindowsFileSystem()) {
  42.          this.overrideTypes = new FileType[2];
  43.          this.overrideTypes[0] = FileType.SharedFloppyDrive;
  44.          this.overrideTypes[1] = FileType.SharedHardDrive;
  45.       }
  46.  
  47.    }
  48.  
  49.    protected File makeAbsolute(File var1) {
  50.       File var2 = this.curDir;
  51.       if (!((File)var1).isAbsolute()) {
  52.          if (var2 == null) {
  53.             var1 = var1 instanceof TypedFile ? new TypedFile(((File)var1).getAbsolutePath(), ((TypedFile)var1).getType()) : new File(((File)var1).getAbsolutePath());
  54.          } else {
  55.             var1 = var1 instanceof TypedFile ? new TypedFile(var2.getPath(), ((File)var1).getPath(), ((TypedFile)var1).getType()) : new File(var2.getPath(), ((File)var1).getPath());
  56.          }
  57.       }
  58.  
  59.       return (File)var1;
  60.    }
  61.  
  62.    public File getCurrentDirectory() {
  63.       return this.curDir;
  64.    }
  65.  
  66.    public void setCurrentDirectory(File var1) {
  67.       if (var1 == null) {
  68.          var1 = new File(System.getProperty("user.home"));
  69.       }
  70.  
  71.       var1 = this.makeAbsolute(var1);
  72.       if (this.curDir == null || !this.curDir.equals(var1)) {
  73.          this.invalidateCache();
  74.          File var2 = this.curDir;
  75.          this.curDir = var1;
  76.          this.firePropertyChange("currentDirectory", var2, var1);
  77.          this.fireContentsChanged();
  78.       }
  79.  
  80.    }
  81.  
  82.    protected void invalidateCache() {
  83.       this.currentFilesFresh = false;
  84.    }
  85.  
  86.    public TypedFile getTypedFile(String var1, String var2) {
  87.       TypedFile var3 = new TypedFile(var1, var2);
  88.       this.deduceAndSetTypeOfFile(var3);
  89.       return var3;
  90.    }
  91.  
  92.    public TypedFile getTypedFile(String var1) {
  93.       TypedFile var2 = new TypedFile(var1);
  94.       this.deduceAndSetTypeOfFile(var2);
  95.       return var2;
  96.    }
  97.  
  98.    public Vector getTypedFiles() {
  99.       return this.getTypedFilesForDirectory(this.getCurrentDirectory());
  100.    }
  101.  
  102.    public Vector getTypedFilesForDirectory(File var1) {
  103.       boolean var2 = var1.equals(this.getCurrentDirectory());
  104.       if (var2 && this.currentFilesFresh) {
  105.          return this.currentFiles;
  106.       } else {
  107.          Vector var3;
  108.          if (var2) {
  109.             var3 = this.currentFiles;
  110.             var3.removeAllElements();
  111.          } else {
  112.             var3 = new Vector();
  113.          }
  114.  
  115.          String[] var4 = var1.list();
  116.          int var5 = var4 == null ? 0 : var4.length;
  117.  
  118.          for(int var6 = 0; var6 < var5; ++var6) {
  119.             TypedFile var7;
  120.             if (var1 instanceof WindowsRootDir) {
  121.                var7 = this.getTypedFile(var4[var6]);
  122.             } else {
  123.                var7 = this.getTypedFile(var1.getPath(), var4[var6]);
  124.             }
  125.  
  126.             FileType var8 = var7.getType();
  127.             if ((this.shownType == null || var8.isContainer() || this.shownType == var8) && (this.hiddenRule == null || !this.hiddenRule.testFile(var7))) {
  128.                var3.addElement(var7);
  129.             }
  130.          }
  131.  
  132.          if (!(var1 instanceof WindowsRootDir)) {
  133.             this.sort(var3);
  134.          }
  135.  
  136.          if (var2) {
  137.             this.currentFilesFresh = true;
  138.          }
  139.  
  140.          return var3;
  141.       }
  142.    }
  143.  
  144.    protected boolean applyTypeToFile(FileType var1, TypedFile var2) {
  145.       if (var1.testFile(var2)) {
  146.          var2.setType(var1);
  147.          return true;
  148.       } else {
  149.          return false;
  150.       }
  151.    }
  152.  
  153.    protected void deduceAndSetTypeOfFile(TypedFile var1) {
  154.       boolean var2 = false;
  155.       if (this.overrideTypes != null) {
  156.          int var3 = this.overrideTypes.length;
  157.  
  158.          for(int var4 = 0; var4 < var3 && !var2; ++var4) {
  159.             if (this.applyTypeToFile(this.overrideTypes[var4], var1)) {
  160.                var2 = true;
  161.             }
  162.          }
  163.       }
  164.  
  165.       if (!var2) {
  166.          Enumeration var5 = this.knownTypes.elements();
  167.  
  168.          while(var5.hasMoreElements() && !var2) {
  169.             FileType var7 = (FileType)var5.nextElement();
  170.             if (this.applyTypeToFile(var7, var1)) {
  171.                var2 = true;
  172.             }
  173.          }
  174.       }
  175.  
  176.       if (!var2 && this.cleanupTypes != null) {
  177.          int var6 = this.cleanupTypes.length;
  178.  
  179.          for(int var8 = 0; var8 < var6 && !var2; ++var8) {
  180.             if (this.applyTypeToFile(this.cleanupTypes[var8], var1)) {
  181.                var2 = true;
  182.             }
  183.          }
  184.       }
  185.  
  186.       var1.getType();
  187.    }
  188.  
  189.    public boolean canGoUp() {
  190.       File var1 = this.getCurrentDirectory();
  191.       return var1.getParent() != null || !this.isWindowsFileSystem();
  192.    }
  193.  
  194.    public void goUp() {
  195.       File var1 = this.getCurrentDirectory();
  196.       String var2 = var1.getParent();
  197.       File var3 = var2 == null ? null : new File(var2);
  198.       if (var3 != null) {
  199.          this.setCurrentDirectory(var3);
  200.       }
  201.  
  202.    }
  203.  
  204.    public void setHiddenRule(FileType var1) {
  205.       if (var1 != this.hiddenRule) {
  206.          FileType var2 = this.hiddenRule;
  207.          this.hiddenRule = var1;
  208.          this.invalidateCache();
  209.          this.firePropertyChange("hiddenRule", var2, var1);
  210.          this.fireContentsChanged();
  211.       }
  212.  
  213.    }
  214.  
  215.    public FileType getHiddenRule() {
  216.       return this.hiddenRule;
  217.    }
  218.  
  219.    public FileType getShownType() {
  220.       return this.shownType;
  221.    }
  222.  
  223.    public void setShownType(FileType var1) {
  224.       this.shownType = var1;
  225.       if (var1 != null) {
  226.          this.addKnownFileType(var1);
  227.       }
  228.  
  229.       this.invalidateCache();
  230.       this.firePropertyChange("shownType", (Object)null, (Object)null);
  231.       this.fireContentsChanged();
  232.    }
  233.  
  234.    public void addKnownFileType(FileType var1) {
  235.       if (var1 == null) {
  236.          throw new IllegalArgumentException("cannot add null to knownTypes");
  237.       } else {
  238.          if (!this.knownTypes.contains(var1)) {
  239.             this.knownTypes.addElement(var1);
  240.             this.invalidateCache();
  241.             this.firePropertyChange("knownFileTypes", (Object)null, (Object)null);
  242.             this.fireContentsChanged();
  243.          }
  244.  
  245.       }
  246.    }
  247.  
  248.    public Enumeration enumerateKnownFileTypes() {
  249.       return this.knownTypes.elements();
  250.    }
  251.  
  252.    public Vector getKnownFileTypes() {
  253.       return (Vector)this.knownTypes.clone();
  254.    }
  255.  
  256.    public boolean isKnownFileType(FileType var1) {
  257.       return this.knownTypes.contains(var1);
  258.    }
  259.  
  260.    public void setKnownFileTypes(FileType[] var1) {
  261.       int var2 = var1.length;
  262.       Vector var3 = this.knownTypes = new Vector(var2);
  263.       var3.setSize(var2);
  264.  
  265.       for(int var4 = 0; var4 < var2; ++var4) {
  266.          FileType var5 = var1[var4];
  267.          var3.setElementAt(var5, var4);
  268.       }
  269.  
  270.       this.invalidateCache();
  271.       this.firePropertyChange("knownFileTypes", (Object)null, (Object)null);
  272.       this.fireContentsChanged();
  273.    }
  274.  
  275.    protected void firePropertyChange(String var1, Object var2, Object var3) {
  276.       if (this.changeSupport != null) {
  277.          this.changeSupport.firePropertyChange(var1, var2, var3);
  278.       }
  279.  
  280.    }
  281.  
  282.    public synchronized void addPropertyChangeListener(PropertyChangeListener var1) {
  283.       if (this.changeSupport == null) {
  284.          this.changeSupport = new PropertyChangeSupport(this);
  285.       }
  286.  
  287.       this.changeSupport.addPropertyChangeListener(var1);
  288.    }
  289.  
  290.    public synchronized void removePropertyChangeListener(PropertyChangeListener var1) {
  291.       if (this.changeSupport != null) {
  292.          this.changeSupport.removePropertyChangeListener(var1);
  293.       }
  294.  
  295.    }
  296.  
  297.    protected boolean isWindowsFileSystem() {
  298.       if (!this.haveCheckedWindows) {
  299.          this.isWindows = false;
  300.          if (File.pathSeparator.equals(";") && File.separator.equals("\\")) {
  301.             String var1 = this.getCurrentDirectory().getAbsolutePath();
  302.             if (var1.length() >= 3) {
  303.                char var2 = var1.charAt(0);
  304.                char var3 = var1.charAt(1);
  305.                char var4 = var1.charAt(2);
  306.                this.isWindows = var3 == ':' && var4 == '\\' && (var2 >= 'A' && var2 <= 'Z' || var2 >= 'a' && var2 <= 'z');
  307.             }
  308.          }
  309.  
  310.          this.haveCheckedWindows = true;
  311.       }
  312.  
  313.       return this.isWindows;
  314.    }
  315.  
  316.    protected void sort(Vector var1) {
  317.       this.quickSort(var1, 0, var1.size() - 1);
  318.    }
  319.  
  320.    // $FF: renamed from: lt (com.sun.java.swing.preview.TypedFile, com.sun.java.swing.preview.TypedFile) boolean
  321.    protected boolean method_0(TypedFile var1, TypedFile var2) {
  322.       boolean var3 = var1.getType().isContainer();
  323.       boolean var4 = var2.getType().isContainer();
  324.       if (var3 != var4) {
  325.          return var3;
  326.       } else {
  327.          return ((File)var1).getName().toLowerCase().compareTo(((File)var2).getName().toLowerCase()) < 0;
  328.       }
  329.    }
  330.  
  331.    private void swap(Vector var1, int var2, int var3) {
  332.       Object var4 = var1.elementAt(var2);
  333.       var1.setElementAt(var1.elementAt(var3), var2);
  334.       var1.setElementAt(var4, var3);
  335.    }
  336.  
  337.    protected void quickSort(Vector var1, int var2, int var3) {
  338.       int var4 = var2;
  339.       int var5 = var3;
  340.       if (var3 > var2) {
  341.          TypedFile var6 = (TypedFile)var1.elementAt((var2 + var3) / 2);
  342.  
  343.          while(var4 <= var5) {
  344.             while(var4 < var3 && this.method_0((TypedFile)var1.elementAt(var4), var6)) {
  345.                ++var4;
  346.             }
  347.  
  348.             while(var5 > var2 && this.method_0(var6, (TypedFile)var1.elementAt(var5))) {
  349.                --var5;
  350.             }
  351.  
  352.             if (var4 <= var5) {
  353.                this.swap(var1, var4, var5);
  354.                ++var4;
  355.                --var5;
  356.             }
  357.          }
  358.  
  359.          if (var2 < var5) {
  360.             this.quickSort(var1, var2, var5);
  361.          }
  362.  
  363.          if (var4 < var3) {
  364.             this.quickSort(var1, var4, var3);
  365.          }
  366.       }
  367.  
  368.    }
  369.  
  370.    public int getSize() {
  371.       Vector var1 = this.getTypedFiles();
  372.       return var1.size();
  373.    }
  374.  
  375.    public Object getElementAt(int var1) {
  376.       return this.getTypedFiles().elementAt(var1);
  377.    }
  378.  
  379.    public void addListDataListener(ListDataListener var1) {
  380.       this.listenerList.add(class$com$sun$java$swing$event$ListDataListener != null ? class$com$sun$java$swing$event$ListDataListener : (class$com$sun$java$swing$event$ListDataListener = class$("com.sun.java.swing.event.ListDataListener")), var1);
  381.    }
  382.  
  383.    public void removeListDataListener(ListDataListener var1) {
  384.       this.listenerList.remove(class$com$sun$java$swing$event$ListDataListener != null ? class$com$sun$java$swing$event$ListDataListener : (class$com$sun$java$swing$event$ListDataListener = class$("com.sun.java.swing.event.ListDataListener")), var1);
  385.    }
  386.  
  387.    protected void fireContentsChanged() {
  388.       Object[] var1 = this.listenerList.getListenerList();
  389.       ListDataEvent var2 = null;
  390.  
  391.       for(int var3 = var1.length - 2; var3 >= 0; var3 -= 2) {
  392.          if (var1[var3] == (class$com$sun$java$swing$event$ListDataListener != null ? class$com$sun$java$swing$event$ListDataListener : (class$com$sun$java$swing$event$ListDataListener = class$("com.sun.java.swing.event.ListDataListener")))) {
  393.             if (var2 == null) {
  394.                var2 = new ListDataEvent(this, 0, 0, this.getSize() - 1);
  395.             }
  396.  
  397.             ((ListDataListener)var1[var3 + 1]).contentsChanged(var2);
  398.          }
  399.       }
  400.  
  401.    }
  402.  
  403.    // $FF: synthetic method
  404.    static Class class$(String var0) {
  405.       try {
  406.          return Class.forName(var0);
  407.       } catch (ClassNotFoundException var2) {
  408.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  409.       }
  410.    }
  411. }
  412.