package com.plugtree.solrmeter.runMode;
import com.google.inject.Injector;
import com.plugtree.solrmeter.SolrMeterMain;
import com.plugtree.solrmeter.view.ConsoleFrame;
import com.plugtree.stressTestScope.StressTestRegistry;
import com.plugtree.solrmeter.view.*;
import com.plugtree.solrmeter.model.*;
import com.plugtree.solrmeter.controller.StatisticsRepository;
import com.google.inject.name.Names;
import com.google.inject.Key;
import com.plugtree.solrmeter.controller.StatisticDescriptor;
import com.plugtree.solrmeter.controller.StatisticType;import org.apache.log4j.Logger;
import javax.swing.*;
public class SolrMeterRunModeGUI extends AbstractSolrMeterRunMode {
public static final String RUN_MODE_NAME = "gui";
private void addQueryPanel(Injector injector2) {
mainFrame.getStatisticsContainer().addStatistic(injector.getInstance(QueryPanel.class));
}
private void initView(Injector injector) {
mainFrame = injector.getInstance(ConsoleFrame.class);
mainFrame.setTitle(I18n.get("mainFrame.title"));
}
private void showView() {
mainFrame.pack();
SwingUtils.centerWindow(mainFrame);
mainFrame.setVisible(true);
}
private void loadLookAndFeel() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
Logger.getLogger(SolrMeterMain.class).error("Error loading look and feel. Will Continue with default.", e);
}
}
private void addStatistics(Injector injector) {
QueryExecutor queryExecutor = injector.getInstance(QueryExecutor.class);
UpdateExecutor updateExecutor = injector.getInstance(UpdateExecutor.class);
OptimizeExecutor optimizeExecutor = injector.getInstance(OptimizeExecutor.class);
StatisticsRepository repository = injector.getInstance(StatisticsRepository.class);
for(StatisticDescriptor stat:repository.getActiveStatistics()) {
Logger.getLogger("boot").info("Adding Statistic " + stat.getName());
if(stat.isHasView()) {
addStatictic(mainFrame.getStatisticsContainer(), injector, stat.getViewName());
}
if(stat.getTypes().contains(StatisticType.QUERY)) {
addStatistic(queryExecutor, injector, stat.getModelName());
}
if(stat.getTypes().contains(StatisticType.UPDATE)) {
addStatistic(updateExecutor, injector, stat.getModelName());
}
if(stat.getTypes().contains(StatisticType.OPTIMIZE)) {
addStatistic(optimizeExecutor, injector, stat.getModelName());
}
}
}
private void addStatistic(OptimizeExecutor optimizeExecutor,
Injector injector, String modelName) {
Key<OptimizeStatistic> injectorKey = Key.get(OptimizeStatistic.class, Names.named(modelName));
optimizeExecutor.addStatistic(injector.getInstance(injectorKey));
}
private void addStatistic(UpdateExecutor updateExecutor,
Injector injector, String modelName) {
Key<UpdateStatistic> injectorKey = Key.get(UpdateStatistic.class, Names.named(modelName));
updateExecutor.addStatistic(injector.getInstance(injectorKey));
}
private void addStatictic(StatisticsContainer statisticsContainer,
Injector injector, String viewName) {
Key<StatisticPanel> injectorKey = Key.get(StatisticPanel.class, Names.named(viewName));
statisticsContainer.addStatistic(injector.getInstance(injectorKey));
}
private void addStatistic(QueryExecutor queryExecutor, Injector injector,
String modelName) {
Key<QueryStatistic> injectorKey = Key.get(QueryStatistic.class, Names.named(modelName));
queryExecutor.addStatistic(injector.getInstance(injectorKey));
}
public void main(Injector injector) {
super.main(injector);
StressTestRegistry.start();
loadLookAndFeel();
initView(injector);
addStatistics(injector);
addQueryPanel(injector);
showView();
}
public void restartApplication() {
StressTestRegistry.restart();
I18n.onConfigurationChange();
mainFrame.setQueryPanel(injector.getInstance(QueryConsolePanel.class));
mainFrame.setUpdatePanel(injector.getInstance(UpdateConsolePanel.class));
mainFrame.setOptimizePanel(injector.getInstance(OptimizeConsolePanel.class));
mainFrame.setCommitPanel(injector.getInstance(CommitConsolePanel.class));
mainFrame.setJMenuBar(injector.getInstance(JMenuBar.class));
mainFrame.onConfigurationChanged();
addStatistics(injector);
addQueryPanel(injector);
}
public ConsoleFrame getMainFrame() {
return super.getMainFrame();
}
}