Changeset 22831

Show
Ignore:
Timestamp:
01.09.2010 16:20:27 (9 years ago)
Author:
ak19
Message:

For ticket 152 (moveable collectdir): busy cursor when changing a collectdir takes some time to finish.

Location:
main/trunk/gli/src/org/greenstone/gatherer
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/gli/src/org/greenstone/gatherer/Gatherer.java

    r22806 r22831  
    821821 
    822822 
    823     public static void collectDirectoryHasChanged(String oldCollectPath, String newCollectPath) {  
    824     if(oldCollectPath.equals(newCollectPath)) { 
    825         return; // nothing to be done 
    826     } 
    827  
    828     // first save any open collection in the old location, then close it 
    829     if(Gatherer.c_man.getCollection() != null) { 
    830         Gatherer.g_man.saveThenCloseCurrentCollection(); // close the current collection first 
    831     } 
    832      
    833     // change to new collect path 
    834     Configuration.setString("general.open_collection"+Configuration.gliPropertyNameSuffix(),  
    835                 true, newCollectPath); 
    836     Gatherer.setCollectDirectoryPath(newCollectPath); 
    837      
    838  
    839     // refresh the Documents in Greenstone Collections 
    840     //WorkspaceTreeModel.refreshGreenstoneCollectionsNode(); 
    841     Gatherer.g_man.refreshWorkspaceTreeGreenstoneCollections(); 
    842      
    843     // The web server needs to be told where a new (non-standard) collecthome home is. 
    844     // The web server reads collecthome from cgi-bin/gsdlsite.cfg, where the property 
    845     // collecthome can be specified if a non-standard collecthome is to be used. If no  
    846     // such property is specified in the file, then it assumes the standard GS collecthome. 
    847     // This method does nothing for a remote Greenstone.     
    848     if(Gatherer.isGsdlRemote) { 
    849         return; 
    850     }    
    851  
    852     String gsdlsitecfg = ""; 
    853     if(Gatherer.GS3) { // web/WEB-INF/cgi/gsdl3site.cfg 
    854         gsdlsitecfg = Configuration.gsdl3_path + File.separator + "WEB-INF"  
    855             + File.separator + "cgi" + File.separator + "gsdl3site.cfg"; 
    856     } else { // cgi-bin/gsdlsite.cfg 
    857         gsdlsitecfg = Configuration.gsdl_path + File.separator  
    858             + "cgi-bin" + File.separator + "gsdlsite.cfg"; 
    859     } 
    860  
    861     // non-destructive update of gsdl(3)site.cfg (comments preserved) 
    862     String collectDir = Gatherer.getCollectDirectoryPath(); 
    863     //collectDir = "\"" + collectDir.substring(0, collectDir.length()-1) + "\""; // remove file separator at end     
    864     collectDir = collectDir.substring(0, collectDir.length()-1); // remove file separator at end     
    865     Utility.updatePropertyConfigFile(gsdlsitecfg, "collecthome", collectDir); 
    866  
    867     if(!Gatherer.GS3 && Gatherer.isLocalLibrary) { 
    868         // for Images in the collection to work, the apache web server  
    869         // configuration's COLLECTHOME should be updated on collectdir change.  
    870         // Does nothing for server.exe at the moment 
    871  
    872         LocalLibraryServer.reconfigure(); 
    873     } 
     823    public static void collectDirectoryHasChanged( 
     824        String oldCollectPath, String newCollectPath, final Component container)  
     825    {  
     826        // Will use a busy cursor if the process of changing the collect directory takes more  
     827        // than half a second/500ms. See http://www.catalysoft.com/articles/busyCursor.html 
     828        Cursor originalCursor = container.getCursor(); 
     829        java.util.TimerTask timerTask = new java.util.TimerTask() { 
     830            public void run() { 
     831                // set the cursor on the container: 
     832                container.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 
     833            } 
     834        }; 
     835        java.util.Timer timer = new java.util.Timer();  
     836         
     837        try { 
     838            timer.schedule(timerTask, 500); 
     839         
     840            if(oldCollectPath.equals(newCollectPath)) { 
     841                return; // nothing to be done 
     842            } 
     843 
     844            // first save any open collection in the old location, then close it 
     845            if(Gatherer.c_man.getCollection() != null) { 
     846                Gatherer.g_man.saveThenCloseCurrentCollection(); // close the current collection first 
     847            } 
     848             
     849            // change to new collect path 
     850            Configuration.setString("general.open_collection"+Configuration.gliPropertyNameSuffix(),  
     851                        true, newCollectPath); 
     852            Gatherer.setCollectDirectoryPath(newCollectPath); 
     853             
     854 
     855            // refresh the Documents in Greenstone Collections 
     856            //WorkspaceTreeModel.refreshGreenstoneCollectionsNode(); 
     857            Gatherer.g_man.refreshWorkspaceTreeGreenstoneCollections(); 
     858             
     859            // The web server needs to be told where a new (non-standard) collecthome home is. 
     860            // The web server reads collecthome from cgi-bin/gsdlsite.cfg, where the property 
     861            // collecthome can be specified if a non-standard collecthome is to be used. If no  
     862            // such property is specified in the file, then it assumes the standard GS collecthome. 
     863            // This method does nothing for a remote Greenstone.     
     864            if(Gatherer.isGsdlRemote) { 
     865                return; 
     866            }    
     867 
     868            String gsdlsitecfg = ""; 
     869            if(Gatherer.GS3) { // web/WEB-INF/cgi/gsdl3site.cfg 
     870                gsdlsitecfg = Configuration.gsdl3_path + File.separator + "WEB-INF"  
     871                    + File.separator + "cgi" + File.separator + "gsdl3site.cfg"; 
     872            } else { // cgi-bin/gsdlsite.cfg 
     873                gsdlsitecfg = Configuration.gsdl_path + File.separator  
     874                    + "cgi-bin" + File.separator + "gsdlsite.cfg"; 
     875            } 
     876 
     877            // non-destructive update of gsdl(3)site.cfg (comments preserved) 
     878            String collectDir = Gatherer.getCollectDirectoryPath(); 
     879            //collectDir = "\"" + collectDir.substring(0, collectDir.length()-1) + "\""; // remove file separator at end     
     880            collectDir = collectDir.substring(0, collectDir.length()-1); // remove file separator at end     
     881            Utility.updatePropertyConfigFile(gsdlsitecfg, "collecthome", collectDir); 
     882 
     883            if(!Gatherer.GS3 && Gatherer.isLocalLibrary) { 
     884                // for Images in the collection to work, the apache web server  
     885                // configuration's COLLECTHOME should be updated on collectdir change.  
     886                // Does nothing for server.exe at the moment 
     887 
     888                LocalLibraryServer.reconfigure(); 
     889            } 
     890        } finally { // Note try-finally section without catch: 
     891            // "Java's finally clause is guaranteed to be executed even when 
     892            // an exception is thrown and not caught in the current scope." 
     893            // See http://www.catalysoft.com/articles/busyCursor.html 
     894            // the following code fragment is guaranteed to restore the original 
     895            // cursor now the custom actionPerformed() processing is complete, regardless 
     896            // of whether the processing method terminates normally or throws an exception 
     897            // and regardedless of where in the call stack the exception is caught.          
     898             
     899            timer.cancel(); 
     900            container.setCursor(originalCursor); 
     901        } 
    874902    } 
    875903 
  • main/trunk/gli/src/org/greenstone/gatherer/gui/NewCollectionDetailsPrompt.java

    r22605 r22831  
    541541            } 
    542542        } 
    543         } 
    544  
    545         // going through with collection creation 
    546         if(collectDirChanged) {      
    547         Gatherer.collectDirectoryHasChanged(Gatherer.getCollectDirectoryPath(), newCollectPath);  
    548         // will tell the server that the collect directory has changed and that 
    549         // the workspace needs to be refreshed (Documents in Greenstone Collections) 
    550         } 
    551  
     543        }        
    552544        description_final = description.getText(); 
    553545 
     
    557549         
    558550        cancelled = false; 
     551         
     552        self.dispose(); 
    559553         
    560         self.dispose(); 
     554        // going through with collection creation 
     555        if(collectDirChanged) {      
     556        Gatherer.collectDirectoryHasChanged(Gatherer.getCollectDirectoryPath(),  
     557                newCollectPath, Gatherer.g_man.getContentPane());  
     558        // will tell the server that the collect directory has changed and that 
     559        // the workspace needs to be refreshed (Documents in Greenstone Collections) 
     560        } 
    561561    } 
    562562    } 
  • main/trunk/gli/src/org/greenstone/gatherer/gui/OpenCollectionDialog.java

    r22605 r22831  
    424424        } 
    425425 
    426         Gatherer.collectDirectoryHasChanged(Gatherer.getCollectDirectoryPath(), newCollectPath);  
     426        Gatherer.collectDirectoryHasChanged(Gatherer.getCollectDirectoryPath(),  
     427                newCollectPath, Gatherer.g_man.getContentPane());  
    427428            // will tell the server that the collect directory has changed and that 
    428         // the workspace needs to be refreshed (Documents in Greenstone Collections) 
     429            // the workspace needs to be refreshed (Documents in Greenstone Collections) 
    429430    } 
    430431    } 
  • main/trunk/gli/src/org/greenstone/gatherer/gui/Preferences.java

    r22605 r22831  
    863863        Configuration.setSiteAndServlet(new_site, (String)servlet_combobox.getSelectedItem()); 
    864864        } 
    865  
    866         // collect directory change 
    867         String newCollectPath = collect_dir_field.getText(); 
    868         if(!newCollectPath.endsWith(File.separator)) { 
    869         newCollectPath += File.separator; 
    870         } 
    871         Gatherer.collectDirectoryHasChanged(Gatherer.getCollectDirectoryPath(), newCollectPath); 
    872         // will tell the server that the collect directory has changed and that 
    873         // the workspace needs to be refreshed (Documents in Greenstone Collections) 
    874  
    875         
     865         
    876866        Configuration.set("general.use_proxy", true, use_proxy_checkbox.isSelected()); 
    877867        Configuration.setString("general.proxy_host", true, proxy_host_field.getText()); 
     
    984974        } 
    985975 
     976        // collect directory change 
     977        String newCollectPath = collect_dir_field.getText(); 
     978        if(!newCollectPath.endsWith(File.separator)) { 
     979        newCollectPath += File.separator; 
     980        } 
     981        // wait cursor will display while changing the collect directory, need to work out what component to 
     982        // display it on: main GLI frame or Preferences window, depending on if OK or Apply was pressed 
     983        Container container = close ? Gatherer.g_man.getContentPane() : Preferences.this.getContentPane(); 
     984        Gatherer.collectDirectoryHasChanged(Gatherer.getCollectDirectoryPath(),  
     985                newCollectPath, container); 
     986            // will tell the server that the collect directory has changed and that 
     987            // the workspace needs to be refreshed (Documents in Greenstone Collections)        
     988         
    986989        if (restart_required) { 
    987990          if (keep_collection_open) {