de.bund.bfr.knime.pmm.manualmodelconf.ui.MMC_TS.java Source code

Java tutorial

Introduction

Here is the source code for de.bund.bfr.knime.pmm.manualmodelconf.ui.MMC_TS.java

Source

/*******************************************************************************
 * Copyright (c) 2015 Federal Institute for Risk Assessment (BfR), Germany
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Contributors:
 *     Department Biological Safety - BfR
 *******************************************************************************/
package de.bund.bfr.knime.pmm.manualmodelconf.ui;

import java.awt.event.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;
import javax.swing.border.*;

import org.hsh.bfr.db.DBKernel;
import org.hsh.bfr.db.MyTable;
import org.jdom2.JDOMException;

import com.jgoodies.forms.factories.*;
import com.jgoodies.forms.layout.*;

import de.bund.bfr.knime.pmm.common.AgentXml;
import de.bund.bfr.knime.pmm.common.MatrixXml;
import de.bund.bfr.knime.pmm.common.MdInfoXml;
import de.bund.bfr.knime.pmm.common.PmmConstants;
import de.bund.bfr.knime.pmm.common.PmmException;
import de.bund.bfr.knime.pmm.common.PmmTimeSeries;
import de.bund.bfr.knime.pmm.common.PmmXmlDoc;
import de.bund.bfr.knime.pmm.common.PmmXmlElementConvertable;
import de.bund.bfr.knime.pmm.common.math.MathUtilities;
import de.bund.bfr.knime.pmm.common.pmmtablemodel.AttributeUtilities;
import de.bund.bfr.knime.pmm.common.pmmtablemodel.TimeSeriesSchema;
import de.bund.bfr.knime.pmm.common.ui.*;
import de.bund.bfr.knime.pmm.common.units.Categories;

/**
 * @author Armin Weiser
 */
public class MMC_TS extends JPanel {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private PmmTimeSeries theTS;

    public MMC_TS() {
        initComponents();
        theTS = null;
    }

    public Integer getCondId() {
        return theTS == null ? null : theTS.getCondId();
    }

    public PmmTimeSeries getTS() throws PmmException {
        fillTS();
        return theTS;
    }

    /*
    private PmmTimeSeries getNewTS() {
       if (!temperatureField.isValueValid()) {
     throw new PmmException("Invalid Value");
       }
        
       if (!phField.isValueValid()) {
     throw new PmmException("Invalid Value");
       }
        
       if (!waterActivityField.isValueValid()) {
     throw new PmmException("Invalid Value");
       }
        
       PmmTimeSeries tuple = new PmmTimeSeries();
        
       int agentID = MathUtilities.getRandomNegativeInt();
       int matrixID = MathUtilities.getRandomNegativeInt();
       try {agentID = Integer.parseInt(agensIDField.getText());}
       catch (Exception e) {}
       try {matrixID = Integer.parseInt(matrixIDField.getText());}
       catch (Exception e) {}
           
       PmmXmlDoc matDoc = new PmmXmlDoc(); 
       MatrixXml mx = new MatrixXml(matrixID, matrixField.getText(), matrixDetailField.getText());
       matDoc.add(mx);
       tuple.setValue(TimeSeriesSchema.ATT_MATRIX, matDoc);
       PmmXmlDoc agtDoc = new PmmXmlDoc(); 
       AgentXml ax = new AgentXml(agentID, agentField.getText(), agensDetailField.getText());
       agtDoc.add(ax);
       tuple.setValue(TimeSeriesSchema.ATT_AGENT, agtDoc);
       PmmXmlDoc mdInfoDoc = new PmmXmlDoc();
       int ri = MathUtilities.getRandomNegativeInt();
       if (theTS != null) ri = theTS.getCondId();
       MdInfoXml mdix = new MdInfoXml(ri, "i"+ri, commentField.getText(), null, null);
       mdInfoDoc.add(mdix);
       tuple.setValue(TimeSeriesSchema.ATT_MDINFO, mdInfoDoc);
       tuple.setValue(TimeSeriesSchema.ATT_LITMD, new PmmXmlDoc());
       tuple.setCondId(ri);
       tuple.addMisc(AttributeUtilities.ATT_TEMPERATURE_ID,AttributeUtilities.ATT_TEMPERATURE,AttributeUtilities.ATT_TEMPERATURE,temperatureField.getValue(),"C");
       tuple.addMisc(AttributeUtilities.ATT_PH_ID,AttributeUtilities.ATT_PH,AttributeUtilities.ATT_PH,phField.getValue(),null);
       tuple.addMisc(AttributeUtilities.ATT_AW_ID,AttributeUtilities.ATT_WATERACTIVITY,AttributeUtilities.ATT_WATERACTIVITY,waterActivityField.getValue(),null);
        
       return tuple;      
    }
    */
    private void fillTS() {
        // @Todo: dbuuid muss evtl. noch angepasst werden!!!! in MatrixXml, AgentXml
        if (theTS == null)
            theTS = new PmmTimeSeries();

        int agentID = MathUtilities.getRandomNegativeInt();
        int matrixID = MathUtilities.getRandomNegativeInt();
        try {
            agentID = Integer.parseInt(agensIDField.getText());
        } catch (Exception e) {
        }
        try {
            matrixID = Integer.parseInt(matrixIDField.getText());
        } catch (Exception e) {
        }

        PmmXmlDoc matDoc = new PmmXmlDoc();
        MatrixXml mx = new MatrixXml(matrixID, matrixField.getText(), matrixDetailField.getText(), null);
        matDoc.add(mx);
        theTS.setValue(TimeSeriesSchema.ATT_MATRIX, matDoc);

        PmmXmlDoc agtDoc = new PmmXmlDoc(); //theTS.getAgent();
        AgentXml ax = new AgentXml(agentID, agentField.getText(), agensDetailField.getText(), null);
        agtDoc.add(ax);
        theTS.setValue(TimeSeriesSchema.ATT_AGENT, agtDoc);

        PmmXmlDoc mdInfoDoc = theTS.getMdInfo();
        MdInfoXml mdix = (MdInfoXml) mdInfoDoc.get(0);
        mdix.setComment(commentField.getText());
        mdInfoDoc = new PmmXmlDoc();
        mdInfoDoc.add(mdix);
        theTS.setValue(TimeSeriesSchema.ATT_MDINFO, mdInfoDoc);

        List<String> cl = new ArrayList<>();
        cl.add("Temperature");
        theTS.addMisc(AttributeUtilities.ATT_TEMPERATURE_ID, AttributeUtilities.ATT_TEMPERATURE,
                AttributeUtilities.ATT_TEMPERATURE, temperatureField.getValue(), cl,
                tempUnit.getSelectedIndex() >= 0 ? tempUnit.getSelectedItem().toString() : "C");
        cl = new ArrayList<>();
        cl.add(Categories.getPhCategory().getName());
        theTS.addMisc(AttributeUtilities.ATT_PH_ID, AttributeUtilities.ATT_PH, AttributeUtilities.ATT_PH,
                phField.getValue(), cl, Categories.getPhCategory().getAllUnits().toArray(new String[0])[0]);
        cl = new ArrayList<>();
        cl.add(Categories.getAwCategory().getName());
        theTS.addMisc(AttributeUtilities.ATT_AW_ID, AttributeUtilities.ATT_AW, AttributeUtilities.ATT_AW,
                waterActivityField.getValue(), cl,
                Categories.getAwCategory().getAllUnits().toArray(new String[0])[1]);
    }

    private void fillFields() {
        agentField.setText(theTS.getAgentName() == null ? "" : theTS.getAgentName());
        matrixField.setText(theTS.getMatrixName() == null ? "" : theTS.getMatrixName());
        agensDetailField.setText(theTS.getAgentDetail() == null ? "" : theTS.getAgentDetail());
        matrixDetailField.setText(theTS.getMatrixDetail() == null ? "" : theTS.getMatrixDetail());
        agensIDField.setText(theTS.getAgentId() == null ? "" : theTS.getAgentId() + "");
        matrixIDField.setText(theTS.getMatrixId() == null ? "" : theTS.getMatrixId() + "");
        commentField.setText(theTS.getComment());
        if (theTS.getTemperature() != null && !Double.isNaN(theTS.getTemperature()))
            temperatureField.setValue(theTS.getTemperature());
        else
            temperatureField.setText("");
        if (theTS.getTemperatureUnit() != null)
            tempUnit.setSelectedItem(theTS.getTemperatureUnit());
        else
            tempUnit.setSelectedIndex(-1);
        if (theTS.getPh() != null && !Double.isNaN(theTS.getPh()))
            phField.setValue(theTS.getPh());
        else
            phField.setText("");
        if (theTS.getWaterActivity() != null && !Double.isNaN(theTS.getWaterActivity()))
            waterActivityField.setValue(theTS.getWaterActivity());
        else
            waterActivityField.setText("");
    }

    public void setTS(PmmTimeSeries ts) throws PmmException {
        theTS = ts;
        fillFields();
    }

    public void setTS(String agent, String agentDetail, Integer agentID, String matrix, String matrixDetail,
            Integer matrixID, String comment, double temperature, String tempUnit, double ph, double aw)
            throws PmmException {

        theTS = new PmmTimeSeries();

        PmmXmlDoc matDoc = new PmmXmlDoc();
        MatrixXml mx = new MatrixXml(matrixID, matrix, matrixDetail);
        matDoc.add(mx);
        theTS.setValue(TimeSeriesSchema.ATT_MATRIX, matDoc);
        PmmXmlDoc agtDoc = new PmmXmlDoc();
        AgentXml ax = new AgentXml(agentID, agent, agentDetail);
        agtDoc.add(ax);
        theTS.setValue(TimeSeriesSchema.ATT_AGENT, agtDoc);
        PmmXmlDoc mdInfoDoc = new PmmXmlDoc();
        int ri = MathUtilities.getRandomNegativeInt();
        if (theTS != null)
            ri = theTS.getCondId();
        MdInfoXml mdix = new MdInfoXml(ri, "i" + ri, comment, null, null);
        mdInfoDoc.add(mdix);
        theTS.setValue(TimeSeriesSchema.ATT_MDINFO, mdInfoDoc);
        theTS.setValue(TimeSeriesSchema.ATT_LITMD, new PmmXmlDoc());
        theTS.setCondId(ri);
        List<String> cl = new ArrayList<>();
        cl.add("Temperature");
        theTS.addMisc(AttributeUtilities.ATT_TEMPERATURE_ID, AttributeUtilities.ATT_TEMPERATURE,
                AttributeUtilities.ATT_TEMPERATURE, temperature, cl, tempUnit);
        theTS.addMisc(AttributeUtilities.ATT_PH_ID, AttributeUtilities.ATT_PH, AttributeUtilities.ATT_PH, ph, null,
                null);
        theTS.addMisc(AttributeUtilities.ATT_AW_ID, AttributeUtilities.ATT_AW, AttributeUtilities.ATT_AW, aw, null,
                null);

        fillFields();
        /*
        agentField.setText(agent);
        agensDetailField.setText(agentDetail);
        agensIDField.setText(agentID+"");
        matrixField.setText(matrix);
        matrixDetailField.setText(matrixDetail);
        matrixIDField.setText(matrixID+"");
        commentField.setText(comment);
        if (!Double.isNaN(temp)) temperatureField.setValue(temp); else temperatureField.setValue(null);
        if (!Double.isNaN(ph)) phField.setValue(ph); else phField.setValue(null);
        if (!Double.isNaN(aw)) waterActivityField.setValue(aw); else waterActivityField.setValue(null);
        */
    }

    public void setTS(String xmlString) {
        try {
            PmmXmlDoc doc = new PmmXmlDoc(xmlString);
            for (int i = 0; i < doc.size(); i++) {
                PmmXmlElementConvertable el = doc.get(i);
                if (el instanceof PmmTimeSeries) {
                    PmmTimeSeries ts = (PmmTimeSeries) el;
                    setTS(ts);
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JDOMException e) {
            e.printStackTrace();
        }
    }

    private void button1ActionPerformed(ActionEvent e) {
        MyTable age = DBKernel.myDBi.getTable("Agenzien");
        Integer agensID = null;
        try {
            agensID = Integer.parseInt(agensIDField.getText());
        } catch (Exception e1) {
        }
        Object newVal = DBKernel.mainFrame.openNewWindow(age, agensID, (Object) "Agenzien", null, 1, 1, null, true,
                null, this);
        if (newVal != null && newVal instanceof Integer) {
            Object agensname = DBKernel.getValue("Agenzien", "ID", newVal.toString(), "Agensname");
            agentField.setText(agensname + "");
            agensIDField.setText("" + newVal);
            agensDetailField.setText("");
        } else {
            agentField.setText("");
            agensIDField.setText("");
            agensDetailField.setText("");
        }
    }

    private void button2ActionPerformed(ActionEvent e) {
        MyTable mat = DBKernel.myDBi.getTable("Matrices");
        Integer matrixID = null;
        try {
            matrixID = Integer.parseInt(matrixIDField.getText());
        } catch (Exception e1) {
        }
        Object newVal = DBKernel.mainFrame.openNewWindow(mat, matrixID, (Object) "Matrices", null, 1, 1, null, true,
                null, this);
        if (newVal != null && newVal instanceof Integer) {
            Object matrixname = DBKernel.getValue("Matrices", "ID", newVal.toString(), "Matrixname");
            matrixField.setText(matrixname + "");
            matrixIDField.setText("" + newVal);
            matrixDetailField.setText("");
        } else {
            matrixField.setText("");
            matrixIDField.setText("");
            matrixDetailField.setText("");
        }
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        agentLabel = new JLabel();
        agentField = new StringTextField(true);
        button1 = new JButton();
        agensDetailField = new StringTextField(true);
        agensIDField = new JTextField();
        matrixLabel = new JLabel();
        matrixField = new StringTextField(true);
        button2 = new JButton();
        matrixDetailField = new StringTextField(true);
        matrixIDField = new JTextField();
        commentLabel = new JLabel();
        commentField = new StringTextField(true);
        tempLabel = new JLabel();
        temperatureField = new DoubleTextField(true);
        tempUnit = new JComboBox<>();
        phLabel = new JLabel();
        phField = new DoubleTextField(PmmConstants.MIN_PH, PmmConstants.MAX_PH, true);
        awLabel = new JLabel();
        waterActivityField = new DoubleTextField(PmmConstants.MIN_WATERACTIVITY, PmmConstants.MAX_WATERACTIVITY,
                true);

        //======== this ========
        setBorder(new CompoundBorder(new TitledBorder("Microbial Data Properties"), Borders.DLU2));
        setLayout(new FormLayout(
                "default, $lcgap, default:grow, $lcgap, default, $lcgap, default:grow, $lcgap, default",
                "5*(default, $lgap), default"));

        //---- agentLabel ----
        agentLabel.setText("Agent:");
        agentLabel.setText(AttributeUtilities.getName(TimeSeriesSchema.ATT_AGENT) + ":");
        add(agentLabel, CC.xy(1, 1));

        //---- agentField ----
        agentField.setEditable(false);
        add(agentField, CC.xy(3, 1));

        //---- button1 ----
        button1.setText("...");
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                button1ActionPerformed(e);
            }
        });
        add(button1, CC.xy(5, 1));

        //---- agensDetailField ----
        agensDetailField.setColumns(4);
        add(agensDetailField, CC.xy(7, 1));

        //---- agensIDField ----
        agensIDField.setColumns(5);
        agensIDField.setVisible(false);
        add(agensIDField, CC.xy(9, 1));

        //---- matrixLabel ----
        matrixLabel.setText("Matrix:");
        matrixLabel.setText(AttributeUtilities.getName(TimeSeriesSchema.ATT_MATRIX) + ":");
        add(matrixLabel, CC.xy(1, 3));

        //---- matrixField ----
        matrixField.setEditable(false);
        add(matrixField, CC.xy(3, 3));

        //---- button2 ----
        button2.setText("...");
        button2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                button2ActionPerformed(e);
            }
        });
        add(button2, CC.xy(5, 3));

        //---- matrixDetailField ----
        matrixDetailField.setColumns(5);
        add(matrixDetailField, CC.xy(7, 3));

        //---- matrixIDField ----
        matrixIDField.setColumns(5);
        matrixIDField.setVisible(false);
        add(matrixIDField, CC.xy(9, 3));

        //---- commentLabel ----
        commentLabel.setText(":");
        commentLabel.setText(AttributeUtilities.getName(MdInfoXml.ATT_COMMENT) + ":");
        add(commentLabel, CC.xy(1, 5));
        add(commentField, CC.xywh(3, 5, 5, 1));

        //---- tempLabel ----
        tempLabel.setText("Temperature:");
        tempLabel.setText(AttributeUtilities.getName(AttributeUtilities.ATT_TEMPERATURE) + ":");
        add(tempLabel, CC.xy(1, 7));
        add(temperatureField, CC.xywh(3, 7, 3, 1));

        //---- tempUnit ----
        tempUnit.setModel(new DefaultComboBoxModel<>(new String[] { "\u00b0C", "\u00b0F", "K" }));
        add(tempUnit, CC.xy(7, 7));

        //---- phLabel ----
        phLabel.setText("pH:");
        phLabel.setText(AttributeUtilities.getName(AttributeUtilities.ATT_PH) + ":");
        add(phLabel, CC.xy(1, 9));
        add(phField, CC.xywh(3, 9, 5, 1));

        //---- awLabel ----
        awLabel.setText("aw:");
        awLabel.setText(AttributeUtilities.getName(AttributeUtilities.ATT_AW) + ":");
        add(awLabel, CC.xy(1, 11));
        add(waterActivityField, CC.xywh(3, 11, 5, 1));
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    private JLabel agentLabel;
    private StringTextField agentField;
    private JButton button1;
    private StringTextField agensDetailField;
    private JTextField agensIDField;
    private JLabel matrixLabel;
    private StringTextField matrixField;
    private JButton button2;
    private StringTextField matrixDetailField;
    private JTextField matrixIDField;
    private JLabel commentLabel;
    private StringTextField commentField;
    private JLabel tempLabel;
    private DoubleTextField temperatureField;
    private JComboBox<String> tempUnit;
    private JLabel phLabel;
    private DoubleTextField phField;
    private JLabel awLabel;
    private DoubleTextField waterActivityField;
    // JFormDesigner - End of variables declaration  //GEN-END:variables
}