/** Creates order for given folder object. * @param f the folder * @return the order */ public static FolderOrder findFor (FileObject folder) { FolderOrder order = null; synchronized (map) { Reference ref = (Reference)map.get (folder); order = ref == null ? null : (FolderOrder)ref.get (); if (order == null) { order = new FolderOrder (folder); order.previous = knownOrders.get(folder); order.doRead(order.previous); map.put (folder, new SoftReference (order)); } } // always reread the order from disk, so it is uptodate synchronized (order) { order.read (); return order; } }
/** Reads the order from disk. */ private void read () { Object o = folder.getAttribute (DataFolder.EA_ORDER); if ((previous == null && o == null) || (previous != null && previous.equals (o))) { // no change in order return; } if ((o instanceof Object[]) && (previous instanceof Object[])) { if (compare((Object[]) o, (Object[]) previous)) { return; } } doRead (o); previous = o; if (previous != null) { knownOrders.put(folder, previous); } FolderList.changedFolderOrder (folder); }