/*
* DlgEditFieldForXML.java
*
* Created on 13 Август 2008 г., 15:23
*/
package clips.directory.editors.checkUpType;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.doctor.checkup.FieldForXML;
import cli_fmw.directory.editors.writer.DialogIntelWriterEditor;
import cli_fmw.main.ClipsException;
import cli_fmw.main.audit.AuditManager;
import cli_fmw.utils.ErrorValue;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.SelectorEditableExceptional;
import cli_fmw.utils.sorted_table.SortedTable;
import cli_fmw.utils.sorted_table.renderer.LabelRenderer;
import cli_fmw.utils.sorted_table.renderer.SortedErrorRenderer;
import cli_fmw.utils.table_config_states.StateSaver;
import clips.delegate.directory.simple.iwtype.DirectoryIWType;
import clips.delegate.directory.simple.iwtype.DirectoryIWTypeItem;
import clips.main.ClipsConfig;
import framework.beans.directory.DirectoryItemDetails;
import java.awt.Component;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
/**
* редактируем список фиелдов
* @author lacoste
*/
public class DlgEditFieldForXML extends ModalDialog {
private ArrayList<FieldForXML> fields = new ArrayList<FieldForXML>();
private Set<Integer> iwIDs = new HashSet<Integer>();
private DefaultListModel model;
private DirectoryIWType directoryIWT;
/** Creates new form DlgEditFieldForXML */
public DlgEditFieldForXML(java.awt.Window parent, ArrayList<FieldForXML> field, Set<Integer> iwID, AuditManager am) throws ClipsException {
super(parent, "Редактор полей осмотра/анализа", am);
initComponents();
directoryIWT = DirectoryLocator.getDirectory(DirectoryIWType.class);
// Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
// Rectangle dlgSize = this.getBounds();
// this.setLocation((scrSize.width - dlgSize.width) / 2, (scrSize.height - dlgSize.height) / 2);
this.fields = field;
this.iwIDs = iwID;
formList();
tabMetaIWTypes.setModel(new MetaIWTypesTableModel());
tabMetaIWTypes.setDefaultRenderer(Object.class, new LabelRenderer() {
@Override
protected void modifyErrorTableCellRendererComponent(JTable table, Object value, int row, int col) throws ClipsException {
if (value instanceof BufferedImage) {
Icon icon = new ImageIcon((BufferedImage) value);
render().setIcon(icon);
render().setText("");
}else{
render().setIcon(null);
}
}
});
tabMetaIWTypes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jScrollPane2.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
resizeImages();
}
});
StateSaver.attachTo(this);
}
private void resizeImages() {
for (int i = 0; i < fields.size(); i++) {
FieldForXML fieldForXML = fields.get(i);
if (fieldForXML.getType() == FieldForXML.Type.image) {
tabMetaIWTypes.setRowHeight(i, tabMetaIWTypes.getCellRect(i, 0, false).width);
}
}
}
private void formList() throws ClipsException {
model = new DefaultListModel();
SelectorEditableExceptional<DirectoryIWTypeItem> items = directoryIWT.getItems();
for (int i = 0; i < items.size(); i++) {
DirectoryIWTypeItem item = items.get(i);
if (!iwIDs.contains(item.getID())) {
model.addElement(item);
}
}
lstIWTypes.setModel(model);
}
public ArrayList<FieldForXML> getFieldList() {
return fields;
}
public Object[] getIwID() {
return iwIDs.toArray();
}
/** 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() {
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
btOk = new javax.swing.JButton();
btCancel = new javax.swing.JButton();
jSplitPane1 = new javax.swing.JSplitPane();
jPanel4 = new javax.swing.JPanel();
jPanel11 = new javax.swing.JPanel();
btEditor = new javax.swing.JButton();
btUp = new javax.swing.JButton();
btDown = new javax.swing.JButton();
jPanel3 = new javax.swing.JPanel();
btAdd = new javax.swing.JButton();
btImage = new javax.swing.JButton();
btDel = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
tabMetaIWTypes = new cli_fmw.utils.sorted_table.SortedTable();
jPanel6 = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();
btAddType = new javax.swing.JButton();
btDeleteType = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
lstIWTypes = new javax.swing.JList();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
jPanel1.setLayout(new java.awt.BorderLayout());
btOk.setText("Принять");
btOk.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btOkActionPerformed(evt);
}
});
jPanel2.add(btOk);
btCancel.setText("Отмена");
btCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btCancelActionPerformed(evt);
}
});
jPanel2.add(btCancel);
jPanel1.add(jPanel2, java.awt.BorderLayout.SOUTH);
jPanel4.setLayout(new java.awt.BorderLayout(5, 5));
jPanel11.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
btEditor.setText("Редактор");
btEditor.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btEditorActionPerformed(evt);
}
});
jPanel11.add(btEditor);
btUp.setText("Вверх");
btUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btUpActionPerformed(evt);
}
});
jPanel11.add(btUp);
btDown.setText("Вниз");
btDown.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDownActionPerformed(evt);
}
});
jPanel11.add(btDown);
jPanel4.add(jPanel11, java.awt.BorderLayout.SOUTH);
jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
btAdd.setText("Добавить");
btAdd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddActionPerformed(evt);
}
});
jPanel3.add(btAdd);
btImage.setText("Изображение...");
btImage.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btImageActionPerformed(evt);
}
});
jPanel3.add(btImage);
btDel.setText("Удалить");
btDel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDelActionPerformed(evt);
}
});
jPanel3.add(btDel);
jPanel4.add(jPanel3, java.awt.BorderLayout.NORTH);
jScrollPane2.setViewportView(tabMetaIWTypes);
jPanel4.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jSplitPane1.setRightComponent(jPanel4);
jPanel6.setLayout(new java.awt.BorderLayout());
jPanel5.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 1, 5, 1));
btAddType.setText("Добавить");
btAddType.setActionCommand("<html>Добавить <BR> группу</html>");
btAddType.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddTypeActionPerformed(evt);
}
});
jPanel5.add(btAddType);
btDeleteType.setText("Удалить");
btDeleteType.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDeleteTypeActionPerformed(evt);
}
});
jPanel5.add(btDeleteType);
jPanel6.add(jPanel5, java.awt.BorderLayout.SOUTH);
jScrollPane1.setPreferredSize(new java.awt.Dimension(180, 154));
jScrollPane1.setViewportView(lstIWTypes);
jPanel6.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jSplitPane1.setLeftComponent(jPanel6);
jPanel1.add(jSplitPane1, java.awt.BorderLayout.CENTER);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>//GEN-END:initComponents
private void btOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btOkActionPerformed
if (tabMetaIWTypes.isEditing()) {
tabMetaIWTypes.getCellEditor().stopCellEditing();
}
setDlgResult(ModalDialog.DLG_OK);
dispose();
}//GEN-LAST:event_btOkActionPerformed
private void btAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddActionPerformed
int k = lstIWTypes.getSelectedIndex();
if (k >= 0) {
try {
FieldForXML ffxml = new FieldForXML();
DirectoryIWTypeItem type = (DirectoryIWTypeItem) model.getElementAt(k);
ffxml.id = type.getID();
ffxml.title = type.getTitle();
iwIDs.add(type.getID());
fields.add(ffxml);
tabMetaIWTypes.updateUI();
formList();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}//GEN-LAST:event_btAddActionPerformed
private void btDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDelActionPerformed
int k = tabMetaIWTypes.getSelectedRowSorted();
if (k > -1) {
FieldForXML ffxml = fields.get(k);
try {
iwIDs.remove(ffxml.getIWType().getID());
} catch (ClipsException ex) {
//тут либо не найден элемент либо доступ к полю запрещён
//но дропать эксепшн совсем - некультурно, поэтому
ex.printStackTrace();
}
fields.remove(ffxml);
tabMetaIWTypes.updateUI();
try {
formList();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}//GEN-LAST:event_btDelActionPerformed
private void btCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelActionPerformed
setDlgResult(ModalDialog.DLG_CANCEL);
dispose();
}//GEN-LAST:event_btCancelActionPerformed
private void btUpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btUpActionPerformed
int pos = tabMetaIWTypes.getSelectedRowSorted();
if (pos > 0) {
FieldForXML get = fields.get(pos);
fields.set(pos, fields.get(pos - 1));
fields.set(pos - 1, get);
tabMetaIWTypes.getSelectionModel().setSelectionInterval(pos - 1, pos - 1);
}
tabMetaIWTypes.updateUI();
}//GEN-LAST:event_btUpActionPerformed
private void btDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDownActionPerformed
int pos = tabMetaIWTypes.getSelectedRowSorted();
if (pos < fields.size() - 1) {
FieldForXML get = fields.get(pos);
fields.set(pos, fields.get(pos + 1));
fields.set(pos + 1, get);
tabMetaIWTypes.getSelectionModel().setSelectionInterval(pos + 1, pos + 1);
}
}//GEN-LAST:event_btDownActionPerformed
private void btEditorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btEditorActionPerformed
try {
int row = tabMetaIWTypes.getSelectedRowSorted();
System.out.println("SIZE " + tabMetaIWTypes.getRowCount());
System.out.println("ROW " + row);
System.out.println("ROWCOUNT " + tabMetaIWTypes.getSelectedRowCount());
if (row >= 0 && row < fields.size()) {
DialogIntelWriterEditor dlg = new DialogIntelWriterEditor(this, fields.get(row).getIWType(), getAuditManager());
dlg.setVisible(true);
formList();
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btEditorActionPerformed
private void btAddTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddTypeActionPerformed
try {
String result = JOptionPane.showInputDialog("Введите название");
if (result == null) {
return;
}
DirectoryItemDetails details = new DirectoryItemDetails();
details.title = result;
DirectoryIWTypeItem newItem = new DirectoryIWTypeItem(details);
directoryIWT.getItems().append(newItem);
formList();
lstIWTypes.setSelectedValue(newItem, true);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btAddTypeActionPerformed
private void btDeleteTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDeleteTypeActionPerformed
try {
DirectoryIWTypeItem selectedType = (DirectoryIWTypeItem) lstIWTypes.getSelectedValue();
if (selectedType == null) {
return;
}
directoryIWT.getItems().remove(selectedType);
formList();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btDeleteTypeActionPerformed
private void btImageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btImageActionPerformed
try {
JFileChooser dlg = new JFileChooser();
ClipsConfig cfg = ClipsConfig.getInstance();
dlg.setCurrentDirectory(cfg.getRegisterExportPath());
dlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
dlg.setMultiSelectionEnabled(false);
dlg.setFileFilter(new FileNameExtensionFilter("изображения", "jpg", "jpeg", "bmp", "png", "gif"));
int res = dlg.showOpenDialog(this);
if (res == JFileChooser.OPEN_DIALOG) {
try {
File file = dlg.getSelectedFile();
BufferedImage img = ImageIO.read(file);
FieldForXML ffxml = new FieldForXML(FieldForXML.Type.image);
ffxml.id = 0;
ffxml.title = "изображение";
ffxml.setObject(img);
fields.add(ffxml);
tabMetaIWTypes.updateUI();
formList();
resizeImages();
} catch (IOException ex) {
throw new ClipsException("Невозможно открыть изображение", ex);
}
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btImageActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btAdd;
private javax.swing.JButton btAddType;
private javax.swing.JButton btCancel;
private javax.swing.JButton btDel;
private javax.swing.JButton btDeleteType;
private javax.swing.JButton btDown;
private javax.swing.JButton btEditor;
private javax.swing.JButton btImage;
private javax.swing.JButton btOk;
private javax.swing.JButton btUp;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel11;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JList lstIWTypes;
private cli_fmw.utils.sorted_table.SortedTable tabMetaIWTypes;
// End of variables declaration//GEN-END:variables
class MetaIWTypesTableModel extends AbstractTableModel {
@Override
public int getRowCount() {
return fields.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
try {
if (fields.get(rowIndex).getType() == FieldForXML.Type.image) {
return fields.get(rowIndex).getObject();
} else {
return directoryIWT.getItemFromID(fields.get(rowIndex).id).getTitle();
}
} catch (ClipsException ex) {
return new ErrorValue(ex);
}
} else {
return fields.get(rowIndex).title;
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
fields.get(rowIndex).title = aValue.toString();
}
@Override
public String getColumnName(int column) {
if (column == 0) {
return "Тип";
} else {
return "Ваше название";
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return false;
} else {
return true;
}
}
}
}