/* * File : ProjectInstallerDlg.java * Created : 04-jun-2002 09:55 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ package edu.xtec.jclic.project; import edu.xtec.jclic.activities.panels.*; import edu.xtec.jclic.edit.EditorTreePanel; import edu.xtec.jclic.fileSystem.FileBackup; import edu.xtec.jclic.fileSystem.FileSystem; import edu.xtec.jclic.misc.Gradient; import edu.xtec.util.*; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.io.*; import java.util.ArrayList; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.08.08 */ public class ProjectInstallerDlg extends ExtendedJDialog implements ProgressInputStream.ProgressInputStreamListener, ListSelectionListener { public ProjectLibrary result; public boolean cancel; public boolean launchNow; public String pathToMainProject; Messages msg; LibraryManager lm; FileSystem storeFileSystem; ProjectInstaller pi; ProjectLibrary pl; LibraryManager.LibraryPane libraryPane; EditorTreePanel etp; File installDir; Options options; boolean workerRunning; edu.xtec.util.SwingWorker worker; boolean copyComplete; private Font titleFont, mainFont, itemFont; private Image logo; private Gradient logoGp; private int currentStage=0; private static final int STAGE_INFO=0, STAGE_SELECT_LIB=1, STAGE_COPY_FILES=2, STAGE_SELECT_FOLDER=3, STAGE_END=4, NUM_STAGES=5; private static final String[] STAGE_TITLES=new String[]{ "install_title", "install_step_1", "install_step_2", "install_step_3", "install_step_4", }; private static final String LOGO="icons/install.png"; /** Creates new form ProjectInstallerDlg */ private ProjectInstallerDlg(Component parent, LibraryManager lm, ProjectInstaller pi) throws Exception { super(parent, null, true); this.lm=lm; options=lm.settings.rb.getOptions(); msg=options.getMessages(); setTitle(msg.get("install_title")); result=null; launchNow=true; pathToMainProject=null; cancel=false; titleFont=new Font("Dialog", Font.BOLD, 18); mainFont=new Font("Dialog", Font.BOLD, 12); itemFont=new Font("Dialog", 0, 12); this.pi=pi; if(pi.from==null) throw new Exception("Path to installer data store not specified!"); storeFileSystem=FileSystem.createFileSystem(pi.from, null, lm.settings.rb); logo=ResourceManager.getImageIcon(LOGO).getImage(); logoGp=new Gradient(Color.white, Color.blue, 90, 1); initComponents(); centerOver(parent); getRootPane().setDefaultButton(nextBtn); } public static ProjectInstallerDlg getProjectInstallerDlg(Component parent, LibraryManager lm, String installerScriptFile) throws Exception{ return new ProjectInstallerDlg(parent, lm, ProjectInstaller.getProjectInstaller(installerScriptFile)); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents javax.swing.JTextArea authorLb; javax.swing.JPanel basicPane; javax.swing.JPanel btPane; javax.swing.JLabel destLbHeader; javax.swing.JLabel finishLb; javax.swing.JLabel finishLb2; javax.swing.JLabel finishLb3; java.awt.GridBagConstraints gridBagConstraints; javax.swing.JLabel infoTitleLb; javax.swing.JLabel libFolderLb; javax.swing.JLabel libLb; javax.swing.JLabel sourceLb; javax.swing.JLabel sourceLbHeader; javax.swing.JLabel sourcePathLb; javax.swing.JLabel sourcePathLbHeader; javax.swing.JLabel statusLbHeader; javax.swing.JTextArea titleLb2; javax.swing.JLabel wizardInfoLb; btPane = new javax.swing.JPanel(); cancelBtn = new javax.swing.JButton(); prevBtn = new javax.swing.JButton(); nextBtn = new javax.swing.JButton(); basicPane = new javax.swing.JPanel(); mainPane = new javax.swing.JPanel(); card00 = new javax.swing.JPanel(); infoTitleLb = new javax.swing.JLabel(); titleLb2 = new javax.swing.JTextArea(); authorLb = new javax.swing.JTextArea(); sourceLbHeader = new javax.swing.JLabel(); sourceLb = new javax.swing.JLabel(); wizardInfoLb = new javax.swing.JLabel(); card01 = new javax.swing.JPanel(); libLb = new javax.swing.JLabel(); selectLibPanel = lm.getLibraryPane(true, true); libraryPane=(LibraryManager.LibraryPane)selectLibPanel; libraryPane.addListSelectionListener(this); card02 = new javax.swing.JPanel(); sourcePathLbHeader = new javax.swing.JLabel(); sourcePathLb = new javax.swing.JLabel(); destLbHeader = new javax.swing.JLabel(); destLb = new javax.swing.JLabel(); statusLbHeader = new javax.swing.JLabel(); statusLb = new javax.swing.JLabel(); itemProgressBar = new javax.swing.JProgressBar(); card03 = new javax.swing.JPanel(); libFolderLb = new javax.swing.JLabel(); libFolderPanel = new javax.swing.JPanel(); card04 = new javax.swing.JPanel(); finishLb = new javax.swing.JLabel(); finishLb2 = new javax.swing.JLabel(); finishLb3 = new javax.swing.JLabel(); launchProjectChk = new javax.swing.JCheckBox(); cardTitleLb = new javax.swing.JLabel(); logoPanel = new javax.swing.JPanel(){ public void paintComponent(Graphics g){ Rectangle r=new Rectangle(0, 0, getBounds().width, getBounds().height); if(logoGp!=null) logoGp.paint((Graphics2D)g, r); if(logo!=null){ int x=(r.width-logo.getWidth(this))/2; int y=(r.height-logo.getHeight(this))/2; g.drawImage(logo, x, y, this); } } }; addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); btPane.setLayout(new java.awt.GridBagLayout()); cancelBtn.setToolTipText(msg.get("wizard_cancel_tooltip")); cancelBtn.setText(msg.get("wizard_cancel")); cancelBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelBtnActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); btPane.add(cancelBtn, gridBagConstraints); prevBtn.setToolTipText(msg.get("wizard_prev_tooltip")); prevBtn.setText(msg.get("wizard_prev")); prevBtn.setEnabled(false); prevBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { prevBtnActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); btPane.add(prevBtn, gridBagConstraints); nextBtn.setToolTipText(msg.get("wizard_next_tooltip")); nextBtn.setText(msg.get("wizard_next")); nextBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nextBtnActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); btPane.add(nextBtn, gridBagConstraints); getContentPane().add(btPane, java.awt.BorderLayout.SOUTH); basicPane.setLayout(new java.awt.BorderLayout()); basicPane.setPreferredSize(new java.awt.Dimension(500, 300)); mainPane.setLayout(new java.awt.CardLayout()); mainPane.setBackground(new java.awt.Color(255, 255, 204)); card00.setLayout(new java.awt.GridBagLayout()); card00.setOpaque(false); infoTitleLb.setFont(mainFont); infoTitleLb.setText(msg.get("install_info_info")); infoTitleLb.setPreferredSize(new java.awt.Dimension(300, 17)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card00.add(infoTitleLb, gridBagConstraints); titleLb2.setEditable(false); titleLb2.setFont(mainFont); titleLb2.setLineWrap(true); titleLb2.setText("\""+pi.projectTitle+"\""); titleLb2.setWrapStyleWord(true); titleLb2.setOpaque(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 0, 3); card00.add(titleLb2, gridBagConstraints); authorLb.setEditable(false); authorLb.setFont(itemFont); authorLb.setLineWrap(true); authorLb.setText(pi.authors!=null ? pi.authors : ""); authorLb.setWrapStyleWord(true); authorLb.setOpaque(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 3); card00.add(authorLb, gridBagConstraints); sourceLbHeader.setText(msg.get("install_info_from")); sourceLbHeader.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST; gridBagConstraints.insets = new java.awt.Insets(12, 3, 3, 3); card00.add(sourceLbHeader, gridBagConstraints); sourceLb.setText(storeFileSystem.getFullRoot()); sourceLb.setFont(itemFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST; gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 3); card00.add(sourceLb, gridBagConstraints); wizardInfoLb.setText(msg.get("wizard_info")); wizardInfoLb.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(12, 3, 3, 3); card00.add(wizardInfoLb, gridBagConstraints); mainPane.add(card00, "card00"); card01.setLayout(new java.awt.GridBagLayout()); card01.setOpaque(false); libLb.setText(msg.get("install_select_library")); libLb.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card01.add(libLb, gridBagConstraints); selectLibPanel.setBorder(new javax.swing.border.TitledBorder(msg.get("library_caption"))); selectLibPanel.setPreferredSize(new java.awt.Dimension(300, 200)); selectLibPanel.setOpaque(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card01.add(selectLibPanel, gridBagConstraints); mainPane.add(card01, "card01"); card02.setLayout(new java.awt.GridBagLayout()); card02.setPreferredSize(new java.awt.Dimension(400, 300)); card02.setOpaque(false); sourcePathLbHeader.setText(msg.get("install_source")); sourcePathLbHeader.setFont(mainFont); sourcePathLbHeader.setLabelFor(sourcePathLb); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card02.add(sourcePathLbHeader, gridBagConstraints); sourcePathLb.setText(storeFileSystem.getFullRoot()); sourcePathLb.setFont(itemFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card02.add(sourcePathLb, gridBagConstraints); destLbHeader.setText(msg.get("install_dest")); destLbHeader.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card02.add(destLbHeader, gridBagConstraints); destLb.setText(pi.baseFolder); destLb.setFont(itemFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card02.add(destLb, gridBagConstraints); statusLbHeader.setText(msg.get("install_status")); statusLbHeader.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(6, 3, 6, 3); card02.add(statusLbHeader, gridBagConstraints); statusLb.setText(msg.get("install_msg_waiting")); statusLb.setFont(itemFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(6, 3, 6, 3); card02.add(statusLb, gridBagConstraints); itemProgressBar.setToolTipText(msg.get("install_progress_tooltip")); itemProgressBar.setStringPainted(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card02.add(itemProgressBar, gridBagConstraints); mainPane.add(card02, "card02"); card03.setLayout(new java.awt.GridBagLayout()); card03.setOpaque(false); libFolderLb.setText(msg.get("install_select_folder")); libFolderLb.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card03.add(libFolderLb, gridBagConstraints); libFolderPanel.setLayout(new java.awt.BorderLayout()); libFolderPanel.setBorder(new javax.swing.border.TitledBorder(msg.get("install_library_folders"))); libFolderPanel.setPreferredSize(new java.awt.Dimension(300, 200)); libFolderPanel.setOpaque(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); card03.add(libFolderPanel, gridBagConstraints); mainPane.add(card03, "card03"); card04.setLayout(new java.awt.GridBagLayout()); card04.setOpaque(false); finishLb.setText(msg.get("install_success_1")); finishLb.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 13, 3); card04.add(finishLb, gridBagConstraints); finishLb2.setText(msg.get("install_success_2")); finishLb2.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 0, 3); card04.add(finishLb2, gridBagConstraints); finishLb3.setText(msg.get("install_success_3")); finishLb3.setFont(mainFont); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 3); card04.add(finishLb3, gridBagConstraints); launchProjectChk.setSelected(true); launchProjectChk.setText(msg.get("install_launchProject")); launchProjectChk.setOpaque(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(13, 3, 3, 3); card04.add(launchProjectChk, gridBagConstraints); mainPane.add(card04, "card04"); basicPane.add(mainPane, java.awt.BorderLayout.CENTER); cardTitleLb.setText(msg.get("install_title")); cardTitleLb.setForeground(new java.awt.Color(255, 255, 255)); cardTitleLb.setBackground(new java.awt.Color(255, 153, 51)); cardTitleLb.setFont(new java.awt.Font("SansSerif", 1, 18)); cardTitleLb.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 10, 5, 10))); cardTitleLb.setOpaque(true); basicPane.add(cardTitleLb, java.awt.BorderLayout.NORTH); getContentPane().add(basicPane, java.awt.BorderLayout.CENTER); logoPanel.setPreferredSize(new java.awt.Dimension(75, 230)); getContentPane().add(logoPanel, java.awt.BorderLayout.WEST); pack(); }//GEN-END:initComponents private void nextBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextBtnActionPerformed if(currentStage==STAGE_COPY_FILES && !copyComplete){ //copyFiles(); // do nothing } else goToStage(currentStage+1); }//GEN-LAST:event_nextBtnActionPerformed private void goToStage(int stage){ if(stage>=0 && stage<=NUM_STAGES){ boolean bNext=false, bPrev=false, bCancel=false; currentStage=stage; switch(currentStage){ case STAGE_INFO: bNext=true; bPrev=false; bCancel=true; break; case STAGE_SELECT_LIB: bNext=(libraryPane.getCurrentSelected()!=null); bPrev=true; bCancel=true; break; case STAGE_COPY_FILES: initCopyStage(); //prev=true; next=true; cancel=true; copyFiles(); bPrev=false; bNext=false; bCancel=true; break; case STAGE_SELECT_FOLDER: bNext=(etp!=null && etp.currentItem!=null && etp.currentItem instanceof MenuEditor); bPrev=false; bCancel=true; break; case STAGE_END: initEndStage(); bNext=true; bPrev=false; bCancel=false; break; case NUM_STAGES: result=pl; launchNow=launchProjectChk.isSelected(); closeDialog(null); return; } StringBuilder nbs=new StringBuilder("wizard_").append(currentStage<NUM_STAGES-1 ? "next" : "finish"); nextBtn.setText(msg.get(nbs.substring(0))); nextBtn.setToolTipText(msg.get(nbs.append("_tooltip").substring(0))); nextBtn.setEnabled(bNext); prevBtn.setEnabled(bPrev); cancelBtn.setEnabled(bCancel); if(currentStage<NUM_STAGES){ java.awt.CardLayout cl=(java.awt.CardLayout)mainPane.getLayout(); String s=Integer.toString(stage); if(s.length()==1) s="0"+s; cl.show(mainPane, "card"+s); cardTitleLb.setText(msg.get(STAGE_TITLES[stage])); } } } private void initCopyStage(){ LibraryManagerElement lme=libraryPane.getCurrentSelected(); if(pl==null || !pl.getFullPath().equals(lme.path)){ try{ pl=ProjectLibrary.loadProjectLibrary(lme.path, lm.settings.rb); if(etp!=null) libFolderPanel.remove(etp); etp=new EditorTreePanel(pl.getEditor(null), options, true, Menu.class){ @Override protected void currentItemChanged(){ if(currentStage==STAGE_SELECT_FOLDER){ nextBtn.setEnabled(currentItem!=null && currentItem instanceof MenuEditor); } super.currentItemChanged(); } }; etp.getTree().setSelectionRow(1); libFolderPanel.add(etp, BorderLayout.CENTER); card03.revalidate(); File root=new File(pl.getFileSystem().getFullRoot()); installDir=new File(root, pi.baseFolder); destLb.setText(installDir.getAbsolutePath()); } catch(Exception ex){ msg.showErrorWarning(this, "library_error_reading", ex); closeDialog(null); } } } private void initEndStage(){ try{ Menu menu=((MenuEditor)etp.currentItem).getMenu(); for(int i=0; i<pi.iconItems.size() && !cancel; i++){ ProjectInstaller.IconItem ii=(ProjectInstaller.IconItem)pi.iconItems.get(i); MenuElement me=new MenuElement(); me.caption=ii.text; me.projectPath=pi.baseFolder+File.separator+ii.project; if(ii.icon!=null){ if(!ii.icon.startsWith("@")) me.icon=pi.baseFolder+File.separator+ii.icon; else me.icon=ii.icon; } else me.icon=MenuElement.DEFAULT_ICON; if(ii.description!=null){ me.description=ii.description; } menu.addMenuElement(me); if(pathToMainProject==null) pathToMainProject=pl.getFileSystem().getFullFileNamePath(me.projectPath); } pl.activityBag.addActivity(menu); pl.save(null); launchProjectChk.setEnabled(pathToMainProject!=null); } catch(Exception ex){ msg.showErrorWarning(this, "library_error_creating_icons", ex); closeDialog(null); } } private void prevBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prevBtnActionPerformed goToStage(currentStage-1); }//GEN-LAST:event_prevBtnActionPerformed public void valueChanged(ListSelectionEvent ev){ if(ev!=null && !ev.getValueIsAdjusting() && currentStage==STAGE_SELECT_LIB) nextBtn.setEnabled(libraryPane.getCurrentSelected()!=null); } private void copyFiles(){ final String PAUSED="PAUSED", ERR="ERROR", OK="OK", CANCEL="CANCEL"; final ProjectInstallerDlg cmp=ProjectInstallerDlg.this; // fer backup dels fitxers prevBtn.setEnabled(false); nextBtn.setEnabled(false); statusLb.setText(msg.get("install_msg_waiting")); worker=new edu.xtec.util.SwingWorker(){ @Override public Object construct(){ workerRunning=true; ArrayList<FileBackup> fileBackups=new ArrayList<FileBackup>(); Exception ex=null; String srcFolder=FileSystem.stdFn(storeFileSystem.getFullFileNamePath(null)); String destFolder=FileSystem.stdFn(installDir.getAbsolutePath()); if(srcFolder.equalsIgnoreCase(destFolder)){ itemProgressBar.setValue(itemProgressBar.getMaximum()); statusLb.setText(msg.get("install_toSourceFolder")); } else{ try{ if(msg.confirmOverwriteFile(cmp, installDir, "yn")!=Messages.YES) return PAUSED; boolean overwriteAll=false; boolean overwriteNone=false; for(int i=0; i<pi.files.size() && !cancel; i++){ String file=pi.getFile(i).replace('/', File.separatorChar); File f=new File(installDir, file); statusLb.setText(msg.get("install_msg_copying")+" "+file); if(f.exists()){ if(overwriteNone) continue; if(!overwriteAll){ boolean next=false; switch(msg.confirmOverwriteFile(cmp, f, "yYnNc")){ case Messages.YES_TO_ALL: overwriteAll=true; case Messages.YES: break; case Messages.NO_TO_ALL: overwriteNone=true; case Messages.NO: next=true; break; default: cancel=true; break; } if(next) continue; if(cancel) break; } } //if(msg.confirmOverwriteFile(cmp, f, "yn")!=Messages.YES) // continue; InputStream is=storeFileSystem.getInputStream(pi.getFile(i)); ProgressInputStream pis; if(is instanceof ProgressInputStream) pis=(ProgressInputStream)is; else{ pis=new ProgressInputStream(is, -1, file); } pis.addProgressInputStreamListener(cmp); fileBackups.add(new FileBackup(f)); StreamIO.writeStreamTo(pis, new FileOutputStream(f)); // only for debug //cancel=!msg.showQuestionDlg(cmp, "CONFIRM", "CONFIRM"); } } catch(Exception e){ ex=e; } if(!fileBackups.isEmpty()){ statusLb.setText(msg.get("install_msg_cleanup")); for(int i=fileBackups.size()-1; i>=0; i--){ FileBackup fb=(FileBackup)fileBackups.get(i); if(cancel || ex!=null){ try{ fb.rollback(); } catch(Exception e){ msg.showErrorWarning(cmp, "FILE_ERR_RESTORING", fb.getFile().getAbsolutePath(), e, null); } } else{ try{ fb.cleanup(); } catch(Exception e){ msg.showErrorWarning(cmp, "FILE_ERR_DELETING", fb.getBackup().getAbsolutePath(), e, null); } } } } } statusLb.setText(msg.get("install_msg_end")); if(ex!=null) return ex; return cancel ? CANCEL : OK; } @Override public void finished(){ Object result=get(); workerRunning=false; worker=null; if(result!=null){ if(cancel){ msg.showAlert(cmp, "install_msg_cancel"); closeDialog(null); } else if(result instanceof Exception){ msg.showErrorWarning(cmp, "install_error", (Exception)result); closeDialog(null); } else if(result.equals(PAUSED)){ statusLb.setText(msg.get("install_msg_waiting")); prevBtn.setEnabled(true); nextBtn.setEnabled(true); } else if(result.equals(OK)){ nextBtn.setEnabled(true); copyComplete=true; nextBtnActionPerformed(null); } } } }; worker.start(); } private void cancelBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelBtnActionPerformed cancel=true; StreamIO.setCancel(true); if(!workerRunning){ msg.showAlert(this, "install_msg_cancel"); closeDialog(null); } else{ worker.interrupt(); } }//GEN-LAST:event_cancelBtnActionPerformed /** Closes the dialog */ private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog setVisible(false); dispose(); }//GEN-LAST:event_closeDialog public void setProgressMax(int max){ itemProgressBar.setMaximum(max); } public void setProgressValue(int value){ itemProgressBar.setValue(value); } public void startProgress(String name){ itemProgressBar.setValue(0); } public void endProgress(){ } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelBtn; private javax.swing.JPanel card00; private javax.swing.JPanel card01; private javax.swing.JPanel card02; private javax.swing.JPanel card03; private javax.swing.JPanel card04; private javax.swing.JLabel cardTitleLb; private javax.swing.JLabel destLb; private javax.swing.JProgressBar itemProgressBar; private javax.swing.JCheckBox launchProjectChk; private javax.swing.JPanel libFolderPanel; private javax.swing.JPanel logoPanel; private javax.swing.JPanel mainPane; private javax.swing.JButton nextBtn; private javax.swing.JButton prevBtn; private javax.swing.JPanel selectLibPanel; private javax.swing.JLabel statusLb; // End of variables declaration//GEN-END:variables }