Package clips.directory.editors.checkUpType

Source Code of clips.directory.editors.checkUpType.DlgMetadataEdit$ValueIdTitle

/*
* 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();
//    }
}
TOP

Related Classes of clips.directory.editors.checkUpType.DlgMetadataEdit$ValueIdTitle

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.