/** * SlingBeans - NetBeans Sling plugin https://github.com/jkan997/SlingBeans * Licensed under Apache 2.0 license http://www.apache.org/licenses/LICENSE-2.0 */ package org.jkan997.slingbeans.dialogs; import java.awt.Dimension; import java.awt.GridLayout; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.JButton; import javax.swing.JCheckBox; import org.jkan997.slingbeans.configuration.Configuration; import org.jkan997.slingbeans.configuration.ConfigurationImpl; import org.jkan997.slingbeans.helper.LogHelper; import org.jkan997.slingbeans.helper.RemoteLogInstaller; import org.jkan997.slingbeans.slingfs.FileSystem; import org.netbeans.api.progress.ProgressUtils; public class OpenLogViewerDialog extends javax.swing.JDialog { private boolean logFilesSelected = false; private Set<String> selectedLogFiles = null; private List<String> logFiles = null; private final static String LOG_FILES = "log-files"; private List<JCheckBox> checkboxes = new ArrayList<JCheckBox>(); private FileSystem fs; public OpenLogViewerDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); } private void createCheckBox(String logFile) { JCheckBox cb = new JCheckBox(); cb.setText(logFile); cb.setName(logFile); if (selectedLogFiles.contains(logFile)) { cb.setSelected(true); } checkboxes.add(cb); logPanel.add(cb); } protected void installRemoteLog() { try { RemoteLogInstaller rli = new RemoteLogInstaller(fs); rli.installRemoteLog(); } catch (IOException ex) { LogHelper.logError(ex); } } public void loadLogFilesInternal() { try { String url = "/bin/remotelog.html"; Map<String, String> params = new HashMap<String, String>(); params.put("action", "list"); byte[] resp = fs.sendGet(url, params); String str = new String(resp); if (!str.contains("<")) { ByteArrayInputStream is = new ByteArrayInputStream(resp); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; boolean firstLine = true; while ((line = br.readLine()) != null) { line = line.trim(); if (line.contains("No resource found")) { logFiles.clear(); return; } if (!firstLine) { logFiles.add(line); } else { firstLine = false; } } br.close(); } } catch (Exception ex) { LogHelper.logError(ex); } } public void loadLogFiles(final boolean installRemoteLog) { logFiles = new ArrayList<String>(); final Runnable logFileLoadedRunnable = new Runnable() { public void run() { logFilesLoaded(); } }; final Runnable loadLogFilesTask = new Runnable() { @Override public void run() { if (installRemoteLog) { installRemoteLog(); } loadLogFilesInternal(); java.awt.EventQueue.invokeLater(logFileLoadedRunnable); } }; ProgressUtils.runOffEventDispatchThread(loadLogFilesTask, "Loading log file list", new AtomicBoolean(false), false); } public void init(FileSystem fs) { this.fs = fs; loadLogFiles(false); } protected void logFilesLoaded() { try { Configuration configuration = ConfigurationImpl.getInstance(); selectedLogFiles = (Set<String>) configuration.getObject(LOG_FILES); if (selectedLogFiles == null) { selectedLogFiles = new TreeSet<String>(); } logPanel.removeAll(); if ((logFiles == null) || (logFiles.size() == 0)) { GridLayout gl = (GridLayout) logPanel.getLayout(); gl.setRows(1); JButton remoteLogBtn = new JButton(); remoteLogBtn.setMaximumSize(new Dimension(200, 50)); remoteLogBtn.setText("Install remote log on AEM"); logPanel.add(remoteLogBtn); remoteLogBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { loadLogFiles(true); } }); } else { for (String logFile : logFiles) { GridLayout gl = (GridLayout) logPanel.getLayout(); gl.setRows(logFiles.size()); createCheckBox(logFile); } } } catch (Exception ex) { LogHelper.logError(ex); } } /** * 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); errorLabel = new javax.swing.JLabel(); cancelBtn1 = new javax.swing.JButton(); cancelBtn = new javax.swing.JButton(); selectBtn = new javax.swing.JButton(); listScrollPane = new javax.swing.JScrollPane(); logPanel = new javax.swing.JPanel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle(org.openide.util.NbBundle.getMessage(OpenLogViewerDialog.class, "OpenLogViewerDialog.title")); // NOI18N setResizable(false); errorLabel.setForeground(new java.awt.Color(255, 0, 0)); errorLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); errorLabel.setText(org.openide.util.NbBundle.getMessage(OpenLogViewerDialog.class, "OpenLogViewerDialog.errorLabel.text")); // NOI18N errorLabel.setToolTipText(org.openide.util.NbBundle.getMessage(OpenLogViewerDialog.class, "OpenLogViewerDialog.errorLabel.toolTipText")); // NOI18N cancelBtn1.setText(org.openide.util.NbBundle.getMessage(OpenLogViewerDialog.class, "OpenLogViewerDialog.cancelBtn1.text")); // NOI18N cancelBtn1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelBtn1ActionPerformed(evt); } }); cancelBtn.setText(org.openide.util.NbBundle.getMessage(OpenLogViewerDialog.class, "OpenLogViewerDialog.cancelBtn.text")); // NOI18N cancelBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelBtnActionPerformed(evt); } }); selectBtn.setText(org.openide.util.NbBundle.getMessage(OpenLogViewerDialog.class, "OpenLogViewerDialog.selectBtn.text")); // NOI18N selectBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { selectBtnActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .addContainerGap() .add(cancelBtn1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 83, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(cancelBtn) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(selectBtn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 92, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(errorLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(0, 0, 0)) ); jPanel1Layout.linkSize(new java.awt.Component[] {cancelBtn, cancelBtn1, selectBtn}, org.jdesktop.layout.GroupLayout.HORIZONTAL); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .add(0, 0, 0) .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(errorLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(jPanel1Layout.createSequentialGroup() .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(cancelBtn1) .add(cancelBtn) .add(selectBtn)) .add(0, 0, Short.MAX_VALUE)))) ); logPanel.setLayout(new java.awt.GridLayout(100, 0)); listScrollPane.setViewportView(logPanel); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(layout.createSequentialGroup() .addContainerGap() .add(listScrollPane) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(listScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 189, Short.MAX_VALUE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void selectBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectBtnActionPerformed selectedLogFiles.clear(); for (JCheckBox cb : checkboxes) { if (cb.isSelected()) { selectedLogFiles.add(cb.getName()); } } Configuration configuration = ConfigurationImpl.getInstance(); configuration.setObject(LOG_FILES, selectedLogFiles); logFilesSelected = true; this.setVisible(false); }//GEN-LAST:event_selectBtnActionPerformed public boolean isLogFilesSelected() { return logFilesSelected; } public Set<String> getSelectedLogFiles() { return selectedLogFiles; } private void cancelBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelBtnActionPerformed this.setVisible(false); }//GEN-LAST:event_cancelBtnActionPerformed private void cancelBtn1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelBtn1ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_cancelBtn1ActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelBtn; private javax.swing.JButton cancelBtn1; private javax.swing.JLabel errorLabel; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane listScrollPane; private javax.swing.JPanel logPanel; private javax.swing.JButton selectBtn; // End of variables declaration//GEN-END:variables private void showInstallRemoteLog() { } }