Changeset 15107 for gli

Show
Ignore:
Timestamp:
20.03.2008 20:19:09 (12 years ago)
Author:
ak19
Message:

Added Refresh on rightclick AND now allows multiple selected documents to be replaced with GS-generated html versions (works with replace_srcdoc_with_html.pl)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • gli/trunk/src/org/greenstone/gatherer/collection/CollectionTree.java

    r13604 r15107  
    9999        JLabel tree_cell = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 
    100100 
    101         // Mark explodable files with a different icon 
    102         if (value instanceof CollectionTreeNode && ((CollectionTreeNode) value).isExplodable()) { 
    103         tree_cell.setIcon(CollectionTreeNode.GREEN_FILE_ICON); 
    104         } 
    105  
     101        // Mark explodable files and SrcReplaceable files with a different icon (Green file icon) 
     102        if(value instanceof CollectionTreeNode) { 
     103        if(((CollectionTreeNode) value).isExplodable() || ((CollectionTreeNode) value).isSrcReplaceable()) { 
     104            tree_cell.setIcon(CollectionTreeNode.GREEN_FILE_ICON); 
     105        } 
     106        } 
     107             
    106108        return tree_cell; 
    107109    } 
     
    125127    private JMenuItem expand_folder = null; 
    126128    private JMenuItem explode_metadata_database = null; 
     129    private JMenuItem replace_srcdoc_with_html = null; 
    127130    private JMenuItem delete = null; 
    128131    private JMenuItem metaaudit = null; 
    129132    private JMenuItem new_folder = null; 
    130133    private JMenuItem new_dummy_doc = null; 
     134    private JMenuItem refresh = null; // for refreshing folder view 
    131135    private JMenuItem open_externally = null; 
    132136    private JMenuItem rename = null; 
     
    202206    } 
    203207 
     208    /** Checks whether the files selected are of the same filetype (have the same extension). 
     209     * @param selectedFilePaths - the full file paths to the treenodes selected in the  
     210     * collection fileview.  
     211     * @return true if the file extensions of all the selected files are the same. False is  
     212     * returned if the file extension of any selected file is different (this means that if  
     213     * a folder was selected, false would be returned). False is also returned if nothing was 
     214     * selected. 
     215     * For use with replace_srcdoc_with_html.pl 
     216    */ 
     217    private boolean selectedFilesOfSameType(TreePath[] selectedFilePaths) { 
     218        if(selectedFilePaths == null || selectedFilePaths.length <= 0) 
     219        return false; 
     220 
     221        boolean sameExtension = true; 
     222 
     223        // get just the filename from the path and extract its extension 
     224        String firstFile = selectedFilePaths[0].getLastPathComponent().toString(); 
     225        int period = firstFile.lastIndexOf('.'); 
     226        if(period == -1) { // someone could have selected a folder 
     227        return false; 
     228        } 
     229        String extension = firstFile.substring(period); // includes period 
     230 
     231        // compare with the other selected files' extensions: 
     232        for(int i = 1; i < selectedFilePaths.length && sameExtension; i++) { 
     233        String otherFile = selectedFilePaths[i].getLastPathComponent().toString(); 
     234        String otherFileExt = otherFile.substring(otherFile.lastIndexOf('.')); 
     235        if(!extension.equals(otherFileExt))  
     236            sameExtension = false; 
     237        } 
     238        return sameExtension; 
     239    } 
    204240 
    205241    private void buildContextMenu(TreePath[] selection_paths) 
     
    215251        add(new_dummy_doc); 
    216252 
     253        refresh = new JMenuItem(Dictionary.get("CollectionPopupMenu.Refresh")); 
     254        refresh.addActionListener(this); 
     255        add(refresh); 
     256 
    217257        node = (CollectionTreeNode) collection_tree.getModel().getRoot(); 
    218258        return; 
     
    228268        add(delete); 
    229269 
    230         // Only meta-audit and delete are available if multiple items are selected... 
     270        // The src doc replaceable (with html file) option is only available when all files selected are of the 
     271        // same type (same extension). For srcreplaceable files only. Works with replace_srcdoc_with_html.pl 
     272        CollectionTreeNode firstSelectedNode = (CollectionTreeNode)selection_paths[0].getLastPathComponent(); 
     273        if(firstSelectedNode.isSrcReplaceable()) { // test the first selected node 
     274        replace_srcdoc_with_html = new JMenuItem(Dictionary.get("Menu.Replace_SrcDoc_With_HTML"), KeyEvent.VK_H); 
     275        replace_srcdoc_with_html.addActionListener(this);        
     276        add(replace_srcdoc_with_html); 
     277         
     278        // Now the menu is there, grey it out if not all the files are of the same type 
     279        if(!selectedFilesOfSameType(selection_paths)) { 
     280            replace_srcdoc_with_html.setEnabled(false); 
     281        }  
     282        } 
     283        
     284        // Only meta-audit and delete (and possibly replace_srcdoc) are available if multiple items are selected... 
    231285        if (selection_paths.length > 1) { 
    232286        return; 
     
    249303            add(explode_metadata_database); 
    250304        } 
    251  
     305     
    252306        // Replace file 
    253307        // !! TO DO: Remote building 
     
    294348    /** Called whenever one of the menu items is clicked, this method then causes the appropriate effect. */ 
    295349    public void actionPerformed(ActionEvent event) 
    296     { 
    297         Object source = event.getSource(); 
     350    {    
     351        Object source = event.getSource(); 
    298352 
    299353        // Collapse folder 
     
    310364        else if (source == explode_metadata_database) { 
    311365        Gatherer.f_man.explodeMetadataDatabase(node.getFile()); 
     366        } 
     367         
     368        // Replace source document with generated html (works with replace_srcdoc_with_html.pl) 
     369        else if (source == replace_srcdoc_with_html) { 
     370        java.io.File[] source_files = new java.io.File[selection_paths.length]; 
     371        for (int i = 0; i < selection_paths.length; i++) { 
     372            CollectionTreeNode node = (CollectionTreeNode) selection_paths[i].getLastPathComponent();  
     373            source_files[i] = node.getFile(); 
     374        } 
     375        Gatherer.f_man.replaceSrcDocWithHtml(source_files); // passing the selected files 
    312376        } 
    313377 
     
    338402        } 
    339403 
     404        // Refresh action to reload folder view 
     405        else if (source == refresh) { // Refresh collection tree 
     406        Gatherer.g_man.refreshCollectionTree(DragTree.COLLECTION_CONTENTS_CHANGED); 
     407        } 
     408 
    340409        // Open in external program 
    341410        else if (source == open_externally) {