/* * File : ExportToJSDlg.java * Created : 23-nov-2015 16:37 * 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.util.Messages; import edu.xtec.util.Options; import edu.xtec.util.ResourceBridge; import edu.xtec.util.StrUtils; import java.awt.Component; import java.io.File; import javax.swing.JFileChooser; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 23.11.15 */ public class ExportToJSDlg extends javax.swing.JPanel { ResourceBridge rb; Options options; String outputFolder; String scormFile; boolean exportAll = true; boolean exportScorm = true; /** * Creates new form ExportToJSDlg */ public ExportToJSDlg(ResourceBridge rb) { this.rb = rb; options = rb.getOptions(); initComponents(); } /** * 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; exportPanel = new javax.swing.JPanel(); exportLb = new javax.swing.JLabel(); outputFolderLb = new javax.swing.JLabel(); outputFolderText = new javax.swing.JTextField(); outputFolderBtn = new javax.swing.JButton(); javax.swing.JLabel spacer2 = new javax.swing.JLabel(); allPrjChk = new javax.swing.JCheckBox(); spacer = new javax.swing.JLabel(); scormPanel = new javax.swing.JPanel(); exportScormChk = new javax.swing.JCheckBox(); scormFolderLb = new javax.swing.JLabel(); scormFileText = new javax.swing.JTextField(); scormFileBtn = new javax.swing.JButton(); javax.swing.JLabel spacer3 = new javax.swing.JLabel(); setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10)); setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS)); exportPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("HTML5")); exportPanel.setLayout(new java.awt.GridBagLayout()); exportLb.setText(options.getMsg("export_project_desc")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); exportPanel.add(exportLb, gridBagConstraints); outputFolderLb.setLabelFor(outputFolderText); outputFolderLb.setText(options.getMsg("export_project_output_folder")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); exportPanel.add(outputFolderLb, gridBagConstraints); outputFolderText.setToolTipText(options.getMsg("edit_new_project_folder_tooltip")); outputFolderText.setMinimumSize(new java.awt.Dimension(320, 21)); outputFolderText.setPreferredSize(new java.awt.Dimension(320, 21)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); exportPanel.add(outputFolderText, gridBagConstraints); outputFolderBtn.setText(options.getMsg("edit_new_project_folder_browse")); outputFolderBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { outputFolderBtnActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); exportPanel.add(outputFolderBtn, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.weightx = 1.0; exportPanel.add(spacer2, gridBagConstraints); allPrjChk.setText(options.getMsg("export_project_includeAll")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; exportPanel.add(allPrjChk, gridBagConstraints); add(exportPanel); spacer.setPreferredSize(new java.awt.Dimension(25, 25)); add(spacer); scormPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("SCORM")); scormPanel.setLayout(new java.awt.GridBagLayout()); exportScormChk.setText(options.getMsg("export_project_exportSCORM")); exportScormChk.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { scormSelChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; scormPanel.add(exportScormChk, gridBagConstraints); scormFolderLb.setLabelFor(scormFileText); scormFolderLb.setText(options.getMsg("export_project_scorm_file")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); scormPanel.add(scormFolderLb, gridBagConstraints); scormFileText.setToolTipText(options.getMsg("export_project_scorm_file_tooltip")); scormFileText.setMinimumSize(new java.awt.Dimension(320, 21)); scormFileText.setPreferredSize(new java.awt.Dimension(320, 21)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); scormPanel.add(scormFileText, gridBagConstraints); scormFileBtn.setText(options.getMsg("export_project_scorm_file_browse")); scormFileBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { scormFileBtnActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); scormPanel.add(scormFileBtn, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.weightx = 1.0; scormPanel.add(spacer3, gridBagConstraints); add(scormPanel); }// </editor-fold>//GEN-END:initComponents private JFileChooser chooser; private JFileChooser scormFileChooser; private void outputFolderBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_outputFolderBtnActionPerformed if (chooser == null) { chooser = new JFileChooser(); chooser.setApproveButtonText(options.getMsg("export_project_selectFolder")); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); } outputFolder = StrUtils.nullableString(outputFolderText.getText()); if (outputFolder != null) { try { File f = new File(outputFolder); if (!f.exists()) { f.mkdirs(); } chooser.setSelectedFile(f); } catch (Exception ex) { // Unable to create folders. By now, do nothing } } if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { outputFolder = chooser.getSelectedFile().getAbsolutePath(); outputFolderText.setText(outputFolder); } }//GEN-LAST:event_outputFolderBtnActionPerformed private void scormFileBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scormFileBtnActionPerformed if (scormFileChooser == null) { scormFileChooser = new JFileChooser(); scormFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); } scormFile = StrUtils.nullableString(scormFileText.getText()); if (scormFile != null) { try { File f = new File(scormFile); if (!f.getParentFile().exists()) { f.getParentFile().mkdirs(); } scormFileChooser.setSelectedFile(f); } catch (Exception ex) { // Unable to create folders. By now, do nothing } } if (scormFileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { scormFile = scormFileChooser.getSelectedFile().getAbsolutePath(); scormFileText.setText(scormFile); } }//GEN-LAST:event_scormFileBtnActionPerformed private void scormSelChanged(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scormSelChanged scormFileBtn.setEnabled(exportScormChk.isSelected()); scormFolderLb.setEnabled(exportScormChk.isSelected()); }//GEN-LAST:event_scormSelChanged public void fillData() { outputFolderText.setText(outputFolder == null ? "" : outputFolder); scormFileText.setText(scormFile == null ? "" : scormFile); allPrjChk.setSelected(exportAll); exportScormChk.setSelected(exportScorm); } public void getData() { outputFolder = StrUtils.nullableString(outputFolderText.getText()); exportAll = allPrjChk.isSelected(); exportScorm = exportScormChk.isSelected(); scormFile = StrUtils.nullableString(scormFileText.getText()); } public static String[] prompt(ResourceBridge rb, Component parent, String inputPath, String exportBasePath, String scormBasePath) { String[] result = null; ExportToJSDlg exportDlg = new ExportToJSDlg(rb); Messages msg = rb.getOptions().getMessages(); String inputBase = (new File(inputPath)).getName(); exportDlg.outputFolder = (new File(new File(exportBasePath), inputBase)).getPath(); exportDlg.scormFile = (new File(new File(scormBasePath), inputBase + ".scorm.zip")).getPath(); exportDlg.fillData(); while (result == null) { if (!msg.showInputDlg(parent, exportDlg, "export_project_title")) { break; } exportDlg.getData(); if (exportDlg.outputFolder == null) { msg.showErrorWarning(parent, "export_project_err_empty", null); } else { try { boolean folderOk = true; boolean scormOk = true; File outputFolderFile = new File(exportDlg.outputFolder); if (exportDlg.outputFolder.equals(inputPath)) { msg.showErrorWarning(parent, "export_project_err_sameFolder", null); folderOk = false; } else if (exportDlg.outputFolder.startsWith(inputPath)) { msg.showErrorWarning(parent, "export_project_err_nestedFolders", null); folderOk = false; } else if (outputFolderFile.exists() && outputFolderFile.isDirectory()) { if (outputFolderFile.list().length > 0) { folderOk = msg.showQuestionDlg(parent, "export_project_warning_noEmptyFolder", null, "yn") == Messages.YES; } } else if (!outputFolderFile.mkdirs()) { msg.showErrorWarning(parent, "edit_new_project_err_folderCreation", null); folderOk = false; } if (folderOk && exportDlg.exportScorm) { if (exportDlg.scormFile == null) { msg.showErrorWarning(parent, "export_project_scorm_file_err_empty", null); scormOk = false; } else { File scormFile = new File(exportDlg.scormFile); if (scormFile.exists()) { scormOk = msg.showQuestionDlg(parent, "export_project_scorm_file_exists", null, "yn") == Messages.YES; } else if (!scormFile.getParentFile().exists() && !scormFile.getParentFile().mkdirs()) { msg.showErrorWarning(parent, "edit_new_project_err_folderCreation", null); scormOk = false; } } } if (folderOk && scormOk) { result = new String[]{ exportDlg.outputFolder, inputPath, exportDlg.exportAll ? "true" : "false", exportDlg.exportScorm ? exportDlg.scormFile : null}; } } catch (Exception ex) { msg.showErrorWarning(parent, "ERROR", ex); } } } return result; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBox allPrjChk; private javax.swing.JLabel exportLb; private javax.swing.JPanel exportPanel; private javax.swing.JCheckBox exportScormChk; private javax.swing.JButton outputFolderBtn; private javax.swing.JLabel outputFolderLb; private javax.swing.JTextField outputFolderText; private javax.swing.JButton scormFileBtn; private javax.swing.JTextField scormFileText; private javax.swing.JLabel scormFolderLb; private javax.swing.JPanel scormPanel; private javax.swing.JLabel spacer; // End of variables declaration//GEN-END:variables }