public void valueChanged(ListSelectionEvent le) {
			
			if (le.getValueIsAdjusting()) {
				return;
			}
			
			final int selRow = queryDbTable.getSelectedRow();
			if (selRow < 0) {
				// CompareView初期化
				queryPlot.clear();
				compPlot.clear();
				resultPlot.clear();
				queryPlot.setPeaks(null, 0);
				compPlot.setPeaks(null, 1);
				resultPlot.setPeaks(null, 0);

				// PackageView初期化
				pkgView.initAllRecInfo();
				
				DefaultTableModel dm = (DefaultTableModel)resultSorter.getTableModel();
				dm.setRowCount(0);
				hitLabel.setText(" ");
				return;
			}
			
			// マウスカーソルを砂時計に
			SearchPage.this.setCursor(waitCursor);
			
			int idCol = queryDbTable.getColumnModel().getColumnIndex(COL_LABEL_ID);
			int nameCol = queryDbTable.getColumnModel().getColumnIndex(COL_LABEL_NAME);
			
			String id = (String) queryDbTable.getValueAt(selRow, idCol);
			String site = guiDbTableRowMap.get(id).getContributor();
			
			// PackageView表示クエリーデータ設定
			PackageRecData recData = new PackageRecData();
			
			// == クエリーレコードフラグ ===
			recData.setQueryRecord(true);
			
			// === ID ===
			recData.setId(id);
			
			// === スコア ===
			recData.setScore(" -");
			
			// === サイト ===
			recData.setSite(site);
			
//			String typeName = MassBankCommon.CGI_TBL[MassBankCommon.CGI_TBL_NUM_TYPE][MassBankCommon.CGI_TBL_TYPE_GSDATA];
//			String reqUrl = baseUrl + "jsp/" + MassBankCommon.DISPATCHER_NAME
//					+ "?type=" + typeName + "&id=" + id + "&site=" + site + "&relation=false";
//			
//			  LOGGER.info("not calling.. "+reqUrl);
			
			String line = "";
			String findStr;
//			try {
//				URL url = new URL( reqUrl );
//				URLConnection con = url.openConnection();
//				
//				// レスポンス取得
//				BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream()) );
//				
//				// レスポンス格納
//				String result;
//				while ( (result = in.readLine()) != null ) {
//					// スペース行を読み飛ばす
//					if ( !result.equals("") ) {
//						line = result;
//						break;
//					}
//				}
//				in.close();
//			}
//			catch (IOException iex) {
//			}
      try {
    	  DbAccessor.createConnection();
    	  SpectrumLogic spectrumLogic = new SpectrumLogic();
    	  line = spectrumLogic.getChildInfo(id);
    	  DbAccessor.closeConnection();
      } catch (SQLException e) {
        LOGGER.error(e.getMessage(), e);
        SearchPage.this.setCursor(Cursor.getDefaultCursor());
      }
//		       LOGGER.info(line);
			// === 化合物名 ===
			findStr = "name=";
			recData.setName(line, findStr);
			
			// === 統合レコードフラグ ===
			recData.setIntegRecord(recData.getName());
			
			// === プリカーサー ===
			findStr = "precursor=";
			recData.setPrecursor(line, findStr);
			
			// レコード情報以降の文字列を削除し、ピーク情報(m/z、強度)のみを残し
			// ピーク情報のみを切り出す。
			if (line.indexOf("::") > 0) {
				line = line.substring(0, line.indexOf("::"));
			}
			String[] tmpPeak = line.split("\t\t");
			
			// === ピーク数 ===
			int num = tmpPeak.length;
			if (num == 1) {
				if (tmpPeak[0].split("\t")[0].equals("0") && tmpPeak[0].split("\t")[1].equals("0")) {
					num = 0;
				}
			}
			recData.setPeakNum( num );
			
			for (int i = 0; i < recData.getPeakNum(); i++ ) {
				// === m/z ===
				recData.setMz( i, tmpPeak[i].split("\t")[0] );
				
				// === 強度 ===
				recData.setIntensity(i, tmpPeak[i].split("\t")[1] );
			}
			
			// === ピーク色 ===
			recData.setPeakColorType(PackageRecData.COLOR_TYPE_BLACK);
			
			// レコード情報追加
			pkgView.addQueryRecInfo(recData);
			pkgView.addRecInfoAfter(true, id, PackageSpecData.SORT_KEY_NONE);
			
			
			// DB検索
			String name = (String)queryDbTable.getValueAt(selRow, nameCol);
			String key = (String)queryDbTable.getValueAt(selRow, idCol);
			searchDb(tmpPeak, recData.getPrecursor(), name, key);
		}
	}

	/**
	 * テーブルマウスリスナークラス
	 * SerarchPageのインナークラス。
	 */
	class TblMouseListener extends MouseAdapter {
		
		@Override
		public void mouseClicked(MouseEvent e) {
			super.mouseClicked(e);
			
			// 左クリックの場合
			if (SwingUtilities.isLeftMouseButton(e)) {

				JTable tbl = (JTable)e.getSource();
				
				if (e.getClickCount() == 2 && !tbl.equals(queryFileTable)) {
					showRecordPage(tbl);
				}
				else if (e.getClickCount() == 1) {
					
					if (e.isShiftDown() || e.isControlDown()) {
						return;
					}
					
					int selRow[] = tbl.getSelectedRows();
					int idCol = tbl.getColumnModel().getColumnIndex(COL_LABEL_ID);
					
					// Package View テーブル再選択処理
					String id = (String)tbl.getValueAt(selRow[0], idCol);
					if (tbl.equals(resultTable)) {
						pkgView.setTblSelection(false, id);
					}
					else {
						pkgView.setTblSelection(true, id);
					}
				}
			}
		}
		
		@Override
		public void mouseReleased(MouseEvent e) {
			super.mouseReleased(e);
			
			// 右リリースの場合
			if (SwingUtilities.isRightMouseButton(e)) {
				
				recListPopup(e);
			}
		}
	}
	
	/**
	 * ペインマウスリスナー
	 * SearchPageのインナークラス
	 */
	class PaneMouseListener extends MouseAdapter {
		
		@Override
		public void mouseReleased(MouseEvent e) {
			super.mouseReleased(e);
			
			// 右リリースの場合
			if (SwingUtilities.isRightMouseButton(e)) {
				recListPopup(e);
			}
		}
	}
	
	/**
	 * Search Nameボタンリスナークラス
	 * SerarchPageのインナークラス。
	 */
	class BtnSearchNameListener implements ActionListener {
		
		/**
		 * アクションイベント
		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
		 */
		public void actionPerformed(ActionEvent e) {

			String inputStr = (String)JOptionPane.showInputDialog(null,
					"Please input the Name.", "Search Name",
					JOptionPane.PLAIN_MESSAGE, null, null, saveSearchName);

			// キャンセルボタン、×ボタン、Escキー押下時
			if (inputStr == null) {
				return;
			}

			String searchName = inputStr.trim();
			// ボタンの色を変更
			JButton btn = btnName;
			Color defColor = btn.getBackground();
			btn.setBackground(Color.PINK);
			btn.update(btn.getGraphics());

			// マウスカーソルを砂時計に
			SearchPage.this.setCursor(waitCursor);
			
			// プロットペイン初期化
			queryPlot.clear();
			compPlot.clear();
			resultPlot.clear();
			queryPlot.setPeaks(null, 0);
			compPlot.setPeaks(null, 1);
			resultPlot.setPeaks(null, 0);

			// PackageView初期化
			pkgView.initAllRecInfo();
			
			// DB Hitタブ関連初期化
			if (resultTabPane.getTabCount() > 0) {
				resultTabPane.setSelectedIndex(0);
			}
			DefaultTableModel dm1 = (DefaultTableModel) resultSorter.getTableModel();
			dm1.setRowCount(0);
			hitLabel.setText(" ");

			if (StringUtils.isBlank(searchName)) {
				// DBタブ関連初期化
				DefaultTableModel dataModel = (DefaultTableModel) querySorter.getTableModel();
				dataModel.setRowCount(0);
				SearchPage.this.setCursor(Cursor.getDefaultCursor());
				btn.setBackground(defColor);
				return;
			}

			saveSearchName = searchName;

			// スペクトル取得
			getSpectrumForQuery(searchName);

			// マウスカーソルをデフォルトカーソルに
			SearchPage.this.setCursor(Cursor.getDefaultCursor());

			// ボタンの色を戻す
			btn.setBackground(defColor);
		}
	}

	/**
	 * Allボタンリスナークラス
	 * SerarchPageのインナークラス。
	 */
	class BtnAllListener implements ActionListener {
		
		/**
		 * アクションイベント
		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
		 */
		public void actionPerformed(ActionEvent e) {
			// ボタンの色を変更
			JButton btn = btnAll;
			Color defColor = btn.getBackground();
			btn.setBackground(Color.PINK);
			btn.update(btn.getGraphics());

			// マウスカーソルを砂時計に
			SearchPage.this.setCursor(waitCursor);

			// 未検索の場合
			if (guiDbTableRowMap.isEmpty()) {
				// スペクトル取得
				getSpectrumForQuery(StringUtils.EMPTY);
			}
			// 既検索の場合
			else {
				// プロットペイン初期化
				queryPlot.clear();
				compPlot.clear();
				resultPlot.clear();
				queryPlot.setPeaks(null, 0);
				compPlot.setPeaks(null, 1);
				resultPlot.setPeaks(null, 0);

				// PackageView初期化
				pkgView.initAllRecInfo();
				
				hitLabel.setText(" ");
				queryDbTable.clearSelection();
				
				fillGuiDbTableData(new ArrayList<GuiDbTableRow>(guiDbTableRowMap.values()));
			}
			// マウスカーソルをデフォルトカーソルに
			SearchPage.this.setCursor(Cursor.getDefaultCursor());

			// ボタンの色を戻す
			btn.setBackground(defColor);
		}
	}

	/**
	 * ポップアップメニューShow Recordリスナークラス
	 * SerarchPageのインナークラス。
	 */
	class PopupShowRecordListener implements ActionListener {
		
		private JTable eventTbl;	// イベント発生テーブル
		
		/**
		 * コンストラクタ
		 * @param eventTbl イベントが発生したテーブル
		 */
		public PopupShowRecordListener(JTable eventTbl) {
			this.eventTbl = eventTbl;
		}
		
		/**
		 * アクションイベント
		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
		 */
		public void actionPerformed(ActionEvent e) {
			showRecordPage(eventTbl);
		}
	}

	/**
	 * ポップアップメニューMultiple Displayリスナークラス
	 * SerarchPageのインナークラス。
	 */
	class PopupMultipleDisplayListener implements ActionListener {
		
		private JTable eventTbl;	// イベント発生テーブル
		
		/**
		 * コンストラクタ
		 * @param eventTbl イベントが発生したテーブル
		 */
		public PopupMultipleDisplayListener(JTable eventTbl) {
			this.eventTbl = eventTbl;
		}
		
		/**
		 * アクションイベント
		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
		 */
		public void actionPerformed(ActionEvent e) {
			// TODO
			// result record table -> select double rows -> right click -> multiple display
			CommonUtil.openBrowser(Constant.ExternalUrl.SHOW_MULTIPLE_RECORD_PAGE);
			
//			// 選択された行のインデックスを取得
//			int selRows[] = eventTbl.getSelectedRows();
//
//			// CGI呼び出し
//			try {
//				String reqUrl = baseUrl + "jsp/Display.jsp";
//				String param = "";
//
//				int idCol = eventTbl.getColumnModel().getColumnIndex(SearchPage.COL_LABEL_ID);
//				int nameCol = eventTbl.getColumnModel().getColumnIndex(SearchPage.COL_LABEL_NAME);
//				int ionCol = eventTbl.getColumnModel().getColumnIndex(SearchPage.COL_LABEL_ION);
//				int siteCol = eventTbl.getColumnModel().getColumnIndex(SearchPage.COL_LABEL_CONTRIBUTOR);
//				for (int i = 0; i < selRows.length; i++) {
//					int row = selRows[i];
//					String name = (String)eventTbl.getValueAt(row, nameCol);
//					String id = (String)eventTbl.getValueAt(row, idCol);
//					String formula = "";
//					String mass = "";
//					String ion = (String)eventTbl.getValueAt(row, ionCol);
//					name = URLEncoder.encode(name);
//					String siteName = (String)eventTbl.getValueAt(row, siteCol);
//					String site = "0";
////					for (int j = 0; j < siteNameList.length; j++) {
////						if (siteName.equals(siteNameList[j])) {
////							site = Integer.toString(j);
////							break;
////						}
////					}
//					param += "id=" + name + "\t" + id + "\t" + formula + "\t" + mass + "\t"	+ ion + "\t" + site + "&";
//				}
//				param = param.substring(0, param.length() - 1);
//				LOGGER.info("url to take filename" + reqUrl + "<->" + param);
//				URL url = new URL(reqUrl);
//				URLConnection con = url.openConnection();
//				con.setDoOutput(true);
//				PrintStream out = new PrintStream(con.getOutputStream());
//				out.print(param);
//				out.close();
//				String line;
//				String filename = "";
//				BufferedReader in = new BufferedReader(new InputStreamReader(
//						con.getInputStream()));
//				while ((line = in.readLine()) != null) {
//					filename += line;
//				}
//				in.close();
//
//				reqUrl += "?type=Multiple Display&" + "name=" + filename;
//		        LOGGER.info("open browser with" + reqUrl);
//		        Desktop.getDesktop().browse(new URI(reqUrl));
//		            
//			} catch (IOException | URISyntaxException ex) {
//		        LOGGER.error(ex.getMessage(),ex);
//			}
		}
	}
	
	private void initSearchParameterSetting() {
		try {
			if (MassBankDirSyncThread.hasSyncDataToReInitialize) {
				// 装置種別情報初期化
				instInfo = new GetInstInfo();
				initInstInfo();
				
				// MS種別情報初期化
				initMsInfo();
				
				// イオン種別情報初期化
				initIonInfo();
				MassBankDirSyncThread.hasSyncDataToReInitialize = false;
			}
		} catch (SQLException e1) {
			LOGGER.error(e1.getMessage(), e1);
		}