medsavant.uhn.cancer.SetCommentStatusDialog.java Source code

Java tutorial

Introduction

Here is the source code for medsavant.uhn.cancer.SetCommentStatusDialog.java

Source

/**
 * See the NOTICE file distributed with this work for additional information
 * regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it under the
 * terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This software 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 Lesser General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this software; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
 * site: http://www.fsf.org.
 */
package medsavant.uhn.cancer;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.Set;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.ut.biolab.medsavant.MedSavantClient;
import org.ut.biolab.medsavant.client.view.login.LoginController;
import org.ut.biolab.medsavant.shared.format.UserRole;
import org.ut.biolab.medsavant.shared.model.UserComment;
import org.ut.biolab.medsavant.shared.model.UserCommentGroup;
import org.ut.biolab.medsavant.shared.model.SessionExpiredException;
import savant.api.util.DialogUtils;

public class SetCommentStatusDialog extends JDialog {

    private Log LOG = LogFactory.getLog(SetCommentStatusDialog.class);
    private final UserCommentGroup lcg;
    private final UserComment parentComment;
    private JTextArea comment;
    private StatusIconPanel statusIconPanel;

    private static final int MINIMUM_WIDTH = 640;
    private static final int MINIMUM_HEIGHT = 480;

    private static final int ICON_HEIGHT = 64;
    private static final int ICON_WIDTH = 64;
    private final int mainPanelWidth;
    private final int mainPanelHeight;

    public SetCommentStatusDialog(JFrame parentFrame, UserCommentGroup lcg, UserComment parentComment) {
        super(parentFrame);
        System.out.println(
                "Constructing setcomment status dialog with parentComment id=" + parentComment.getCommentID());
        this.parentComment = parentComment;
        this.lcg = lcg;
        JPanel mainPanel = getMainPanel();
        this.add(mainPanel);
        Dimension pd = parentFrame.getSize();
        mainPanelWidth = Math.max(MINIMUM_WIDTH, pd.width / 2);
        mainPanelHeight = Math.max(MINIMUM_HEIGHT, pd.height / 2);
        this.setPreferredSize(new Dimension(mainPanelWidth, mainPanelHeight));
        this.pack();
        this.setModal(true);
    }

    private JPanel getMainPanel() {
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        //Status box.
        mainPanel.add(getStatusEditorPanel());

        //Comment box.
        JPanel p = new JPanel();
        p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
        p.add(Box.createHorizontalGlue());
        comment = new JTextArea();
        p.add(comment);
        p.add(Box.createHorizontalGlue());
        mainPanel.add(p);

        //Button box.        
        p = new JPanel();
        p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
        p.add(Box.createHorizontalGlue());
        JButton OKButton = new JButton("Update status");
        OKButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    updateStatus();
                    dispose();
                } catch (Exception ex) {
                    LOG.error(ex.getMessage(), ex);
                    DialogUtils.displayException("Error", ex.getMessage(), ex);
                }
            }
        });

        JButton cancelButton = new JButton("Cancel");
        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        p.add(OKButton);
        p.add(cancelButton);
        p.add(Box.createHorizontalGlue());
        mainPanel.add(p);

        return mainPanel;
    }

    private JPanel getStatusEditorPanel() {
        JPanel p = new JPanel();
        p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
        p.add(Box.createHorizontalGlue());
        statusIconPanel = new StatusIconPanel(ICON_WIDTH, ICON_HEIGHT, true, parentComment.isApproved(),
                parentComment.isIncluded(), parentComment.isDeleted());
        p.add(statusIconPanel);
        p.add(Box.createHorizontalGlue());
        return p;
    }

    private void updateStatus() throws SessionExpiredException, SQLException, RemoteException {
        String sessID = LoginController.getSessionID();
        UserComment lc = new UserComment(parentComment, statusIconPanel.getApprovedIcon().getState(),
                statusIconPanel.getIncludedIcon().getState(), statusIconPanel.getDeletedIcon().getState(),
                comment.getText());

        MedSavantClient.VariantManager.replyToUserCommentGroup(sessID, lcg.getUserCommentGroupId(), lc);
    }
}