/* *------------------- * The GanttH.java is part of ASH Viewer *------------------- * * ASH Viewer 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. * * ASH Viewer 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 ASH Viewer. If not, see <http://www.gnu.org/licenses/>. * * Copyright (c) 2009, Alex Kardapolov, All rights reserved. * */ package org.ash.history; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JViewport; import javax.swing.ScrollPaneConstants; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.ash.conn.model.Model; import org.ash.database.ASHDatabase; import org.ash.database.Database10g2; import org.ash.database.Database11g1; import org.ash.database.Database11g2; import org.ash.gui.ASHReport; import org.ash.gui.ASHrawdata; import org.ash.gui.GanttSplitPane; import org.ash.gui.SqlPlan; import org.ash.util.Options; import org.ash.util.ProgressBarUtil; import org.ash.util.Utils; import org.syntax.jedit.JEditTextArea; import com.egantt.model.drawing.ContextResources; import com.egantt.model.drawing.DrawingState; import com.egantt.model.drawing.part.ListDrawingPart; import ext.egantt.model.drawing.state.BasicDrawingState; import com.egantt.swing.cell.CellState; import com.egantt.swing.component.ComponentResources; import com.egantt.swing.component.context.BasicComponentContext; import com.egantt.swing.component.tooltip.ToolTipState; import com.egantt.swing.table.list.BasicJTableList; import ext.egantt.drawing.module.BasicPainterModule; import ext.egantt.drawing.module.GradientColorModule; import ext.egantt.drawing.painter.context.BasicPainterContext; import ext.egantt.swing.GanttDrawingPartHelper; import ext.egantt.swing.GanttTable; /** * The Class GanttH (history). */ public class GanttH extends JPanel{ /** The MainFrame. */ private JFrame mainFrame; /** The main. */ private JPanel main; /** The root. */ private JFrame root; /** The model. */ private Model model; /** The database. */ private ASHDatabaseH database; /** The sqls. */ private JPanel sqls; /** The scale. */ private double scale = 0.8; /** The prev percent. */ private long percentPrev = 0; /** The scale toggle: * < 30 => 2 * 30-70 => 1 * > 70 => 0 * */ private int scaleToggle = 0; /** The other0. */ private String other0 = "0"; /** The application1. */ private String application1 = "1"; /** The configuration2. */ private String configuration2 = "2"; /** The administrative3. */ private String administrative3 = "3"; /** The concurrency4. */ private String concurrency4 = "4"; /** The commit5. */ private String commit5 = "5"; /** The network7. */ private String network7 = "7"; /** The user i o8. */ private String userIO8 = "8"; /** The system i o9. */ private String systemIO9 = "9"; /** The scheduler10. */ private String scheduler10 = "10"; /** The cluster11. */ private String cluster11 = "11"; /** The queueing12. */ private String queueing12 = "12"; /** The cpu. */ private String cpu = "13"; /** The SUM var. */ private String SUM = "SUM"; /** The COUNT var. */ private String COUNT = "COUNT"; /** The UNKNOWN var. */ private String UNKNOWN = "UNKNOWN"; /** The TEXT_PAINTER. */ final String TEXT_PAINTER = "MyTextPainter"; /** The detail for top sql, default 10, max - 50, minimum - 0 values*/ private int topSqlsSqlText = 10; /** SQL text */ private JEditTextArea jtextAreaSqlText = Options.getInstance().getJtextAreaSqlTextGanttH(); /** * Constructor Gantt JPanel * * @param database0 the database0 */ public GanttH(JFrame mainFrame, ASHDatabaseH database0){ super(); this.mainFrame = mainFrame; setLayout(new GridLayout(1, 1, 3, 3)); this.database = database0; this.main = new JPanel(); this.main.setLayout(new GridLayout(1, 1, 3, 3)); this.add(this.main); } /** * Load data to jpanels. * * @param beginTime the begin time * @param endTime the end time */ public synchronized void loadDataToJPanels(final double beginTime, final double endTime){ this.main.removeAll(); JPanel panel = createProgressBar("Loading, please wait..."); this.main.add(panel); this.validate(); Thread t = new Thread() { @Override public void run() { // delay try { Thread.sleep(50L); } catch(InterruptedException e) { e.printStackTrace(); } loadDataToJPanelsPrivate(beginTime, endTime); } }; t.start(); } /** * Load data to jpanels. * * @param beginTime the begin time * @param endTime the end time */ private void loadDataToJPanelsPrivate(double beginTime, double endTime){ JSplitPane splitPane = new GanttSplitPane(JSplitPane.HORIZONTAL_SPLIT); this.database.getSqlsTemp().clear(); this.database.getSessionsTemp().clear(); this.database.calculateSqlsSessionsData(beginTime, endTime, "All"); // Load data to JTable model try { String sqlIdHash = ""; if (this.database.getParameter("ASH.version").equalsIgnoreCase("9i") ||this.database.getParameter("ASH.version").equalsIgnoreCase("8i")){ sqlIdHash = "Hash Value"; } else { sqlIdHash = "SQL ID"; } String[][] columnNamesSqls = { {"Activity %", sqlIdHash, "SQL Type"}}; String[][] columnNamesSessions = { {"Activity %", "Session ID", "User Name", "Program"}}; /** Array SqlIdText for SQL Text tab*/ Map<Integer,String> arraySqlIdText50SQLTextTab = new HashMap<Integer, String>(); /** Create gantt table */ final GanttTable tableGanttSql = new GanttTable( loadDataToSqlsGantt(arraySqlIdText50SQLTextTab), columnNamesSqls, getBasicJTableList()); final GanttTable tableGanttSessions = new GanttTable( loadDataToSessionsGantt(), columnNamesSessions, getBasicJTableList()); /** Set tooltip and percent*/ setTooltipAndPercent(tableGanttSql); setTooltipAndPercent(tableGanttSessions); /** Left tabbed pane (Top SQL + SQL text)*/ JTabbedPane tabsTopSQLText = new JTabbedPane(); /** Top SQL pane*/ JScrollPane leftPane = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); leftPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE); jtextAreaSqlText.setMinimumSize(new Dimension(this.main.getWidth()/2,this.main.getHeight()-50)); jtextAreaSqlText.setPreferredSize(new Dimension(this.main.getWidth()/2,this.main.getHeight()-50)); SqlPlanH sqlPlan = new SqlPlanH(database); /** Top sessions pane*/ JScrollPane rightPane = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); rightPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE); leftPane.setViewportView(tableGanttSql.getJTable()); rightPane.setViewportView(tableGanttSessions.getJTable()); leftPane.setVerticalScrollBar(leftPane.getVerticalScrollBar()); rightPane.setVerticalScrollBar(rightPane.getVerticalScrollBar()); /** Add component to left tabs*/ tabsTopSQLText.add(leftPane,Options.getInstance().getResource("tabTopSQL.text")); tabsTopSQLText.add(jtextAreaSqlText,Options.getInstance().getResource("tabSQLText.text")); tabsTopSQLText.add(sqlPlan, Options.getInstance().getResource("tabSQLPlan.text")); tabsTopSQLText.setEnabledAt(1, false); tabsTopSQLText.setEnabledAt(2, false); /** Add selection listener for table model*/ SelectionListener listener = new SelectionListener( tableGanttSql.getJTable(), tabsTopSQLText, jtextAreaSqlText,arraySqlIdText50SQLTextTab, database, sqlPlan); tableGanttSql.getJTable().getSelectionModel().addListSelectionListener(listener); /** Layout components*/ splitPane.setLeftComponent(tabsTopSQLText); splitPane.setRightComponent(rightPane); splitPane.setDividerLocation(this.getWidth()/2); splitPane.setOneTouchExpandable(true); this.main.removeAll(); if (Options.getInstance().isCurrentProfile() && Options.getInstance().getEditionDb().equalsIgnoreCase("EE") && !Options.getInstance().getVersionDb().equalsIgnoreCase("9i") && !Options.getInstance().getVersionDb().equalsIgnoreCase("8i") && !Options.getInstance().getVersionDb().equalsIgnoreCase("10g1")) { // ASHDatabase instance of current profile ASHDatabase databaseCurrent = Options.getInstance().getASHDatabase(); JTabbedPane tabPane = new JTabbedPane(); tabPane.add("Top sql & sessions",splitPane); tabPane.add("ASH Report",new ASHReport(mainFrame, databaseCurrent, beginTime, endTime)); tabPane.add("ASH raw data",new ASHrawdata(mainFrame, this.database, beginTime, endTime)); this.main.add(tabPane); this.validate(); } else { //this.main.add(splitPane); //ASHDatabase databaseCurrent = Options.getInstance().getASHDatabase(); JTabbedPane tabPane = new JTabbedPane(); tabPane.add("Top sql & sessions",splitPane); //tabPane.add("ASH Report",new ASHReport(mainFrame, databaseCurrent, beginTime, endTime)); tabPane.add("ASH raw data",new ASHrawdata(mainFrame, this.database, beginTime, endTime)); this.main.add(tabPane); this.validate(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Selection listener for Top SQL JTable */ private class SelectionListener implements ListSelectionListener { JTable table; JTabbedPane tabbedpane; JEditTextArea sqlTextArea; Map<Integer,String> arraySqlIdText50SQLTextTab; ASHDatabaseH database; SqlPlanH sqlPlan; SelectionListener(JTable table,JTabbedPane tabbedpane, JEditTextArea sqlTextArea,Map<Integer,String> arraySqlIdText50SQLTextTab, ASHDatabaseH database, SqlPlanH sqlPlan) { this.table = table; this.tabbedpane = tabbedpane; this.sqlTextArea = sqlTextArea; this.arraySqlIdText50SQLTextTab = arraySqlIdText50SQLTextTab; this.database = database; this.sqlPlan = sqlPlan; } /* (non-Javadoc) * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent) */ public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) { JPanel panelSqlText = createProgressBar("Loading, please wait..."); JPanel panelSqlPlan = createProgressBar("Loading, please wait..."); tabbedpane.setComponentAt(1, panelSqlText); tabbedpane.setComponentAt(2, panelSqlPlan); tabbedpane.setEnabledAt(1, true); tabbedpane.setEnabledAt(2, true); Thread t = new Thread() { @Override public void run() { // delay try { Thread.sleep(50L); } catch (InterruptedException e) { e.printStackTrace(); } loadSqlTextAndPlan(); } }; t.start(); } } /** * Load sql text and plan to tabs */ private void loadSqlTextAndPlan(){ final String sqlId = arraySqlIdText50SQLTextTab.get(table.getSelectedRow()); final String sqlText = database.getSqlText(sqlId); final String sqlType = database.getSqlType(sqlId); // Load formatted sql text if (sqlText != null && sqlText != "") { tabbedpane.setEnabledAt(1, true); try { sqlTextArea.setText(Utils.formatSqlAll(sqlText) .toString()); sqlTextArea.setCaretPosition(0); sqlTextArea.updateUI(); } catch (Exception e1) { sqlTextArea .setText("Error in syntax highlighting of sql!"); } } else { tabbedpane.setEnabledAt(1, false); sqlTextArea.setText(""); } // Load sql plan's for sql_id if (sqlType.equalsIgnoreCase("SELECT") || sqlType.equalsIgnoreCase("INSERT") || sqlType.equalsIgnoreCase("UPDATE") || sqlType.equalsIgnoreCase("DELETE") || sqlType.equalsIgnoreCase("MERGE") || sqlType.equalsIgnoreCase("UNKNOWN") || (sqlType == "" && sqlType != null)) { tabbedpane.setEnabledAt(2, true); try { sqlPlan.loadSqlPlan(sqlId, false); } catch (Exception e1) { System.out.println("SQL Exception occured: " + e1.getMessage()); } } else { tabbedpane.setEnabledAt(2, false); } tabbedpane.setComponentAt(1, sqlTextArea); tabbedpane.setComponentAt(2, sqlPlan); } } /** * Get BasicJTableList * * @return BasicJTableList */ private BasicJTableList getBasicJTableList(){ BasicJTableList tableListSqls = new BasicJTableList(); { BasicComponentContext componentContext = new BasicComponentContext(); ToolTipState state = new ToolTipState() { public String getToolTipText(MouseEvent event, CellState cellState) { DrawingState drawing = cellState.getDrawing(); Object key = drawing != null ? drawing.getValueAt(event.getPoint()): null; if (key == null) return ""; return key.toString(); } }; componentContext.put(ComponentResources.TOOLTIP_STATE, state); tableListSqls.setRendererComponentContext(componentContext); } return tableListSqls; } /** * Set tooltip and percent for GanttTable * * @param gantttable */ private void setTooltipAndPercent(GanttTable gantttable){ ///Tooltip { BasicPainterContext graphics = new BasicPainterContext(); graphics.setPaint(Color.WHITE); graphics.put(TEXT_PAINTER, new Font(null, Font.PLAIN, 8)); gantttable.getDrawingContext().put(TEXT_PAINTER, ContextResources.GRAPHICS_CONTEXT, graphics); } // Percent { BasicPainterContext graphics = new BasicPainterContext(); graphics.setPaint(Color.BLACK); graphics.put(TEXT_PAINTER, new Font(null, Font.BOLD, 10)); gantttable.getDrawingContext().put(TEXT_PAINTER, ContextResources.GRAPHICS_CONTEXT, graphics); } } /** * Load data to sqls gantt. * * @return the object[][] */ private Object[][] loadDataToSqlsGantt(Map<Integer,String> arraySqlIdText50SQLTextTab){ int i = 0; int ii = 0; int sizeGanttTable = 100; int sizeMainSqls = database.getSqlsTemp().getMainSqls().size(); StringBuilder clipBoardContent = new StringBuilder(); Object[][] data = new Object[Math.min(sizeGanttTable, sizeMainSqls)][3]; final GanttDrawingPartHelper partHelper = new GanttDrawingPartHelper(); double countOfSqls = database.getSqlsTemp().getCountSql();// get_sum(); double sumOfRange = database.getSqlsTemp().get_sum(); // Desc sorting HashMap<String, HashMap<String, Object>> sortedSessionMap = sortHashMapByValuesCOUNT(database.getSqlsTemp().getMainSqls()); Map<String,String> arraySqlIdType50 = new HashMap<String, String>(); Map<String,String> arraySqlIdText50 = new HashMap<String, String>(); for (Entry<String, HashMap<String, Object>> me : sortedSessionMap.entrySet()) { data[i][0] = createDrawingState(partHelper, me,countOfSqls,sumOfRange); data[i][1] = me.getKey(); data[i][2] = UNKNOWN; /** Load sqlid */ arraySqlIdType50.put(me.getKey(), database.getSqlType(me.getKey())); arraySqlIdText50.put(me.getKey(), database.getSqlText(me.getKey())); /** Exit when rows > 100 */ if (i+1==Math.min(sizeGanttTable, sizeMainSqls)){ break; } i++; ii++; } /** Set CommandType, SqlText for sqlid */ ii = 0; for (Entry<String, HashMap<String, Object>> me : sortedSessionMap.entrySet()) { data[ii][1] = createDrawingStateSqlId(partHelper,me,arraySqlIdText50); if (!arraySqlIdType50.get(me.getKey()).toString().equals("")){ data[ii][2] = arraySqlIdType50.get(me.getKey()); } /** Save clipboard content */ clipBoardContent.append( me.getKey()+":::"+ arraySqlIdText50.get(me.getKey()).trim()+"\n"); /** Save arraySqlIdText50 for SQL Text tab*/ if (arraySqlIdType50.get(me.getKey()) != "UNKNOWN"){ arraySqlIdText50SQLTextTab.put(ii, me.getKey()); } /** Exit when rows > 500 */ if (ii+1==Math.min(sizeGanttTable, sizeMainSqls)){ break; } ii++; } /** Set clipboard content */ Utils.setClipBoardContent(clipBoardContent.toString()); percentPrev = 0; return data; } /** * Load data to sessions gantt. * * @return the object[][] */ private Object[][] loadDataToSessionsGantt(){ String USERNAME = "USERNAME"; String PROGRAM = "PROGRAM"; String SESSIONID = "SESSIONID"; int i = 0; int sizeGanttTable = 100; int sizeMainSqls = database.getSessionsTemp().getMainSessions().size(); Object[][] data = new Object[Math.min(sizeGanttTable, sizeMainSqls)][4]; final GanttDrawingPartHelper partHelper = new GanttDrawingPartHelper(); double countOfSqls = database.getSessionsTemp().getCountSql();// get_sum(); double sumOfRange = database.getSessionsTemp().get_sum(); // Desc sorting HashMap<String, HashMap<String, Object>> sortedSessionMap = sortHashMapByValuesCOUNT(database.getSessionsTemp().getMainSessions()); for (Entry<String, HashMap<String, Object>> me : sortedSessionMap.entrySet()) { data[i][0] = createDrawingState(partHelper, me,countOfSqls,sumOfRange); data[i][1] = me.getValue().get(SESSIONID); data[i][2] = me.getValue().get(USERNAME); data[i][3] = me.getValue().get(PROGRAM); /** Exit when rows > 500 */ if (i+1==Math.min(sizeGanttTable, sizeMainSqls)){ break; } i++; } percentPrev = 0; return data; } /** * Creates the drawing state for Sqls and Sessions. * * @param helper the helper * @param me the me * @param countOfSqls the sum of range * * @return the drawing state */ private DrawingState createDrawingState( GanttDrawingPartHelper helper, Entry<String, HashMap<String,Object>> me, double countOfSqls, double sumOfRange ) { BasicDrawingState state = helper.createDrawingState(); ListDrawingPart part = helper.createDrawingPart(false); ListDrawingPart textLayer = helper.createDrawingPart(true); double countPerSqlID = (Double)me.getValue().get(COUNT); double percent = round(countPerSqlID/countOfSqls*100,2); /* < 30 => 2 * 30-70 => 1 * > 70 => 0 */ if (percentPrev == 0){ if (percent > 70){ scaleToggle = 0; } else if (percent <70 && percent >30){ scaleToggle = 1; } else if (percent < 30){ scaleToggle = 2; } } if (percent<0.6){ // Show only percent String localizedText = ""+percent+"%"; helper.createActivityEntry(new StringBuffer(localizedText), new Date(0), new Date(100), BasicPainterModule.BASIC_STRING_PAINTER, TEXT_PAINTER, textLayer); state.addDrawingPart(part); state.addDrawingPart(textLayer); return state; } // Save to local map, sort by values HashMap tempKeyMap = new HashMap<String,Double>(); tempKeyMap.put(other0, me.getValue().get(other0)); tempKeyMap.put(application1, me.getValue().get(application1)); tempKeyMap.put(configuration2, me.getValue().get(configuration2)); tempKeyMap.put(administrative3,me.getValue().get(administrative3)); tempKeyMap.put(concurrency4, me.getValue().get(concurrency4)); tempKeyMap.put(commit5, me.getValue().get(commit5)); tempKeyMap.put(network7, me.getValue().get(network7)); tempKeyMap.put(userIO8, me.getValue().get(userIO8)); tempKeyMap.put(systemIO9, me.getValue().get(systemIO9)); tempKeyMap.put(scheduler10, me.getValue().get(scheduler10)); tempKeyMap.put(cluster11, me.getValue().get(cluster11)); tempKeyMap.put(queueing12, me.getValue().get(queueing12)); tempKeyMap.put(cpu, me.getValue().get(cpu)); HashMap sortedByKeyMap = new HashMap<String,Double>(); //Sort values on desc order sortedByKeyMap = sortHashMapByValuesD(tempKeyMap); // Calculate sum of event by SqlId Set keySetsorted = sortedByKeyMap.keySet(); long start = 0; scale = Utils.getScale(scaleToggle, percent); // Create activites for row on gantt Set keySetsorted1 = sortedByKeyMap.keySet(); Iterator jj = keySetsorted.iterator(); while (jj.hasNext()) { String key = (String) jj.next(); double value = (Double)sortedByKeyMap.get(key); // Show only not zero activites. if (value != 0 ){ double currentGroupPercentNotScale = (value/countPerSqlID)*percent; double currentGroupPercent = currentGroupPercentNotScale*scale; if (currentGroupPercent<1.0 && currentGroupPercent>=0.6){ currentGroupPercent = round(currentGroupPercent,0); } long currGroupPercentL = (long)round(currentGroupPercent,0); // Set tooltip final StringBuffer o = new StringBuffer(); { o.append("<HTML>"); o.append("<b>" + getToolTipClassEvent(key) + " " + round(currentGroupPercentNotScale,2) + "%" + "</b>"); o.append("</HTML>"); } // Exit when prev. egantt < than current egantt graph if (percentPrev != 0 && (start + currGroupPercentL) > percentPrev ){ currGroupPercentL = percentPrev - start; helper.createActivityEntry( o, new Date(start), new Date(start+currGroupPercentL), getGradientContext(key), part); start = start + currGroupPercentL; break; } // If row only one if (currentGroupPercent == 100){ helper.createActivityEntry( o, new Date(start), new Date(currGroupPercentL), getGradientContext(key), part); } else { helper.createActivityEntry( o, new Date(start), new Date(start+currGroupPercentL), getGradientContext(key), part); start = start + currGroupPercentL; } } } // Show percent String localizedText = ""+percent+"%"; helper.createActivityEntry(new StringBuffer(localizedText), new Date(start), new Date(100), BasicPainterModule.BASIC_STRING_PAINTER, TEXT_PAINTER, textLayer); state.addDrawingPart(part); state.addDrawingPart(textLayer); percentPrev = start; return state; } /** * Creates the drawing state for SqlId. * * @param helper the helper * @param me the me * @param arraySqlIdText50 * @return the drawing state */ private DrawingState createDrawingStateSqlId(GanttDrawingPartHelper helper, Entry<String, HashMap<String, Object>> me, Map<String, String> arraySqlIdText50) { BasicDrawingState state = helper.createDrawingState(); ListDrawingPart part = helper.createDrawingPart(false); ListDrawingPart textLayer = helper.createDrawingPart(true); String key = ""; String value = ""; if (!arraySqlIdText50.get(me.getKey()).toString().equals("")) { key = me.getKey().trim(); value = arraySqlIdText50.get(me.getKey()).trim(); } else { key = me.getKey().trim(); value = "No data"; } // Show sqlid helper.createActivityEntry(new StringBuffer(key), new Date(5), new Date(95), BasicPainterModule.BASIC_STRING_PAINTER, TEXT_PAINTER, textLayer); // Set tooltip (sql_text) final StringBuffer o = new StringBuffer(); o.append(Utils.formatSqlQueryShort(value)); helper.createActivityEntry(o, new Date(0), new Date(100), BasicPainterModule.BASIC_STRING_PAINTER, part); state.addDrawingPart(part); state.addDrawingPart(textLayer); state.setTextValue(key); return state; } /** * Sort hash map by values d. * * @param passedMap the passed map * * @return the linked hash map */ public LinkedHashMap sortHashMapByValuesD(HashMap<String, Double> passedMap) { List mapKeys = new ArrayList(passedMap.keySet()); List mapValues = new ArrayList(passedMap.values()); Collections.sort(mapValues); Collections.sort(mapKeys); Collections.reverse(mapValues); LinkedHashMap sortedMap = new LinkedHashMap(); Iterator valueIt = mapValues.iterator(); while (valueIt.hasNext()) { Object val = valueIt.next(); Iterator keyIt = mapKeys.iterator(); while (keyIt.hasNext()) { Object key = keyIt.next(); String comp1 = passedMap.get(key).toString(); String comp2 = val.toString(); if (comp1.equals(comp2)){ passedMap.remove(key); mapKeys.remove(key); sortedMap.put(key, val); break; } } } return sortedMap; } /** * Sort hash map by values sumd. * * @param passedMap the passed map * * @return the linked hash map< string, hash map< string, object>> */ public LinkedHashMap<String, HashMap<String, Object>> sortHashMapByValuesSUMD (HashMap<String, HashMap<String, Object>> passedMap) { //bdb.getSqlsTemp().getMainSqls() List mapKeys = new ArrayList(); List mapValues = new ArrayList(); for (Entry<String, HashMap<String, Object>> me : passedMap.entrySet()) { mapKeys.add(me.getKey()); mapValues.add(me.getValue().get(SUM)); } Collections.sort(mapValues); Collections.sort(mapKeys); Collections.reverse(mapValues); LinkedHashMap<String, HashMap<String, Object>> sortedMap = new LinkedHashMap<String, HashMap<String, Object>>(); Iterator valueIt = mapValues.iterator(); while (valueIt.hasNext()) { Object val = valueIt.next(); Iterator keyIt = mapKeys.iterator(); while (keyIt.hasNext()) { Object key = keyIt.next(); String comp1 = passedMap.get(key).get(SUM).toString(); String comp2 = val.toString(); if (comp1.equals(comp2)){ sortedMap.put((String)key, passedMap.get(key)); passedMap.remove(key); mapKeys.remove(key); break; } } } return sortedMap; } /** * Sort hash map by values sumd. * * @param passedMap the passed map * * @return the linked hash map< string, hash map< string, object>> */ public LinkedHashMap<String, HashMap<String, Object>> sortHashMapByValuesCOUNT (HashMap<String, HashMap<String, Object>> passedMap) { //bdb.getSqlsTemp().getMainSqls() List mapKeys = new ArrayList(); List mapValues = new ArrayList(); for (Entry<String, HashMap<String, Object>> me : passedMap.entrySet()) { mapKeys.add(me.getKey()); mapValues.add(me.getValue().get(COUNT)); } Collections.sort(mapValues); Collections.sort(mapKeys); Collections.reverse(mapValues); LinkedHashMap<String, HashMap<String, Object>> sortedMap = new LinkedHashMap<String, HashMap<String, Object>>(); Iterator valueIt = mapValues.iterator(); while (valueIt.hasNext()) { Object val = valueIt.next(); Iterator keyIt = mapKeys.iterator(); while (keyIt.hasNext()) { Object key = keyIt.next(); String comp1 = passedMap.get(key).get(COUNT).toString(); String comp2 = val.toString(); if (comp1.equals(comp2)){ sortedMap.put((String)key, passedMap.get(key)); passedMap.remove(key); mapKeys.remove(key); break; } } } return sortedMap; } /** * Round. * * @param d the d * @param decimalPlace the decimal place * * @return the double */ public double round(double d, int decimalPlace){ BigDecimal bd; try { bd = new BigDecimal(Double.toString(d)); bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP); return bd.doubleValue(); } catch (NumberFormatException e) { // TODO Auto-generated catch block return 0.0; } } /** * Creates the progress bar. * * @param msg the msg * * @return the j panel */ private JPanel createProgressBar(String msg) { JProgressBar progress = ProgressBarUtil.createJProgressBar(msg); progress.setPreferredSize(new Dimension(250, 30)); JPanel panel = new JPanel(); panel.add(progress); return panel; } /** * Gets the gradient context. * * @param value the value * * @return the gradient context */ private String getGradientContext(String value){ String context = ""; if (value == other0) { context = GradientColorModule.OTHER0_GRADIENT_CONTEXT; } else if (value == application1) { context = GradientColorModule.APPLICATION1_GRADIENT_CONTEXT; } else if (value == configuration2) { context = GradientColorModule.CONFIGURATION2_GRADIENT_CONTEXT; } else if (value == administrative3) { context = GradientColorModule.ADMINISTRATIVE3_GRADIENT_CONTEXT; } else if (value == concurrency4) { context = GradientColorModule.CONCURRENCY4_GRADIENT_CONTEXT; } else if (value == commit5) { context = GradientColorModule.COMMIT5_GRADIENT_CONTEXT; } else if (value == network7) { context = GradientColorModule.NETWORK7_GRADIENT_CONTEXT; } else if (value == userIO8) { context = GradientColorModule.USERIO8_GRADIENT_CONTEXT; } else if (value == systemIO9) { context = GradientColorModule.SYSTEMIO9_GRADIENT_CONTEXT; } else if (value == scheduler10) { context = GradientColorModule.SCHEDULER10_GRADIENT_CONTEXT; } else if (value == cluster11) { context = GradientColorModule.CLUSTER11_GRADIENT_CONTEXT; } else if (value == queueing12) { context = GradientColorModule.QUEUEING12_GRADIENT_CONTEXT; } else if (value == cpu) { context = GradientColorModule.CPU_GRADIENT_CONTEXT; } return context; } /** * Gets the tooltip of class event. * * @param value the value * * @return the tooltip */ private String getToolTipClassEvent(String value){ String context = ""; if (value == other0) { context = "Other"; } else if (value == application1) { context = "Application"; } else if (value == configuration2) { context = "Configuration"; } else if (value == administrative3) { context = "Administrative"; } else if (value == concurrency4) { context = "Concurrency"; } else if (value == commit5) { context = "Commit"; } else if (value == network7) { context = "Network"; } else if (value == userIO8) { context = "User IO"; } else if (value == systemIO9) { context = "System IO"; } else if (value == scheduler10) { context = "Scheduler"; } else if (value == cluster11) { context = "Cluster"; } else if (value == queueing12) { context = "Queueing"; } else if (value == cpu) { context = "CPU used"; } return context; } /** * @return the topSqlsSqlText */ public int getTopSqlsSqlText() { return topSqlsSqlText; } /** * @param topSqlsSqlText the topSqlsSqlText to set */ public void setTopSqlsSqlText(int topSqlsSqlText) { this.topSqlsSqlText = topSqlsSqlText; } }