Java tutorial
/* * Copyright (c) 2006-2007 Massachusetts General Hospital * All rights reserved. This program and the accompanying materials * are made available under the terms of the i2b2 Software License v1.0 * which accompanies this distribution. * * Contributors: * Wensong Pan */ package edu.harvard.i2b2.query.ui; /* * QueryTopPanel.java * * Created on August 2, 2006, 9:04 AM */ import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import javax.swing.*; import javax.xml.bind.JAXBElement; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.part.ViewPart; import edu.harvard.i2b2.common.util.jaxb.JAXBUtil; import edu.harvard.i2b2.common.util.jaxb.JAXBUnWrapHelper; import edu.harvard.i2b2.query.data.QueryConceptTreeNodeData; import edu.harvard.i2b2.query.data.QueryMasterData; import edu.harvard.i2b2.query.data.QueryResultData; import edu.harvard.i2b2.query.datavo.QueryJAXBUtil; import edu.harvard.i2b2.query.ui.QueryConceptTreePanel.QueryDataTransferable; import edu.harvard.i2b2.crcxmljaxb.datavo.dnd.DndType; import edu.harvard.i2b2.crcxmljaxb.datavo.i2b2message.*; import edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ItemType; import edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.MasterInstanceResultResponseType; import edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.PanelType; import edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.QueryDefinitionRequestType; import edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.QueryDefinitionType; import edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.QueryResultInstanceType; import edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ItemType.ConstrainByDate; import edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ItemType.ConstrainByValue; import edu.harvard.i2b2.eclipse.ICommonMethod; import edu.harvard.i2b2.eclipse.UserInfoBean; public class QueryTopPanel extends javax.swing.JPanel { private static final Log log = LogFactory.getLog(QueryTopPanel.class); private QueryTopPanelModel dataModel; private String response = null; public QueryPanel parentPanel; private int max_child = 1000; private long lEventTime = 0; public void max_child(int i) { max_child = i; } public int max_child() { return max_child; } private Thread queryThread = null; private boolean firsttime = true; // for the start up bug on windows 2000 /** Creates new form QueryTopPanel */ public QueryTopPanel(QueryPanel parent) { parentPanel = parent; dataModel = parent.dataModel(); UIManager.put("Label.font", new Font("Tahoma", Font.PLAIN, 11)); UIManager.put("Button.font", new Font("Tahoma", Font.PLAIN, 11)); UIManager.put("TextField.font", new Font("Tahoma", Font.PLAIN, 11)); UIManager.put("CheckBox.font", new Font("Tahoma", Font.PLAIN, 11)); UIManager.put("RadioButton.font", new Font("Tahoma", Font.PLAIN, 11)); UIManager.put("Tree.font", new Font("Tahoma", Font.PLAIN, 11)); UIManager.put("ComboBox.font", new Font("Tahoma", Font.PLAIN, 11)); initComponents(); jGetPatientCountCheckBox.setSelected(true); jShowTimelineCheckBox.setSelected(true); addComponentListener(new java.awt.event.ComponentAdapter() { @Override public void componentMoved(java.awt.event.ComponentEvent evt) { // formComponentMoved(evt); } @Override public void componentResized(java.awt.event.ComponentEvent evt) { // formComponentResized(evt); // System.out.println("waiting panel resizing ..."); int width = (getParent().getWidth()); int height = (getParent().getHeight()); if (width < 5 || height < 5) { return; } resizePanels(width, height); // log.info("width: "+width+", height: "+height); if (firsttime) { firsttime = false; resizePanels(width, height + 3); // log.info("second width: "+width+", height: "+(height+3)); } } }); } public JButton getRunQueryButton() { return jRunQueryButton; } public JButton getDeleteButton() { return jDeleteButton; } /** * This method is called from within the constructor to initialize the form. */ private void initComponents() { jNameLabel = new javax.swing.JLabel(); jSetSizeLabel = new javax.swing.JLabel(); jNameTextField = new javax.swing.JTextField(); jSetSizeFiled = new javax.swing.JLabel(); jDeleteButton = new javax.swing.JButton(); jScrollPane1 = new QueryConceptTreePanel("Group 1", this); jRunQueryButton = new javax.swing.JButton(); jCancelButton = new javax.swing.JButton(); jClearGroupsButton = new javax.swing.JButton(); jScrollPane2 = new QueryConceptTreePanel("Group 2", this); jScrollPane3 = new QueryConceptTreePanel("Group 3", this); jScrollPane4 = new javax.swing.JScrollPane(); jPanel1 = new javax.swing.JPanel(); // jVisitComboBox = new javax.swing.JComboBox(); jAndOrLabel1 = new javax.swing.JLabel(); jAndOrLabel2 = new javax.swing.JLabel(); jMorePanelsButton = new javax.swing.JButton(); jWorkflowToolBar = new javax.swing.JToolBar(); jTimelineToggleButton = new javax.swing.JToggleButton(); jPatientCountToggleButton = new javax.swing.JToggleButton(); jPatientSetToggleButton = new javax.swing.JToggleButton(); jToolbarPanel = new javax.swing.JPanel(); jQueryNamePanel = new javax.swing.JPanel(); jOptionsScrollPane = new javax.swing.JScrollPane(); jOptionsPanel = new javax.swing.JPanel(); jShowTimelineCheckBox = new javax.swing.JCheckBox(); jGetPatientCountCheckBox = new javax.swing.JCheckBox(); jGetPatientSetCheckBox = new javax.swing.JCheckBox(); setLayout(null); // jScrollPane4.setHorizontalScrollBarPolicy(javax.swing. // ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); jPanel1.setLayout(null); jPanel1.add(jScrollPane1); jScrollPane1.setBounds(0, 0, 180, 200); jPanel1.add(jScrollPane2); jScrollPane2.setBounds(185, 0, 180, 200); jPanel1.add(jScrollPane3); jScrollPane3.setBounds(370, 0, 180, 200); //jAndOrLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER) // ; jAndOrLabel1.setText("and"); //jAndOrLabel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()) // ; // jPanel1.add(jAndOrLabel1); // jAndOrLabel1.setBounds(190, 90, 30, 18); //jAndOrLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER) // ; // jAndOrLabel2.setText("and"); //jAndOrLabel2.setBorder(javax.swing.BorderFactory.createEtchedBorder()) // ; // jPanel1.add(jAndOrLabel2); // jAndOrLabel2.setBounds(410, 90, 30, 18); jQueryNamePanel.setLayout(null); jQueryNamePanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jNameLabel.setText(" Query Name: "); jNameLabel.setToolTipText("You may drag this item to workplace to save the query definition"); jNameLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jNameLabel.setBounds(2, 2, 70, 23); add(jNameLabel); // jQueryNamePanel.add(jNameLabel); jNameLabel.setTransferHandler(new NameLabelTextHandler()); jNameLabel.addMouseListener(new DragMouseAdapter()); jNameLabel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseMoved(java.awt.event.MouseEvent evt) { jNameLabelMouseMoved(evt); } }); jNameLabel.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseExited(java.awt.event.MouseEvent evt) { jNameLabelMouseExited(evt); } }); jNameTextField.setText(""); jNameTextField.setBounds(95, 10, 400, 20); jNameTextField.setEditable(false); jNameTextField.setDragEnabled(true); jNameTextField.setTransferHandler(new TransferHandler("Text")); // jQueryNamePanel.add(jNameTextField); // add(jNameTextField); // add(jQueryNamePanel); // jQueryNamePanel.setBounds(5, 5, 400, 50); jClearGroupsButton.setText("Reset Groups"); jClearGroupsButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jClearGroupsButtonActionPerformed(evt); } }); jClearGroupsButton.setBounds(600, 10, 115, 20); add(jClearGroupsButton); jPanel1.setPreferredSize(new Dimension(700, 150)); jScrollPane4.setViewportView(jPanel1); add(jScrollPane4); jScrollPane4.setBounds(20, 35, 635, 220); jScrollPane4.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane4.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); jCancelButton.setText("Cancel"); jCancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCancelButtonActionPerformed(evt); } }); // add(jCancelButton); // jCancelButton.setBounds(20, 255, 90, 23); // jCancelButton.setFont(new Font("Tahoma", Font.PLAIN, 10)); jRunQueryButton.setText("Run Query"); jRunQueryButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRunQueryButtonActionPerformed(evt); } }); add(jRunQueryButton); jRunQueryButton.setBounds(100, 255, 625, 23); jSetSizeLabel.setText(" Patient(s) returned:"); add(jSetSizeLabel); jSetSizeLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jSetSizeLabel.setBounds(20, 275, 70, 23); // jSetSizeFiled.setText(" subjects"); // jSetSizeFiled.setEditable(false); // jSetSizeFiled.setHorizontalAlignment(SwingConstants.LEFT); // add(jSetSizeFiled); // jSetSizeLabel.setBounds(20, 275, 70, 23); jToolbarPanel.setLayout(new java.awt.BorderLayout()); // jWorkflowToolBar.setRollover(true); // jWorkflowToolBar.setInheritsPopupMenu(true); jTimelineToggleButton.setIcon( new javax.swing.ImageIcon("C:\\Documents and Settings\\wp066\\My Documents\\icons\\wb16.gif")); jTimelineToggleButton.setText("Show TimeLine"); jTimelineToggleButton.setFocusPainted(false); jWorkflowToolBar.add(jTimelineToggleButton); jPatientCountToggleButton.setIcon( new javax.swing.ImageIcon("C:\\Documents and Settings\\wp066\\My Documents\\icons\\wb16.gif")); jPatientCountToggleButton.setText("Get Patient Count"); jPatientCountToggleButton.setFocusPainted(false); jWorkflowToolBar.add(jPatientCountToggleButton); jPatientSetToggleButton.setIcon( new javax.swing.ImageIcon("C:\\Documents and Settings\\wp066\\My Documents\\icons\\wb16.gif")); jPatientSetToggleButton.setText("Get Patient Set"); jPatientSetToggleButton.setFocusPainted(false); jWorkflowToolBar.add(jPatientSetToggleButton); jWorkflowToolBar.setPreferredSize(new Dimension(380, 40)); jToolbarPanel.add(jWorkflowToolBar, java.awt.BorderLayout.PAGE_START); jToolbarPanel.add(jWorkflowToolBar, java.awt.BorderLayout.CENTER); // add(jToolbarPanel); jToolbarPanel.setBounds(20, 130, 240, 23); jMorePanelsButton.setText("<html><center>Add<br>" + "<left>Group"); jMorePanelsButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMorePanelsButtonActionPerformed(evt); } }); // add(jMorePanelsButton); // jMorePanelsButton.setBounds(655, 35, 60, 220); jPanel1.add(jMorePanelsButton); jMorePanelsButton.setBounds(550, 0, 60, 200); jOptionsPanel.setLayout(null); jOptionsScrollPane.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jOptionsPanel.setPreferredSize(new java.awt.Dimension(100, 100)); jShowTimelineCheckBox.setText("Timeline"); jShowTimelineCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); jShowTimelineCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0)); jShowTimelineCheckBox.setToolTipText("Get the patient set and display it in timeline view"); jOptionsPanel.add(jShowTimelineCheckBox); jShowTimelineCheckBox.setBounds(5, 20, 110, 15); jGetPatientCountCheckBox.setText("Patient Count"); jGetPatientCountCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); jGetPatientCountCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0)); jGetPatientCountCheckBox.setToolTipText("Get the patient count XML"); jOptionsPanel.add(jGetPatientCountCheckBox); jGetPatientCountCheckBox.setBounds(5, 50, 110, 15); jGetPatientSetCheckBox.setText("Patient Set"); jGetPatientSetCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); jGetPatientSetCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0)); // jOptionsPanel.add(jGetPatientSetCheckBox); // jGetPatientSetCheckBox.setBounds(10, 80, 80, 15); jOptionsScrollPane.setViewportView(jOptionsPanel); add(jOptionsScrollPane); jOptionsScrollPane.setBounds(500, 30, 120, 190); /* * jDeleteButton.setText("Delete"); jDeleteButton.addActionListener(new * java.awt.event.ActionListener() { public void * actionPerformed(java.awt.event.ActionEvent evt) { * jDeleteButtonActionPerformed(evt); } }); * * jVisitComboBox.setModel(new javax.swing.DefaultComboBoxModel(new * String[] { "Groups don't have to occur in the same visit", "Groups * must all occur in the same visit" })); add(jVisitComboBox); * jVisitComboBox.setBounds(20, 40, 240, 22); * * //add(jDeleteButton); //jDeleteButton.setBounds(20, 10, 65, 23); * * add(jScrollPane1); jScrollPane1.setBounds(20, 70, 170, 320); * * jRunQueryButton.setText("Run Query"); * jRunQueryButton.addActionListener(new java.awt.event.ActionListener() * { public void actionPerformed(java.awt.event.ActionEvent evt) { * jRunQueryButtonActionPerformed(evt); } }); * * add(jRunQueryButton); jRunQueryButton.setBounds(20, 10, 87, 23); * * jCancelButton.setText("Remove All"); * jCancelButton.addActionListener(new java.awt.event.ActionListener() { * public void actionPerformed(java.awt.event.ActionEvent evt) { * jRemoveAllButtonActionPerformed(evt); } }); * * add(jCancelButton); jCancelButton.setBounds(115, 10, 90, 23); * * //jScrollPane4.setHorizontalScrollBarPolicy(javax.swing. * ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); * jPanel1.setLayout(null); * jScrollPane4.getHorizontalScrollBar().setUnitIncrement(20); * //jPanel1.setVisible(false); * * //jScrollPane1.setToolTipText("scrollpane 1"); * jPanel1.add(jScrollPane1); jScrollPane1.setBounds(0, 0, 170, 350); * * jPanel1.add(jScrollPane2); jScrollPane2.setBounds(210, 0, 170, 350); */ jAndOrLabel1.setBackground(new java.awt.Color(255, 255, 255)); jAndOrLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jAndOrLabel1.setText("and"); jAndOrLabel1.setToolTipText("Click to change the relationship"); jAndOrLabel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jAndOrLabel1.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { jAndOrLabel1MouseClicked(evt); } }); // jPanel1.add(jAndOrLabel1); jAndOrLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jAndOrLabel2.setText("and"); jAndOrLabel2.setToolTipText("Click to change the relationship"); jAndOrLabel2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jAndOrLabel2.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { jAndOrLabel2MouseClicked(evt); } }); // jPanel1.add(jAndOrLabel2); /* * jPanel1.add(jScrollPane3); jScrollPane3.setBounds(420, 0, 170, 350); * * jScrollPane4.setViewportView(jPanel1); * * add(jScrollPane4); jScrollPane4.setBounds(20, 70, 594, 370); * * jMorePanelsButton.setText("Add Panel"); * jMorePanelsButton.addActionListener(new * java.awt.event.ActionListener() { public void * actionPerformed(java.awt.event.ActionEvent evt) { * jMorePanelsButtonActionPerformed(evt); } }); * * add(jMorePanelsButton); jMorePanelsButton.setBounds(215, 10, 90, 23); */ // jTree1.addTreeWillExpandListener(this); // jTree1.addTreeExpansionListener(this); // jScrollPane1.setViewportView(new QueryConceptTreePanel("Group 1")); // jScrollPane1.setToolTipText("Double click on a folder to view the // items inside"); // jTree2.addTreeExpansionListener(this); // jScrollPane2.setViewportView(new QueryConceptTreePanel("Group 2")); // jTree3.addTreeExpansionListener(this); // treepanel = new QueryConceptTreePanel("", this); // jScrollPane3.setViewportView(new QueryConceptTreePanel("Group 3")); // jSlider1.setMajorTickSpacing(20); /* * jSlider1.setPaintTicks(true); jSlider1.setValue(0); * jSlider1.setMinorTickSpacing(10); jSlider1.setToolTipText("Slider on * left is more Sensitive Query, " + "on right is more Specific"); * add(jSlider1); jSlider1.setBounds(380, 40, 140, 18); * * //jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); * jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); * jLabel1.setText("Sensitivity <"); add(jLabel1); * jLabel1.setBounds(290, 40, 80, 20); * * //jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11)); * jLabel2.setText("> Specificity"); add(jLabel2); * jLabel2.setBounds(525, 40, 70, 20); */ dataModel.addPanel(jScrollPane1, null, 0); dataModel.addPanel(jScrollPane2, jAndOrLabel1, 0); dataModel.addPanel(jScrollPane3, jAndOrLabel2, 555); } @SuppressWarnings("deprecation") private void cancel() { // System.out.println("Cancel action"); if (queryThread != null) { queryThread.stop(); queryThread = null; // setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); // jRunQueryButton.setBackground(defaultcolor); } jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); } /* * private void jDeleteButtonActionPerformed(java.awt.event.ActionEvent evt) * { DefaultMutableTreeNode node = null; TreePath parentPath = * jTree1.getSelectionPath(); * * if (parentPath == null) { //There's no selection. return; } else { node = * (DefaultMutableTreeNode) (parentPath.getLastPathComponent()); * System.out.println("Remove node: "+ * ((QueryTreeNodeData)node.getUserObject()).tooltip()); * treeModel.removeNodeFromParent(node); } } */ protected static ImageIcon createImageIcon(String path) { java.net.URL imgURL = QueryTopPanel.class.getResource(path); return new ImageIcon(imgURL); } @SuppressWarnings("deprecation") private void jCancelButtonActionPerformed(java.awt.event.ActionEvent evt) { // System.out.println("Cancel action"); if (queryThread != null) { queryThread.stop(); queryThread = null; // setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); // jRunQueryButton.setBackground(defaultcolor); } } private void jRunQueryButtonActionPerformed(java.awt.event.ActionEvent evt) { // System.out.println("value set on the slider: "+ jSlider1.getValue()); if (dataModel.isAllPanelEmpty()) { JOptionPane.showMessageDialog(this, "All groups are empty."); return; } if (jRunQueryButton.getText().indexOf("Run Query") < 0) { cancel(); return; } String queryNametmp = jNameTextField.getText(); // if(queryNametmp.equals("") || queryNametmp == null) { queryNametmp = dataModel.getTmpQueryName(); // } Object selectedValue = JOptionPane.showInputDialog(this, "Please supply a name for this query: ", "Query Name Dialog", JOptionPane.PLAIN_MESSAGE, null, null, queryNametmp); if (selectedValue == null) { return; } else { queryNametmp = (String) selectedValue; } dataModel.queryName(queryNametmp); final String queryName = queryNametmp; // System.out.println("Provided query name: " + queryName); ImageIcon buttonIcon = createImageIcon("indicator_18.gif"); this.jRunQueryButton.setIcon(buttonIcon); this.jRunQueryButton.setText(" Cancel "); // final Color defaultcolor = jRunQueryButton.getBackground(); dataModel.specificity(0);// jSlider1.getValue()); // /create result option list from option selections ArrayList<String> optionList = new ArrayList<String>(); if (jGetPatientCountCheckBox.isSelected()) { optionList.add("patient_count_xml"); } if (jGetPatientSetCheckBox.isSelected() || jShowTimelineCheckBox.isSelected()) { optionList.add("patientset"); } final String xmlStr = dataModel.wirteQueryXML(optionList); // parentPanel.lastRequestMessage(xmlStr); parentPanel.setPatientCount(""); parentPanel.setRequestText(xmlStr); parentPanel.setResponseText("Waiting for response ..."); // System.out.println("Query request: "+xmlStr); // jNameTextField.setText(queryName); jNameLabel.setText(" Query Name: " + queryName); queryThread = new Thread() { @Override public void run() { // setCursor(new Cursor(Cursor.WAIT_CURSOR)); response = QueryRequestClient.sendQueryRequestREST(xmlStr); // parentPanel.lastResponseMessage(response); if (response != null) { // response = // response.substring(response.indexOf("<ns2:response"), // response.indexOf("</i2b2:response>")); parentPanel.setResponseText(response); JAXBUtil jaxbUtil = QueryJAXBUtil.getJAXBUtil(); try { JAXBElement jaxbElement = jaxbUtil.unMashallFromString(response); ResponseMessageType messageType = (ResponseMessageType) jaxbElement.getValue(); BodyType bt = messageType.getMessageBody(); MasterInstanceResultResponseType masterInstanceResultResponseType = (MasterInstanceResultResponseType) new JAXBUnWrapHelper() .getObjectByClass(bt.getAny(), MasterInstanceResultResponseType.class); String queryId = null; // ResponseMessageType messageType = // jaxbUtil.unMashallResponseMessageTypeFromString( // response); StatusType statusType = messageType.getResponseHeader().getResultStatus().getStatus(); String status = statusType.getType(); String count = "N/A"; QueryMasterData nameNode = null; if (status.equalsIgnoreCase("DONE")) { String refId = null; try { edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.StatusType cellStatusType = masterInstanceResultResponseType .getStatus(); if (cellStatusType.getCondition().get(0).getType().equalsIgnoreCase("RUNNING")) { JOptionPane.showMessageDialog(parentPanel, "Query is still running, you may check its status later \n" + "in the previous queries view by right clicking on a node\n" + "then selecting refresh all."); jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); return; } else if (cellStatusType.getCondition().get(0).getType() .equalsIgnoreCase("ERROR")) { JOptionPane.showMessageDialog(parentPanel, "Error message delivered from the remote server, " + "you may wish to retry your last action"); jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); return; } queryId = new Integer( masterInstanceResultResponseType.getQueryMaster().getQueryMasterId()) .toString(); // messageType.getResponseHeader().getInfo(). // getValue(); // System.out.println("Get query id: "+queryId); nameNode = new QueryMasterData(); nameNode.name(queryName); nameNode.visualAttribute("CA"); nameNode.userId(UserInfoBean.getInstance().getUserName()); nameNode.tooltip("A query run by " + nameNode.userId()); nameNode.id(queryId); // nameNode.xmlContent(xmlStr); // /loop thru all the results for (int i = 0; i < masterInstanceResultResponseType.getQueryResultInstance() .size(); i++) { QueryResultInstanceType queryResultInstanceType = masterInstanceResultResponseType .getQueryResultInstance().get(i); if (queryResultInstanceType.getQueryResultType().getName() .equalsIgnoreCase("patientset")) { refId = new Integer(queryResultInstanceType.getResultInstanceId()) .toString(); // System.out.println("Set Ref id: "+ // refId); count = new Integer(queryResultInstanceType.getSetSize()).toString(); } else if (queryResultInstanceType.getQueryResultType().getName() .equalsIgnoreCase("patient_count_xml")) { count = new Integer(queryResultInstanceType.getSetSize()).toString(); QueryResultData resultData = new QueryResultData(); resultData.queryId(queryResultInstanceType.getResultInstanceId()); String xmlDocumentRequestStr = resultData.writeXMLDocumentQueryXML(); System.out.println( "Generated XML document request: " + xmlDocumentRequestStr); // parentPanel.lastRequestMessage( // xmlDocumentRequestStr); response = QueryRequestClient.sendQueryRequestREST(xmlDocumentRequestStr); System.out.println("Generated XML document response: " + response); // parentPanel.lastResponseMessage( // response); } } parentPanel.setPatientCount(count); if (count.equalsIgnoreCase("N/A")) { jSetSizeLabel.setText(" Patient(s) returned: " + count); } else { jSetSizeLabel.setText(" Patient(s) returned: " + count); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(parentPanel, "Response delivered from the remote server could not be understood,\n" + "you may wish to retry your last action."); jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); return; } final IWorkbenchPage page = ((QueryPanelInvestigator) parentPanel).parentview .getViewSite().getPage(); ViewPart previousqueryview = (ViewPart) page.findView( "edu.harvard.i2b2.eclipse.plugins.previousquery.views.PreviousQueryView"); ((ICommonMethod) previousqueryview).doSomething(nameNode.name() + " [" + dataModel.getDayString() + "]" + "#i2b2seperater#" + nameNode.id()); final ArrayList<String> nodeXmls = new ArrayList<String>(); for (int i = 0; i < dataModel.getCurrentPanelCount(); i++) { ArrayList<QueryConceptTreeNodeData> nodelist = dataModel.getTreePanel(i).getItems(); for (int j = 0; j < nodelist.size(); j++) { QueryConceptTreeNodeData nodedata = nodelist.get(j); String termStatus = nodedata.setXmlContent(); if (termStatus.equalsIgnoreCase("error")) { JOptionPane.showMessageDialog(parentPanel, "Response delivered from the remote server could not be understood,\n" + "you may wish to retry your last action."); jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); return; } nodeXmls.add(nodedata.xmlContent()); } } if (jShowTimelineCheckBox.isSelected()) { ViewPart explorerview = (ViewPart) page .findView("edu.harvard.i2b2.eclipse.plugins.explorer.views.ExplorerView"); if (explorerview != null) { String str1 = "" + count; String str2 = "-" + refId; ((ICommonMethod) explorerview).doSomething(str1 + str2); ((ICommonMethod) explorerview).doSomething(nodeXmls); } } } else { JOptionPane.showMessageDialog(parentPanel, "Error message delivered from the remote server, " + "you may wish to retry your last action"); jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); return; } } catch (Exception e) { e.printStackTrace(); // JOptionPane.showMessageDialog(parentPanel, // "Response delivered from the remote server could not // be understood,\n" + // "you may wish to retry your last action."); jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); return; } } // setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); jRunQueryButton.setIcon(null); jRunQueryButton.setText("Run Query"); // jRunQueryButton.setBackground(defaultcolor); } }; try { queryThread.start(); } catch (Exception e) { e.printStackTrace(); parentPanel.setResponseText(e.getMessage()); } } private void jClearGroupsButtonActionPerformed(java.awt.event.ActionEvent evt) { reset(); } public void reset() { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { // jNameTextField.setText(""); jNameLabel.setText(" Query Name:"); jSetSizeLabel.setText(" Patient(s) returned:"); dataModel.clearConceptTrees(); dataModel.removeAdditionalPanels(); dataModel.lastLabelPosition(555); resetAddPanelButton(); jPanel1.setPreferredSize(new Dimension(615, 150)); jScrollPane4.setViewportView(jPanel1); } }); } private void jAndOrLabel2MouseClicked(java.awt.event.MouseEvent evt) { if (jAndOrLabel2.getText().equalsIgnoreCase("and")) { jAndOrLabel2.setText("or"); } else if (jAndOrLabel2.getText().equalsIgnoreCase("or")) { jAndOrLabel2.setText("and"); } } private void jAndOrLabelMouseClicked(java.awt.event.MouseEvent evt) { JLabel label = (JLabel) evt.getSource(); if (label.getText().equalsIgnoreCase("and")) { label.setText("or"); } else if (label.getText().equalsIgnoreCase("or")) { label.setText("and"); } } private void jAndOrLabel1MouseClicked(java.awt.event.MouseEvent evt) { if (jAndOrLabel1.getText().equalsIgnoreCase("and")) { jAndOrLabel1.setText("or"); } else if (jAndOrLabel1.getText().equalsIgnoreCase("or")) { jAndOrLabel1.setText("and"); } } private void resetAddPanelButton() { int c = dataModel.getCurrentPanelCount(); int height = jMorePanelsButton.getBounds().height; jMorePanelsButton.setBounds((c - 1) * 185 + 180, 0, 60, height); } private void jMorePanelsButtonActionPerformed(java.awt.event.ActionEvent evt) { if (dataModel.hasEmptyPanels()) { JOptionPane.showMessageDialog(this, "Please use an existing empty panel before adding a new one."); return; } int rightmostPosition = dataModel.lastLabelPosition(); JLabel label = new JLabel(); label.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); label.setText("and"); label.setToolTipText("Click to change the relationship"); label.setBorder(javax.swing.BorderFactory.createEtchedBorder()); label.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { jAndOrLabelMouseClicked(evt); } }); QueryConceptTreePanel panel = new QueryConceptTreePanel("Group " + (dataModel.getCurrentPanelCount() + 1), this); jPanel1.add(panel); panel.setBounds(rightmostPosition + 5, 0, 180, getParent().getHeight() - 100); jPanel1.setPreferredSize(new Dimension(rightmostPosition + 5 + 181 + 60, getHeight() - 100)); jScrollPane4.setViewportView(jPanel1); dataModel.addPanel(panel, label, rightmostPosition + 5 + 180); /* * System.out.println(jScrollPane4.getViewport().getExtentSize().width+":" * + jScrollPane4.getViewport().getExtentSize().height); * System.out.println * (jScrollPane4.getHorizontalScrollBar().getVisibleRect().width+":" * +jScrollPane4.getHorizontalScrollBar().getVisibleRect().height); * System * .out.println(jScrollPane4.getHorizontalScrollBar().getVisibleAmount * ()); * System.out.println(jScrollPane4.getHorizontalScrollBar().getValue()); */ jScrollPane4.getHorizontalScrollBar().setValue(jScrollPane4.getHorizontalScrollBar().getMaximum()); jScrollPane4.getHorizontalScrollBar().setUnitIncrement(40); // this.jScrollPane4.removeAll(); // this.jScrollPane4.setViewportView(jPanel1); // revalidate(); // jScrollPane3.setBounds(420, 0, 170, 300); // jScrollPane4.setBounds(20, 35, 335, 220); resizePanels(getParent().getWidth(), getParent().getHeight()); } private void resizePanels(int width, int height) { jScrollPane4.setBounds(5, 35, width - 120, height - 65); // jPanel1.setPreferredSize(new Dimension(dataModel.lastLabelPosition(), // height-85)); jScrollPane4.setViewportView(jPanel1); jOptionsScrollPane.setBounds(width - 112, 35, 108, height - 65); jOptionsScrollPane.setViewportView(jOptionsPanel); jRunQueryButton.setBounds(5, height - 24, width - 170, 23); // jNameTextField.setBounds(5, 4, width-121, 26); jNameLabel.setBounds(6, 6, width - 126, 23); // jQueryNamePanel.setBounds(5, 4, width-121, 26); jClearGroupsButton.setBounds(width - 116, 6, 115, 23); // jCancelButton.setBounds(5, height-49, 80, 23); jSetSizeLabel.setBounds(width - 160, height - 23, 155, 21); // jSetSizeFiled.setBounds(156, height-24, 80, 21); // jNameLabel.setBounds(8, 2, 70, 23); // jToolbarPanel.setBounds(240, height-23, 380, 21); int c = dataModel.getCurrentPanelCount(); jMorePanelsButton.setBounds((c - 1) * 185 + 180, 0, 60, height - 85); for (int i = 0; i < c; i++) { QueryConceptTreePanel panel = dataModel.getTreePanel(i); panel.setBounds((i * 180) + (i * 5), 0, 180, height - 85); panel.invalidate(); } } public void addPanel() { int rightmostPosition = dataModel.lastLabelPosition(); JLabel label = new JLabel(); label.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); label.setText("and"); label.setToolTipText("Click to change the relationship"); label.setBorder(javax.swing.BorderFactory.createEtchedBorder()); label.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { jAndOrLabelMouseClicked(evt); } }); // jPanel1.add(label); // label.setBounds(rightmostPosition, 90, 30, 18); QueryConceptTreePanel panel = new QueryConceptTreePanel("Group " + (dataModel.getCurrentPanelCount() + 1), this); jPanel1.add(panel); panel.setBounds(rightmostPosition + 5, 0, 180, getParent().getHeight() - 100); jPanel1.setPreferredSize(new Dimension(rightmostPosition + 5 + 181 + 60, getHeight() - 100)); jScrollPane4.setViewportView(jPanel1); dataModel.addPanel(panel, label, rightmostPosition + 5 + 180); jScrollPane4.getHorizontalScrollBar().setValue(jScrollPane4.getHorizontalScrollBar().getMaximum()); jScrollPane4.getHorizontalScrollBar().setUnitIncrement(40); resizePanels(getParent().getWidth(), getParent().getHeight()); } private void jNameLabelMouseExited(java.awt.event.MouseEvent evt) { jNameLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); } private void jNameLabelMouseMoved(java.awt.event.MouseEvent evt) { jNameLabel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.YELLOW)); jNameLabel.paintImmediately(jNameLabel.getVisibleRect()); try { Thread.sleep(500); } catch (InterruptedException e) { } jNameLabel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.BLACK)); } public void setQueryName(String str) { // jNameTextField.setText(str); jNameLabel.setText(str); } class QueryDataTransferable implements Transferable { public QueryDataTransferable(Object data) { super(); this.data = data; flavors[0] = DataFlavor.stringFlavor; } public DataFlavor[] getTransferDataFlavors() { return flavors; } public boolean isDataFlavorSupported(DataFlavor flavor) { return true; } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { return data; } private Object data; private final DataFlavor[] flavors = new DataFlavor[1]; } class NameLabelTextHandler extends TransferHandler { public NameLabelTextHandler() { super("text"); } public boolean canImport(JComponent comp, DataFlavor[] transferFlavor) { jNameLabel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.YELLOW)); jNameLabel.paintImmediately(jNameLabel.getVisibleRect()); try { Thread.sleep(100); } catch (InterruptedException e) { } jNameLabel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.BLACK)); if ((System.currentTimeMillis() - lEventTime) > 2000) { return true; } return false; } public int getSourceActions(JComponent c) { return TransferHandler.COPY; } public boolean importData(JComponent comp, Transferable t) { jNameLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); try { String text = (String) t.getTransferData(DataFlavor.stringFlavor); System.out.println(text); reset(); dataModel.redrawPanelFromXml(text); } catch (Exception e) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); JOptionPane.showMessageDialog(jNameLabel, "Please note, You can not drop this item here."); } }); } return true; } protected Transferable createTransferable(JComponent c) { // Transferable t = null; String str = jNameLabel.getText(); // t = new QueryDataTransferable(str); // return t; // return new StringSelection(str); Transferable t = null; QueryDefinitionType queryDefinitionType = new QueryDefinitionType(); QueryDefinitionRequestType queryDefinitionRequestType = new QueryDefinitionRequestType(); for (int i = 0; i < jPanel1.getComponentCount() - 1; i++) { if (jPanel1.getComponent(i) instanceof QueryConceptTreePanel) { QueryConceptTreePanel panel = (QueryConceptTreePanel) jPanel1.getComponent(i);// getTreePanel(i); if ((panel != null) && (panel.data().getItems().size() > 0)) { queryDefinitionType.setQueryName( panel.data().getItems().get(0).name() + "_" + generateMessageId().substring(0, 4)); ArrayList<QueryConceptTreeNodeData> nodelist = panel.data().getItems(); if ((nodelist != null) && (nodelist.size() > 0)) { //System.out.println("Panel: "+panel.getGroupName()+ // " Excluded: // "+((panel.data().exclude())?"yes":"no")); PanelType panelType = new PanelType(); panelType.setInvert((panel.data().exclude()) ? 1 : 0); PanelType.TotalItemOccurrences totalOccurrences = new PanelType.TotalItemOccurrences(); totalOccurrences.setValue(panel.getOccurrenceTimes()); panelType.setTotalItemOccurrences(totalOccurrences); panelType.setPanelNumber(i + 1); for (int j = 0; j < nodelist.size(); j++) { QueryConceptTreeNodeData node = nodelist.get(j); //System.out.println("\tItem: "+node.fullname()) // ; // create item ItemType itemType = new ItemType(); itemType.setItemKey(node.fullname()); itemType.setItemName(node.name()); // mm removed // itemType.setItemTable(node.lookuptable()); itemType.setTooltip(node.tooltip()); itemType.setHlevel(Integer.parseInt(node.hlevel())); itemType.setClazz("ENC"); // handle time constrain if (panel.data().startTime() != -1 || panel.data().endTime() != -1) { ConstrainByDate timeConstrain = panel.data().writeTimeConstrain(); itemType.getConstrainByDate().add(timeConstrain); } // handle value constrain if (!node.valuePropertyData().noValue()) { ConstrainByValue valueConstrain = node.valuePropertyData() .writeValueConstrain(); itemType.getConstrainByValue().add(valueConstrain); } panelType.getItem().add(itemType); } queryDefinitionType.getPanel().add(panelType); } } } } StringWriter strWriter = new StringWriter(); try { DndType dnd = new DndType(); edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ObjectFactory psmOf = new edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ObjectFactory(); // edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ObjectFactory // psmOf = new // edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ObjectFactory(); dnd.getAny().add(psmOf.createQueryDefinition(queryDefinitionType)); edu.harvard.i2b2.crcxmljaxb.datavo.dnd.ObjectFactory of = new edu.harvard.i2b2.crcxmljaxb.datavo.dnd.ObjectFactory(); QueryJAXBUtil.getJAXBUtil().marshaller(of.createPluginDragDrop(dnd), strWriter); str = strWriter.toString(); } catch (Exception e) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { JOptionPane.showMessageDialog(jNameLabel, "You can not use this item in a query, " + "it is only used for organizing the lists."); } }); } // edu.harvard.i2b2.crcxmljaxb.datavo.vdo.ObjectFactory vdoOf = new // edu.harvard.i2b2.crcxmljaxb.datavo.vdo.ObjectFactory(); /* * //edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ObjectFactory * psmOf = new * edu.harvard.i2b2.crcxmljaxb.datavo.psm.query.ObjectFactory(); * dnd.getAny().add(vdoOf.c.c(queryDefinitionType)); * edu.harvard.i2b2.crcxmljaxb.datavo.dnd.ObjectFactory of = new * edu.harvard.i2b2.crcxmljaxb.datavo.dnd.ObjectFactory(); * QueryJAXBUtil.getJAXBUtil().marshaller( * of.createPluginDragDrop(dnd), strWriter); */ t = new QueryDataTransferable(str); return t; } } private class DragMouseAdapter extends MouseAdapter { public void mousePressed(MouseEvent e) { JComponent c = (JComponent) e.getSource(); TransferHandler handler = c.getTransferHandler(); handler.exportAsDrag(c, e, TransferHandler.COPY); jNameLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); // reading the system time to a long lEventTime = System.currentTimeMillis(); } } private String generateMessageId() { StringWriter strWriter = new StringWriter(); for (int i = 0; i < 20; i++) { int num = getValidAcsiiValue(); // System.out.println("Generated number: " + num + " char: // "+(char)num); strWriter.append((char) num); } return strWriter.toString(); } private int getValidAcsiiValue() { int number = 48; while (true) { number = 48 + (int) Math.round(Math.random() * 74); if ((number > 47 && number < 58) || (number > 64 && number < 91) || (number > 96 && number < 123)) { break; } } return number; } // Variables declaration private javax.swing.JLabel jAndOrLabel1; private javax.swing.JLabel jAndOrLabel2; private javax.swing.JLabel jNameLabel; private javax.swing.JLabel jSetSizeLabel; private javax.swing.JTextField jNameTextField; private javax.swing.JLabel jSetSizeFiled; private javax.swing.JButton jDeleteButton; private javax.swing.JButton jMorePanelsButton; private javax.swing.JButton jClearGroupsButton; private javax.swing.JPanel jPanel1; public javax.swing.JButton jCancelButton; private javax.swing.JButton jRunQueryButton; private QueryConceptTreePanel jScrollPane1; private QueryConceptTreePanel jScrollPane2; private QueryConceptTreePanel jScrollPane3; private javax.swing.JScrollPane jScrollPane4; private javax.swing.JCheckBox jGetPatientCountCheckBox; private javax.swing.JCheckBox jGetPatientSetCheckBox; private javax.swing.JPanel jOptionsPanel; private javax.swing.JScrollPane jOptionsScrollPane; private javax.swing.JCheckBox jShowTimelineCheckBox; private javax.swing.JToggleButton jPatientCountToggleButton; private javax.swing.JPanel jQueryNamePanel; private javax.swing.JToggleButton jTimelineToggleButton; private javax.swing.JToggleButton jPatientSetToggleButton; private javax.swing.JToolBar jWorkflowToolBar; private javax.swing.JPanel jToolbarPanel; public javax.swing.JTree jTree1; public javax.swing.JTree jTree2; public javax.swing.JTree jTree3; public QueryConceptTreePanel treepanel; // End of variables declaration }