/*******************************************************************************
* LogDruid : Generate charts and reports using data gathered in log files
* Copyright (C) 2016 Frederic Valente (frederic.valente@gmail.com)
*
* 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 3 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.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
*******************************************************************************/
package logdruid.ui.editor;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Label;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridLayout;
import javax.swing.DefaultListModel;
import javax.swing.JFormattedTextField;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.JTextPane;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import java.awt.Color;
import javax.swing.UIManager;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Enumeration;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.DefaultHighlighter.DefaultHighlightPainter;
import javax.swing.text.Document;
import javax.swing.text.Highlighter;
import logdruid.data.Repository;
//import logdruid.newui.MetadataSelectorPanel.MyTableModel2;
import logdruid.data.Source;
import logdruid.data.record.MetadataRecording;
import logdruid.data.record.Recording;
import logdruid.data.record.RecordingItem;
import logdruid.ui.dialog.DateSelector;
import logdruid.ui.mainpanel.MetadataRecordingSelectorPanel;
import logdruid.ui.mainpanel.RecordingList;
import logdruid.ui.mainpanel.StatRecordingSelectorPanel;
import logdruid.ui.mainpanel.RecordingList.MyTableModel2;
import logdruid.ui.table.MetadataRecordingEditorTable;
import logdruid.util.DataMiner;
import logdruid.util.PatternCache;
import javax.swing.SwingConstants;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;
import org.apache.log4j.Logger;
import java.awt.Font;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.LineBorder;
import javax.swing.JSplitPane;
public class MetadataRecordingEditor extends JPanel {
private static Logger logger = Logger.getLogger(DataMiner.class.getName());
private JPanel _this = this;
private JPanel panel_1;
JPanel panel_2;
JPanel panel2;
private final JPanel contentPanel = new JPanel();
private JScrollPane scrollPane;
private JTextField txtName;
private JTextField txtRegularExp;
private JTextField txtDate;
private MetadataRecordingEditorTable recordingEditorTablePanel;
private Repository repository;
DefaultListModel listModel;
JTextPane examplePane = new JTextPane();
private MetadataRecording recording;
Document doc;
JCheckBox chckbxActive;
JCheckBox chckbxCaseSensitive;
Source selectedSource;
// private JList recordingList;
/**
* Create the dialog.
*/
public MetadataRecordingEditor(final JPanel newRecordingList, MetadataRecording re, Repository repo) {
this(newRecordingList, repo, re.getExampleLine(), re.getRegexp(), re,null);
}
public MetadataRecordingEditor(Repository repo, String theLine, String regex, MetadataRecording re) {
this(null, repo, theLine, regex, re,null);
}
/**
* Create the dialog.
* @param source
*
* @wbp.parser.constructor
*/
public MetadataRecordingEditor(final JPanel newRecordingList, Repository repo, String theLine, String regex,
final MetadataRecording re, Source source) {
// setBounds(0, 0, 1015, 467);
repository = repo;
recording = re;
selectedSource = source;
BorderLayout borderLayout = new BorderLayout();
this.setLayout(borderLayout);
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
this.add(contentPanel, BorderLayout.CENTER);
JPanel panel = new JPanel();
contentPanel.setLayout(new BorderLayout(0, 0));
JPanel panel_1_1 = new JPanel();
{
panel_1_1.setLayout(new BorderLayout(0, 0));
{
scrollPane = new JScrollPane();
panel_1_1.add(scrollPane);
{
examplePane = new JTextPane();
// examplePane.setText(theLine);
scrollPane.setViewportView(examplePane);
}
}
{
panel.setLayout(new BorderLayout(0, 0));
panel.setMinimumSize(new Dimension(0,200));
{
panel_1 = new JPanel();
panel.add(panel_1, BorderLayout.NORTH);
panel_1.setLayout(new GridLayout(0, 3, 5, 2));
txtName = new JTextField();
panel_1.add(txtName);
txtName.setText("name");
txtName.setColumns(10);
{
txtRegularExp = new JTextField();
txtRegularExp.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
PatternCache patternCache= new PatternCache();
doc = examplePane.getDocument();
Pattern pattern = patternCache.getPattern(txtRegularExp.getText(),re.isCaseSensitive());
Matcher matcher = pattern.matcher(examplePane.getText());
Highlighter h = examplePane.getHighlighter();
h.removeAllHighlights();
if (matcher.find()) {
// int currIndex=doc.getLength();
// doc.insertString(doc.getLength(),line+"\n",
// null);
try {
h.addHighlight(matcher.start(), matcher.end(), DefaultHighlighter.DefaultPainter);
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
panel_1.add(txtRegularExp);
txtRegularExp.setText(regex);
txtRegularExp.setColumns(10);
}
{
JPanel panel_2_1 = new JPanel();
panel_1.add(panel_2_1);
panel_2_1.setLayout(new BorderLayout(0, 0));
{
txtDate = new JTextField();
txtDate.setEditable(false);
panel_2_1.add(txtDate, BorderLayout.CENTER);
txtDate.setText("date format");
txtDate.setColumns(10);
}
{
JButton button = new JButton("...");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DateSelector dateDialog = new DateSelector(repository, txtDate, re);
dateDialog.validate();
dateDialog.setResizable(true);
dateDialog.setModal(false);
dateDialog.setVisible(true);
}
});
button.setFont(new Font("Dialog", Font.BOLD, 6));
panel_2_1.add(button, BorderLayout.EAST);
}
}
{
chckbxActive = new JCheckBox("active");
chckbxActive.setSelected(true);
panel_1.add(chckbxActive);
}
{
chckbxCaseSensitive = new JCheckBox("case sensitive");
chckbxCaseSensitive.setSelected(re.isCaseSensitive());
panel_1.add(chckbxCaseSensitive);
}
}
{
JPanel panel_3 = new JPanel();
panel.add(panel_3, BorderLayout.CENTER);
panel_3.setLayout(new BorderLayout(0, 0));
panel2 = new JPanel();
panel_3.add(panel2, BorderLayout.CENTER);
panel2.setLayout(new BorderLayout(0, 0));
{
panel_2 = new JPanel();
panel_3.add(panel_2, BorderLayout.SOUTH);
FlowLayout flowLayout = (FlowLayout) panel_2.getLayout();
flowLayout.setAlignment(FlowLayout.LEFT);
{
JButton btnAddButton = new JButton("Add");
btnAddButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
recordingEditorTablePanel.Add();
}
});
btnAddButton.setHorizontalAlignment(SwingConstants.LEFT);
panel_2.add(btnAddButton);
}
{
JButton btnRemoveButton = new JButton("Remove");
btnRemoveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
recordingEditorTablePanel.Remove();
}
});
{
JButton btnInsert = new JButton("Insert");
btnInsert.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
recordingEditorTablePanel.Insert();
}
});
panel_2.add(btnInsert);
}
btnRemoveButton.setHorizontalAlignment(SwingConstants.LEFT);
panel_2.add(btnRemoveButton);
}
{
JButton btnCheck = new JButton("Check");
btnCheck.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
logger.debug("check");
recordingEditorTablePanel.FixValues();
}
});
panel_2.add(btnCheck);
}
{
JSeparator separator = new JSeparator();
panel_2.add(separator);
}
{
JPanel buttonPane = new JPanel();
buttonPane.setBorder(null);
panel_2.add(buttonPane);
FlowLayout fl_buttonPane = new FlowLayout(FlowLayout.CENTER);
fl_buttonPane.setAlignOnBaseline(true);
buttonPane.setLayout(fl_buttonPane);
{
JButton okButton = new JButton("Save");
okButton.setForeground(Color.BLUE);
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
ArrayList<RecordingItem> rIs = recordingEditorTablePanel.getRecordingItems();
if (newRecordingList.getClass()==RecordingList.class) {
if (recording == null){
logger.debug("RecordingEditor - ok 1");
Recording r = new MetadataRecording(txtName.getText(), txtRegularExp.getText(),"", txtDate.getText(), chckbxActive
.isSelected(), chckbxCaseSensitive.isSelected(), rIs);
repository.addRecording(r);
logger.debug("RecordingEditor - ok 1");
if (newRecordingList.getClass()==RecordingList.class){
logger.debug("RecordingEditor - ok 1");
if (((RecordingList) newRecordingList).model != null) {
logger.debug("RecordingEditor - ok 1");
((RecordingList) newRecordingList).model.addRow(new Object[] { txtName.getText(), txtRegularExp.getText(), chckbxActive.isSelected() });
((RecordingList) newRecordingList).model.fireTableDataChanged();
}}} else {
int selectedRow = ((((RecordingList) newRecordingList).table.getSelectedRow() != -1) ? ((((RecordingList) newRecordingList).table.getSelectedRow())) : -1);
((MetadataRecording) recording).update(txtName.getText(), txtRegularExp.getText(),"", txtDate.getText(),
chckbxActive.isSelected(), chckbxCaseSensitive.isSelected(), rIs);
((RecordingList) newRecordingList).model.fireTableDataChanged();
logger.debug("RecordingEditor - row Updated");
((RecordingList) newRecordingList).table.setRowSelectionInterval(selectedRow, selectedRow);
}}
else
{
if (recording == null){
int selectedRow = ((((StatRecordingSelectorPanel) newRecordingList).table.getSelectedRow() != -1) ? ((StatRecordingSelectorPanel) newRecordingList).table.convertRowIndexToModel(((StatRecordingSelectorPanel) newRecordingList).table.getSelectedRow()) : -1);
if (((MetadataRecordingSelectorPanel) newRecordingList).model != null) {
logger.debug("RecordingEditor - ok 1");
((MetadataRecordingSelectorPanel) newRecordingList).model.addRow(new Object[] { txtName.getText(), txtRegularExp.getText(), chckbxActive.isSelected() });
((MetadataRecordingSelectorPanel) newRecordingList).model.fireTableDataChanged();
((MetadataRecordingSelectorPanel) newRecordingList).table.setRowSelectionInterval(selectedRow, selectedRow);
}}
else {
int selectedRow = ((((MetadataRecordingSelectorPanel) newRecordingList).table.getSelectedRow() != -1) ? (((MetadataRecordingSelectorPanel) newRecordingList).table.getSelectedRow()) : -1);
((MetadataRecording) recording).update(txtName.getText(), txtRegularExp.getText(), examplePane.getText(), txtDate.getText(),
chckbxActive.isSelected(),chckbxCaseSensitive.isSelected(), rIs);
logger.debug("RecordingEditor - row Updated");
((MetadataRecordingSelectorPanel) newRecordingList).model.fireTableDataChanged();
((MetadataRecordingSelectorPanel) newRecordingList).table.setRowSelectionInterval(selectedRow, selectedRow);
}
}
/* if (contentPanel.getParent().getParent().getParent().getParent().getClass().equals(JDialog.class)) {
((JDialog) contentPanel.getParent().getParent().getParent().getParent()).dispose();
}*/
//
}
});
{
JSeparator separator = new JSeparator();
buttonPane.add(separator);
}
okButton.setActionCommand("OK");
buttonPane.add(okButton);
// getRootPane().setDefaultButton(okButton);
}
}
{
JSeparator separator = new JSeparator();
panel_2.add(separator);
}
}
}
}
}
{
JSplitPane splitPane = new JSplitPane();
splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
contentPanel.add(splitPane, BorderLayout.CENTER);
{
JPanel panela = new JPanel();
splitPane.setTopComponent(panel);
}
{
JPanel panelb = new JPanel();
splitPane.setBottomComponent(panel_1_1);
}
}
if (re == null) {
recordingEditorTablePanel = new MetadataRecordingEditorTable(examplePane,source);
logger.debug("RecordingEditor - re=null");
} else {
txtName.setText(re.getName());
txtRegularExp.setText(re.getRegexp());
txtDate.setText(((MetadataRecording) re).getDateFormat());
// examplePane.setText(re.getExampleLine());
scrollPane.repaint();
panel_1.repaint();
recordingEditorTablePanel = new MetadataRecordingEditorTable(repo, re, examplePane,source);
// logger.debug("RecordingEditor - re!=null examplePane: " + examplePane.getText());
}
recordingEditorTablePanel.setBackground(UIManager.getColor("Panel.background"));
recordingEditorTablePanel.setOpaque(true);
recordingEditorTablePanel.setVisible(true);
JScrollPane scrollPaneRecordingEditorTablePanel = new JScrollPane(recordingEditorTablePanel);
panel2.add(scrollPaneRecordingEditorTablePanel);
recordingEditorTablePanel.FixValues();
}
}