001    /*
002     *  Licensed under the Apache License, Version 2.0 (the "License");
003     *  you may not use this file except in compliance with the License.
004     *  You may obtain a copy of the License at
005     *
006     *      http://www.apache.org/licenses/LICENSE-2.0
007     *
008     *  Unless required by applicable law or agreed to in writing, software
009     *  distributed under the License is distributed on an "AS IS" BASIS,
010     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
011     *  See the License for the specific language governing permissions and
012     *  limitations under the License.
013     */
014    /*
015     * This file has been modified by Chris Pheby in accordance with Section 4.2
016     * of the Apache Software License
017     */
018    package org.jadira.dependencynavigator.implementations.zip;
019    
020    import java.awt.event.MouseAdapter;
021    import java.awt.event.MouseEvent;
022    import java.io.IOException;
023    import java.util.ArrayList;
024    import java.util.Enumeration;
025    import java.util.List;
026    import java.util.zip.ZipEntry;
027    import java.util.zip.ZipException;
028    import java.util.zip.ZipFile;
029    
030    import javax.swing.BoxLayout;
031    import javax.swing.JDialog;
032    import javax.swing.JFrame;
033    import javax.swing.JList;
034    import javax.swing.JScrollPane;
035    
036    import org.jadira.dependencynavigator.implementations.Workspace;
037    import org.jadira.dependencynavigator.implementations.WorkspaceLoader;
038    import org.jadira.dependencynavigator.implementations.zip.ZipFileWorkspace;
039    import org.jadira.dependencynavigator.model.ArtifactInitialisationException;
040    import org.jadira.dependencynavigator.model.RootPom;
041    
042    public class ZipFileWorkspaceLoader implements WorkspaceLoader {
043    
044        private Workspace workspace;
045        private JFrame frame;
046    
047        public void loadPom() {
048            try {
049                String selectedPom = open();
050                if (selectedPom != null) {
051                    zipWorkspace().loadRootPom(selectedPom);
052                }
053            } catch (ZipException e) {
054                e.printStackTrace();
055            } catch (IOException e) {
056                e.printStackTrace();
057            } catch (ArtifactInitialisationException e) {
058                e.printStackTrace();
059            }
060        }
061    
062        public RootPom getRoot() {
063            return workspace.getRoot();
064        }
065    
066        public void reloadPom() throws ArtifactInitialisationException {
067            workspace.reloadPomFile();
068        }
069    
070        private ZipFileWorkspace zipWorkspace() {
071            if (workspace instanceof ZipFileWorkspace) {
072                return (ZipFileWorkspace) workspace;
073            }
074            throw new RuntimeException("Expected workspace of type " + ZipFileWorkspace.class.getName() + " not " + workspace.getClass().getName());
075        }
076    
077        private String open() throws ZipException, IOException {
078            final JDialog d = new JDialog(frame, true);
079            final StringBuffer selectedBuffer = new StringBuffer();
080            d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
081            d.getContentPane().setLayout(new BoxLayout(d.getContentPane(), BoxLayout.PAGE_AXIS));
082    
083            List<String> poms = new ArrayList<String>();
084            ZipFile zipFile = zipWorkspace().getZipFile();
085            Enumeration<? extends ZipEntry> zipFileEntries = zipFile.entries();
086            while (zipFileEntries.hasMoreElements()) {
087                ZipEntry zipEntry = zipFileEntries.nextElement();
088                if (zipEntry.getName().startsWith(ZipFileWorkspace.PREFIX_WORKSPACE)) {
089                    poms.add(zipEntry.getName().substring(ZipFileWorkspace.PREFIX_WORKSPACE.length()));
090                }
091            }
092            JList list = new JList(poms.toArray());
093            list.addMouseListener(new MouseAdapter() {
094    
095                @Override
096                public void mouseClicked(MouseEvent e) {
097                    if (e.getClickCount() > 1) {
098                        JList l = (JList) e.getSource();
099                        selectedBuffer.append((String) l.getSelectedValue());
100                        d.dispose();
101                    }
102                }
103    
104            });
105    
106            d.getContentPane().add(new JScrollPane(list));
107            d.pack();
108            d.setVisible(true);
109            String selectedPom = selectedBuffer.toString().trim();
110            if (selectedPom.length() == 0) {
111                return null;
112            } else {
113                return selectedPom;
114            }
115        }
116    }