/*
* DlgMetadataEdit.java
*
* Created on 31 Май 2008 г., 9:51
*/
package clips.directory.editors.checkUpType;
import clips.Main;
import beans.directory.checkuptype.entity.CheckupTypeDetails;
import clips.delegate.directory.filtered.DirectoryCheckupTypeItem;
import clips.delegate.doctor.checkup.FieldForXML;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.audit.AuditManager;
import framework.utils.Converter;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.NumberTextField;
import cli_fmw.utils.table_config_states.StateSaver;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.swing.DefaultListModel;
import javax.swing.ListSelectionModel;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
/**
*Диалог редактирования и создания метадаты чекапов
* @author lacoste
*/
public class DlgMetadataEdit extends ModalDialog {
private Document metaDoc; //документ из метадаты редактируемой
private int valQuantity; //!макс! кол-во value в метадате
//(у всех проб должен быть одинаковым в идеале)
private static int APP_MAX_COLUMN_COUNT = 10; //конст для задания числа столбцов
private ArrayList<Object[]> metaItems = new ArrayList<Object[]>(); //массив объектов,
//от которого будет создаваться мета
private ArrayList<String> headerList = new ArrayList<String>(); //массив заголовков таблицы
private List<ValueIdTitle> valueIdTitles = new ArrayList<ValueIdTitle>();
private DirectoryCheckupTypeItem checkupType;
private NumberTextField tfWorkingLife;
private boolean isNew;
private ArrayList<Integer> iwTypes = new ArrayList<Integer>(); //список ИД интелврайтер типов,
//которые уже в типе чекапа
private ArrayList<FieldForXML> preField = new ArrayList<FieldForXML>();
private ArrayList<FieldForXML> postField = new ArrayList<FieldForXML>();
class ValueIdTitle {
public ValueIdTitle(String id, String title) {
this.id = id;
this.title = title;
}
public String id;
public String title;
}
/**
* Creates new form DlgMetadataEdit
*/
public DlgMetadataEdit(java.awt.Frame parent, DirectoryCheckupTypeItem checkupType, boolean isAnalysys, AuditManager am) throws JDOMException, ClipsException {
super(parent, "Редактор метаданных анализа", am);
initComponents();
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle dlgSize = this.getBounds();
this.setLocation((scrSize.width - dlgSize.width) / 2, (scrSize.height - dlgSize.height) / 2);
if (isAnalysys) {
jLabel2.setText("Название анализа: ");
} else {
jLabel2.setText("Название осмотра: ");
}
if (checkupType == null) {
this.isNew = true;
CheckupTypeDetails details = new CheckupTypeDetails();
this.checkupType = new DirectoryCheckupTypeItem(details);
this.checkupType.setIsAnalyse(isAnalysys);
this.metaDoc = new Document(new Element("analysys"));
} else {
this.metaDoc = Converter.stringToXml(checkupType.getMetadata());
this.isNew = checkupType.isNotUsedInCheckup();
if (Main.DEVELOPED_ON) {
this.isNew = true;
}
this.checkupType = checkupType;
}
tabMetadata.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
if (!this.checkupType.isAnalyse()) {
getIWTypes();
formPreFieldList();
formPostFieldList();
} else {
panelPostField.setVisible(false);
panelPreField.setVisible(false);
pack();
}
setScreenFields();
loadMetaItems();
setTable();
StateSaver.excludeFromAttach(this, tabMetadata);
StateSaver.attachTo(this);
}
/**
* формирует список типов интелврайтеров всех, а также отдельно
* до и после таблицы
*/
private void getIWTypes() throws ClipsException {
List elements = metaDoc.getRootElement().getChildren();
boolean post = false;
for (int i = 0; i < elements.size(); i++) {
Element element = (Element) elements.get(i);
if (element.getName().equals("field") && !post) {
FieldForXML nf = new FieldForXML();
String id = element.getChildTextTrim("id");
if (id != null) {
try {
nf.id = Integer.parseInt(id);
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
nf.title = element.getChildTextTrim("title");
preField.add(nf);
iwTypes.add(Integer.parseInt(element.getChildTextTrim("id")));
}
if (element.getName().equals("image") && !post){
FieldForXML nf = new FieldForXML(FieldForXML.Type.image);
String id = element.getChildTextTrim("id");
if (id != null) {
try {
nf.id = Integer.parseInt(id);
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
nf.title = element.getChildTextTrim("title");
nf.setData(element.getChildText("data"));
preField.add(nf);
}
if (element.getName().equals("separator") || element.getName().equals("probe")) {
post = true;
}
if (element.getName().equals("field") && post) {
FieldForXML nf = new FieldForXML();
String id = element.getChildTextTrim("id");
if (id != null) {
try {
nf.id = Integer.parseInt(id);
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
nf.title = element.getChildTextTrim("title");
postField.add(nf);
iwTypes.add(Integer.parseInt(element.getChildTextTrim("id")));
}
}
}
private void formPreFieldList() throws ClipsException {
DefaultListModel model = new DefaultListModel();
for (int i = 0; i < preField.size(); i++) {
FieldForXML ffxml = preField.get(i);
if (ffxml.getType() == FieldForXML.Type.image){
model.addElement(ffxml.title + " (изображение)");
}else{
model.addElement(ffxml.title + " (" + ffxml.getIWType().getTitle() +")");
}
}
lstPreFields.setModel(model);
}
private void formPostFieldList() throws ClipsException {
DefaultListModel model = new DefaultListModel();
for (int i = 0; i < postField.size(); i++) {
FieldForXML ffxml = postField.get(i);
model.addElement(ffxml.title + " (" + ffxml.getIWType().getTitle() +")");
}
lstPostFields.setModel(model);
}
private void setScreenFields() throws ClipsException {
tfWorkingLife = new NumberTextField(3);
tfCaption.setText(checkupType.getTitle());
taDescription.setText(checkupType.getDescription());
Element workingLife = metaDoc.getRootElement().getChild("workinglife");
if (workingLife != null) {
tfWorkingLife.setText(workingLife.getTextTrim());
}
jPanel7.add(tfWorkingLife);
tfWorkingLife.setEditable(isNew);
}
/**
* формирует массив объектов, парсируя метадату
*/
private void loadMetaItems() {
List probeList = metaDoc.getRootElement().getChildren("probe");
valQuantity = 0;
headerList.add("Разделитель");
headerList.add("Методика");
for (int i = 0; i < probeList.size(); i++) {
if (((Element)probeList.get(i)).getChildren("value").size() > valQuantity) {
List valueList = ((Element)probeList.get(i)).getChildren("value");
valueIdTitles = new ArrayList<ValueIdTitle>();
valQuantity = valueList.size();
for (int j = 0; j < valueList.size(); j++) {
Element value = (Element) valueList.get(j);
String id = value.getChildText("id");
String title = value.getChildText("title");
headerList.add(title);
valueIdTitles.add(new ValueIdTitle(id, title));
}
}
}
headerList.add("Описание");
List list = metaDoc.getRootElement().getChildren();
for (int i = list.size() - 1; i > -1; i--) {
Element probe = (Element) list.get(i);
if (probe.getName().equals("separator") || probe.getName().equals("probe")) {
}
else {
list.remove(i);
}
}
for (int i = 0; i < list.size(); i++) {
Element probe = (Element) list.get(i);
Object[] toAdd = new Object[APP_MAX_COLUMN_COUNT];
if (probe.getName().equals("separator")) {
MetadataMarker obj = new MetadataMarker();
obj.canBeEdit = isNew;
obj.separator = true;
obj.title = probe.getTextTrim();
toAdd[0] = obj;
} else if (probe.getName().equals("probe")) {
MetadataMarker obj = new MetadataMarker();
obj.canBeEdit = isNew;
obj.separator = false;
obj.title = probe.getChildText("title");
obj.id = probe.getChildText("id");
toAdd[0] = obj;
List values = probe.getChildren("value");
for (int j = 0; j < values.size(); j++) {
Element value = (Element) values.get(j);
MetadataValue metadataValue = new MetadataValue();
metadataValue.canBeEdit = isNew;
metadataValue.id = value.getChildText("id");
metadataValue.title = value.getChildText("title");
List enums = value.getChild("type").getChildren("enum");
if (enums.size() == 0) {
metadataValue.type = value.getChildText("type");
metadataValue.metric = value.getChildText("metric");
}
else {
metadataValue.data = new ArrayList<String>();
for (int k = 0; k < enums.size(); k++) {
metadataValue.data.add(((Element)enums.get(k)).getText());
}
metadataValue.type = "enum";
metadataValue.metric = "";
}
toAdd[j + 1] = metadataValue;
}
MetadataDesc desc = new MetadataDesc();
desc.title = probe.getChildText("description");
toAdd[valQuantity + 1] = desc;
}
metaItems.add(toAdd);
}
}
/**
* рисует таблицу..
*/
private void setTable() {
tabMetadata.setModel(new TableModelMetadataItems(metaItems, headerList));
resizeColumn();
}
/**
* Оставил старый код, так как таблица может менять число своих колонок
*/
private void resizeColumn() {
int r = jScrollPane1.getViewportBorderBounds().width;
int colCount = tabMetadata.getColumnCount();
tabMetadata.getColumnModel().getColumn(0).setPreferredWidth(r * 6 / (10*colCount));
tabMetadata.getColumnModel().getColumn(1).setPreferredWidth(r * 12 / (10*colCount));
for (int i = 0; i < valQuantity; i++) {
tabMetadata.getColumnModel().getColumn(i + 2).setPreferredWidth(r * 10 / (10*colCount));
}
tabMetadata.getColumnModel().getColumn(valQuantity + 2).setPreferredWidth(r * 12 / (10*colCount));
}
/**
* начало формирования метадаты по значениям из массива
*/
private void formMeta() throws ClipsException {
Document docMeta = new Document();
Element analysys = new Element("analysys");
analysys.setAttribute("caption", tfCaption.getText());
docMeta.setRootElement(analysys);
Element workingLife = new Element("workinglife");
workingLife.setAttribute("caption", "дней");
workingLife.setText(tfWorkingLife.getText());
analysys.addContent(workingLife);
for (int i = 0; i < preField.size(); i++) {
analysys.addContent(addField(preField.get(i)));
}
for (int row = 0; row < tabMetadata.getRowCount(); row++) {
analysys.addContent(addProbeElement(row));
}
for (int i = 0; i < postField.size(); i++) {
analysys.addContent(addField(postField.get(i)));
}
String metaNew = Converter.xmlToString(docMeta);
checkupType.setMetadata(metaNew);
checkupType.setTitle(tfCaption.getText());
checkupType.setDescription(taDescription.getText());
}
private Element addProbeElement(int row) {
MetadataMarker mark = (MetadataMarker) metaItems.get(row)[0];
if (mark.separator) {
Element separator = new Element("separator");
separator.setText(mark.title);
return separator;
}
Element probe = new Element("probe");
Element id = new Element("id");
id.setText(mark.id);
probe.addContent(id);
Element title = new Element("title");
title.setText(mark.title);
probe.addContent(title);
for (int col = 1; col < headerList.size()-1; col++) {
probe.addContent(addValueElement(row, col));
}
return probe;
}
private Element addValueElement(int row, int col) {
Object obj = metaItems.get(row)[col];
if (obj != null) {
if (obj.getClass() == MetadataDesc.class) {
Element description = new Element("description");
description.setText(obj.toString());
return description;
}
else if (obj.getClass() == MetadataValue.class) {
Element value = new Element("value");
Element id = new Element("id");
id.setText(((MetadataValue)obj).id);
value.addContent(id);
Element title = new Element("title");
title.setText(((MetadataValue)obj).title);
value.addContent(title);
Element metric = new Element("metric");
if (!((MetadataValue)obj).type.equals("enum")) {
metric.setText(((MetadataValue)obj).metric);
}
value.addContent(metric);
Element type = new Element("type");
type.setText(((MetadataValue)obj).type);
value.addContent(type);
if (((MetadataValue)obj).type.equals("enum")) {
ArrayList<String> strs = ((MetadataValue)obj).data;
for (int i = 0; i < strs.size(); i++) {
Element enumElement = new Element("enum");
enumElement.setText(strs.get(i));
type.addContent(enumElement);
}
}
return value;
}
}
return null;
}
private Element addField(FieldForXML ffxml) {
Element field = null;
if (ffxml.getType() == FieldForXML.Type.image){
field = new Element("image");
Element data = new Element("data");
data.setText(ffxml.getData());
field.addContent(data);
}else{
field = new Element("field");
}
Element id = new Element("id");
id.setText(Integer.toString(ffxml.id));
field.addContent(id);
Element title = new Element("title");
title.setText(ffxml.title);
field.addContent(title);
return field;
}
/**
* заполнены ли все value (type, metric)
* @return
*/
private boolean isMetaWellFormed() {
boolean wellFormed = true;
if (tfCaption.getText().isEmpty()) {
return false;
}
for (int row = 0; row < tabMetadata.getRowCount(); row++) {
for (int col = 1; col < tabMetadata.getColumnCount(); col++) {
if (tabMetadata.getValueAt(row, col) != null && metaItems.get(row)[col-1].getClass() != MetadataDesc.class) {
if (tabMetadata.getValueAt(row, col).equals("") && !((MetadataMarker)metaItems.get(row)[0]).separator) {
wellFormed = false;
}
}
}
}
return wellFormed;
}
public DirectoryCheckupTypeItem getResult () {
return checkupType;
}
/** 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;
jPanel3 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
tfCaption = new javax.swing.JTextField();
jPanel7 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jPanel4 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
taDescription = new javax.swing.JTextArea();
panelPreField = new javax.swing.JPanel();
jScrollPane3 = new javax.swing.JScrollPane();
lstPreFields = new javax.swing.JList();
jPanel6 = new javax.swing.JPanel();
btEditPreField = new javax.swing.JButton();
panelPostField = new javax.swing.JPanel();
jScrollPane4 = new javax.swing.JScrollPane();
lstPostFields = new javax.swing.JList();
jPanel8 = new javax.swing.JPanel();
btEditPostField = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
tfColumnTitle = new javax.swing.JTextField();
btAddColumn = new javax.swing.JButton();
btDelColumn = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
btAddRow = new javax.swing.JButton();
btDelRow = new javax.swing.JButton();
jPanel5 = new javax.swing.JPanel();
btOk = new javax.swing.JButton();
btCancel = new javax.swing.JButton();
jPanel10 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
tabMetadata = new cli_fmw.utils.sorted_table.SortedTable();
jPanel11 = new javax.swing.JPanel();
btUp = new javax.swing.JButton();
btDown = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jPanel3.setLayout(new java.awt.BorderLayout(5, 0));
jLabel2.setText("Название анализа: ");
jPanel3.add(jLabel2, java.awt.BorderLayout.LINE_START);
tfCaption.setPreferredSize(new java.awt.Dimension(10, 17));
jPanel3.add(tfCaption, java.awt.BorderLayout.CENTER);
jPanel7.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 0));
jLabel3.setText("Срок годности (дней): ");
jPanel7.add(jLabel3);
jPanel3.add(jPanel7, java.awt.BorderLayout.LINE_END);
jPanel4.setLayout(new java.awt.BorderLayout());
jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder("Описание"));
taDescription.setColumns(20);
taDescription.setRows(3);
jScrollPane2.setViewportView(taDescription);
jPanel4.add(jScrollPane2, java.awt.BorderLayout.CENTER);
panelPreField.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Дополнительные текстовые поля, предшествующие таблице", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("DejaVu Sans", 0, 11))); // NOI18N
panelPreField.setLayout(new java.awt.BorderLayout());
lstPreFields.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
lstPreFields.setVisibleRowCount(6);
jScrollPane3.setViewportView(lstPreFields);
panelPreField.add(jScrollPane3, java.awt.BorderLayout.CENTER);
jPanel6.setLayout(new java.awt.GridBagLayout());
btEditPreField.setText("Редактировать");
btEditPreField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btEditPreFieldActionPerformed(evt);
}
});
jPanel6.add(btEditPreField, new java.awt.GridBagConstraints());
panelPreField.add(jPanel6, java.awt.BorderLayout.LINE_END);
panelPostField.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Дополнительные текстовые поля после таблицы", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("DejaVu Sans", 0, 11))); // NOI18N
panelPostField.setLayout(new java.awt.BorderLayout());
lstPostFields.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
lstPostFields.setVisibleRowCount(6);
jScrollPane4.setViewportView(lstPostFields);
panelPostField.add(jScrollPane4, java.awt.BorderLayout.CENTER);
jPanel8.setLayout(new java.awt.GridBagLayout());
btEditPostField.setText("Редактировать");
btEditPostField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btEditPostFieldActionPerformed(evt);
}
});
jPanel8.add(btEditPostField, new java.awt.GridBagConstraints());
panelPostField.add(jPanel8, java.awt.BorderLayout.LINE_END);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Работа со столбцами", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("DejaVu Sans", 0, 11))); // NOI18N
jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
jLabel1.setText("Введите название столбца: ");
jPanel2.add(jLabel1);
tfColumnTitle.setColumns(20);
jPanel2.add(tfColumnTitle);
btAddColumn.setText("Добавить столбец");
btAddColumn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddColumnActionPerformed(evt);
}
});
jPanel2.add(btAddColumn);
btDelColumn.setText("Удалить столбец");
btDelColumn.setMaximumSize(new java.awt.Dimension(133, 24));
btDelColumn.setMinimumSize(new java.awt.Dimension(133, 24));
btDelColumn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDelColumnActionPerformed(evt);
}
});
jPanel2.add(btDelColumn);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Работа со строками", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("DejaVu Sans", 0, 11))); // NOI18N
jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
btAddRow.setText("Добавить строку");
btAddRow.setMaximumSize(new java.awt.Dimension(133, 24));
btAddRow.setMinimumSize(new java.awt.Dimension(133, 24));
btAddRow.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddRowActionPerformed(evt);
}
});
jPanel1.add(btAddRow);
btDelRow.setText("Удалить строку");
btDelRow.setPreferredSize(btAddRow.getPreferredSize());
btDelRow.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDelRowActionPerformed(evt);
}
});
jPanel1.add(btDelRow);
jPanel5.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
btOk.setText(" ОК ");
btOk.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btOkActionPerformed(evt);
}
});
jPanel5.add(btOk);
btCancel.setText(" Отмена ");
btCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btCancelActionPerformed(evt);
}
});
jPanel5.add(btCancel);
jPanel10.setBorder(javax.swing.BorderFactory.createTitledBorder("Табличные данные"));
jPanel10.setLayout(new java.awt.BorderLayout());
tabMetadata.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tabMetadataMouseClicked(evt);
}
});
jScrollPane1.setViewportView(tabMetadata);
jPanel10.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel11.setLayout(new java.awt.GridBagLayout());
btUp.setText(" Вверх ");
btUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btUpActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
jPanel11.add(btUp, gridBagConstraints);
btDown.setText(" Вниз ");
btDown.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDownActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
jPanel11.add(btDown, gridBagConstraints);
jPanel10.add(jPanel11, java.awt.BorderLayout.EAST);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel10, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 874, Short.MAX_VALUE)
.addComponent(panelPreField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 874, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 874, Short.MAX_VALUE)
.addComponent(jPanel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 874, Short.MAX_VALUE)
.addComponent(jPanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 874, Short.MAX_VALUE)
.addComponent(panelPostField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 874, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 874, Short.MAX_VALUE)
.addComponent(jPanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 874, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelPreField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel10, javax.swing.GroupLayout.DEFAULT_SIZE, 221, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelPostField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void btAddColumnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddColumnActionPerformed
String colName = tfColumnTitle.getText();
if (colName.isEmpty()) {
MessageBox.showWarning(MessageBox.W_COLUMN_NAME_IS_EMPTY);
return;
}
tfColumnTitle.setText("");
for (int i = 0; i < metaItems.size(); i++) {
MetadataValue value = new MetadataValue();
value.id = "id" + headerList.size();
value.title = colName;
value.metric = "";
value.type = "";
value.data = new ArrayList<String>();
metaItems.get(i)[headerList.size()-1] = metaItems.get(i)[headerList.size()-2];
metaItems.get(i)[headerList.size()-2] = value;
}
valQuantity++;
valueIdTitles.add(new ValueIdTitle("id" + headerList.size(), colName));
headerList.add(headerList.size()-1,colName);
setTable();
tfColumnTitle.requestFocus();
}//GEN-LAST:event_btAddColumnActionPerformed
private void btAddRowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddRowActionPerformed
Object[] toAdd = new Object[APP_MAX_COLUMN_COUNT];
MetadataMarker marker = new MetadataMarker();
marker.title = "";
marker.separator = false;
marker.id = "id" + metaItems.size();
toAdd[0] = marker;
for (int i = 1; i <= valQuantity; i++) {
MetadataValue value = new MetadataValue();
value.id = valueIdTitles.get(i-1).id;
value.title = valueIdTitles.get(i-1).title;
value.metric = "";
value.type = "";
value.data = new ArrayList<String>();
toAdd[i] = value;
}
MetadataDesc desc = new MetadataDesc();
desc.title = "";
toAdd[valQuantity + 1] = desc;
metaItems.add(toAdd);
setTable();
}//GEN-LAST:event_btAddRowActionPerformed
private void btDelColumnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDelColumnActionPerformed
int k = tabMetadata.getSelectedColumn();
if (k < 0) {
return;
}
for (int i = 0; i < metaItems.size(); i++) {
if (metaItems.get(i)[k-1] != null) {
if (!(metaItems.get(i)[k-1] instanceof MetadataValue)) {
return;
}
else if (!((MetadataValue)metaItems.get(i)[k-1]).canBeEdit) {
return;
}
else {
break;
}
}
}
for (int i = 0; i < metaItems.size(); i++) {
Object[] subsArr = new Object[APP_MAX_COLUMN_COUNT];
int pos = 0;
for (int j = 0; j < headerList.size() - 1; j++) {
if (j != k - 1) {
subsArr[pos++] = metaItems.get(i)[j];
}
}
metaItems.remove(i);
metaItems.add(i, subsArr);
}
valQuantity--;
headerList.remove(k);
valueIdTitles.remove(k-2);
setTable();
}//GEN-LAST:event_btDelColumnActionPerformed
private void btDelRowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDelRowActionPerformed
int k = tabMetadata.getSelectedRowSorted();
if (k > -1) {
if (((MetadataMarker)metaItems.get(k)[0]).canBeEdit) {
metaItems.remove(k);
setTable();
}
}
}//GEN-LAST:event_btDelRowActionPerformed
private void btOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btOkActionPerformed
try {
if (tabMetadata.isEditing()) {
tabMetadata.getCellEditor().stopCellEditing();
}
if (tfCaption.getText().isEmpty()) {
MessageBox.showWarning(MessageBox.W_CHECKUP_TITLE_NOT_SET);
return;
}
if (!isMetaWellFormed()) {
MessageBox.showWarning(MessageBox.W_NEED_TO_SET_FIELDS);
return;
}
formMeta();
System.out.println(checkupType.getMetadata());
setDlgResult(DLG_OK);
dispose();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btOkActionPerformed
private void btCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelActionPerformed
setDlgResult(DLG_CANCEL);
dispose();
}//GEN-LAST:event_btCancelActionPerformed
private void btEditPostFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btEditPostFieldActionPerformed
try {
ArrayList<FieldForXML> ffxmls = new ArrayList<FieldForXML>();
for (int i = 0; i < postField.size(); i++) {
ffxmls.add(postField.get(i).clone());
}
Set<Integer> ss = new HashSet<Integer>();
for (int i = 0; i < iwTypes.size(); i++) {
ss.add(iwTypes.get(i));
}
DlgEditFieldForXML dlg = new DlgEditFieldForXML(this, ffxmls, ss, getAuditManager());
dlg.setResizable(false);
dlg.setVisible(true);
if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
postField = dlg.getFieldList();
iwTypes.clear();
Object[] is = dlg.getIwID();
for (int i = 0; i < is.length; i++) {
iwTypes.add((Integer) is[i]);
}
formPostFieldList();
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btEditPostFieldActionPerformed
private void btEditPreFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btEditPreFieldActionPerformed
try {
ArrayList<FieldForXML> ffxmls = new ArrayList<FieldForXML>();
for (int i = 0; i < preField.size(); i++) {
ffxmls.add(preField.get(i).clone());
}
Set<Integer> ss = new HashSet<Integer>();
for (int i = 0; i < iwTypes.size(); i++) {
ss.add(iwTypes.get(i));
}
DlgEditFieldForXML dlg = new DlgEditFieldForXML(this, ffxmls, ss, getAuditManager());
dlg.setResizable(false);
dlg.setVisible(true);
if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
preField = dlg.getFieldList();
iwTypes.clear();
Object[] is = dlg.getIwID();
for (int i = 0; i < is.length; i++) {
iwTypes.add((Integer) is[i]);
}
formPreFieldList();
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btEditPreFieldActionPerformed
private void btUpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btUpActionPerformed
int pos = tabMetadata.getSelectedRowSorted();
if (pos > 0) {
Object[] get = metaItems.get(pos);
metaItems.set(pos, metaItems.get(pos-1));
metaItems.set(pos-1, get);
tabMetadata.getSelectionModel().setSelectionInterval(pos-1, pos-1);
}
tabMetadata.updateUI();
}//GEN-LAST:event_btUpActionPerformed
private void btDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDownActionPerformed
int pos = tabMetadata.getSelectedRowSorted();
if (pos < metaItems.size() - 1) {
Object[] get = metaItems.get(pos);
metaItems.set(pos, metaItems.get(pos+1));
metaItems.set(pos+1, get);
tabMetadata.getSelectionModel().setSelectionInterval(pos+1, pos+1);
}
}//GEN-LAST:event_btDownActionPerformed
private void tabMetadataMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabMetadataMouseClicked
if (evt.getClickCount() != 2) {
return;
}
int col = tabMetadata.getSelectedColumn();
int row = tabMetadata.getSelectedRowSorted();
if (tabMetadata.getValueAt(row, col) == null || ((MetadataMarker)metaItems.get(row)[0]).separator
|| col == 0) {
return;
}
if (metaItems.get(row)[col-1].getClass() == MetadataValue.class) {
MetadataValue val = (MetadataValue) ((MetadataValue) metaItems.get(row)[col-1]).clone();
DlgMetaSetTypeMetric dlg = new DlgMetaSetTypeMetric(this, val, getAuditManager());
dlg.setVisible(true);
if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
metaItems.get(row)[col-1] = dlg.getMetadataValue();
}
}
}//GEN-LAST:event_tabMetadataMouseClicked
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btAddColumn;
private javax.swing.JButton btAddRow;
private javax.swing.JButton btCancel;
private javax.swing.JButton btDelColumn;
private javax.swing.JButton btDelRow;
private javax.swing.JButton btDown;
private javax.swing.JButton btEditPostField;
private javax.swing.JButton btEditPreField;
private javax.swing.JButton btOk;
private javax.swing.JButton btUp;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel10;
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.JPanel jPanel7;
private javax.swing.JPanel jPanel8;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JScrollPane jScrollPane4;
private javax.swing.JList lstPostFields;
private javax.swing.JList lstPreFields;
private javax.swing.JPanel panelPostField;
private javax.swing.JPanel panelPreField;
private javax.swing.JTextArea taDescription;
private cli_fmw.utils.sorted_table.SortedTable tabMetadata;
private javax.swing.JTextField tfCaption;
private javax.swing.JTextField tfColumnTitle;
// End of variables declaration//GEN-END:variables
// private void print() {
// if (!isMetaWellFormed()) {
// MessageBox.showWarning(MessageBox.W_NEED_TO_SET_FIELDS);
// return;
// }
// FormReportCreator creater = ReporterFactory.createFormReporter(getClass());
// HashMap<String, Object> preData = new LinkedHashMap<String, Object>();
// HashMap<String, Object> postData = new LinkedHashMap<String, Object>();
// String title = "Метаданные типа ";
// if (checkupType.isAnalyse()) {
// title += "анализа";
// }
// else {
// title += "осмотра";
// }
// title += ": " + tfCaption.getText();
//
// preData.put("workingLife", "Срок годности(дней): " + tfWorkingLife.getText());
// preData.put("description", "Описание: " + taDescription.getText());
//
// if (!checkupType.isAnalyse()) {
// String preFields = "\n";
// ListModel model = lstPreFields.getModel();
// for (int i = 0; i < model.getSize(); i++) {
// preFields += " - " + model.getElementAt(i) + "\n";
// }
// preFields = "Поля перед таблицей:" + preFields;
// preData.put("preField", preFields);
// }
//
// if (!checkupType.isAnalyse()) {
// String postFields = "\n";
// ListModel model = lstPostFields.getModel();
// for (int i = 0; i < model.getSize(); i++) {
// postFields += " - " + model.getElementAt(i) + "\n";
// }
// postFields = "Поля после таблицы:" + postFields;
// postData.put("postField", postFields);
// }
//
// creater.createReport(title, new TableReportOptions(TableReportOptions.PageOrentation.horizontal),
// preData.entrySet(), postData.entrySet(), tabMetadata.getModel());
// creater.finish();
// }
}