/**
* Copyright Plugtree LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.plugtree.solrmeter.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import com.google.inject.Inject;
import com.plugtree.stressTestScope.StressTestScope;
import com.plugtree.solrmeter.controller.OptimizeExecutorController;
import com.plugtree.solrmeter.model.OptimizeExecutor;
import com.plugtree.solrmeter.model.SolrMeterConfiguration;
import com.plugtree.solrmeter.model.SolrServerRegistry;
import com.plugtree.solrmeter.model.operation.PingOperation;
import com.plugtree.solrmeter.model.statistic.SimpleOptimizeStatistic;
import com.plugtree.solrmeter.view.component.InfoPanel;
import com.plugtree.solrmeter.view.component.RoundedBorderJPanel;
import com.plugtree.solrmeter.view.component.SolrConnectedButton;
@StressTestScope
public class OptimizeConsolePanel extends RoundedBorderJPanel implements Refreshable {
private static final long serialVersionUID = -1971290718269938970L;
private OptimizeExecutor executor;
private SimpleOptimizeStatistic optimizeStatistic;
private OptimizeExecutorController controller;
private InfoPanel optimizing;
private InfoPanel totalOptimizeCount;
private InfoPanel lastOptimizationTime;
private InfoPanel totalOptimizationTime;
private InfoPanel lastOptimizationResult;
private InfoPanel optimizationTimeAverage;
private InfoPanel totalOptimizeErrors;
private SolrConnectedButton optimizeButton;
@Inject
public OptimizeConsolePanel(OptimizeExecutorController controller,
SimpleOptimizeStatistic optimizeStatistic,
OptimizeExecutor executor) {
super(I18n.get("optimizeConsolePanel.title"));
this.executor = executor;
this.optimizeStatistic = optimizeStatistic;
this.controller = controller;
this.initGUI();
}
private void initGUI() {
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
optimizing = new InfoPanel(I18n.get("optimizeConsolePanel.optimizingNow"), "false");
this.add(optimizing);
totalOptimizeCount = new InfoPanel(I18n.get("optimizeConsolePanel.optimizeCount"), "0");
this.add(totalOptimizeCount);
lastOptimizationTime = new InfoPanel(I18n.get("optimizeConsolePanel.lastOptimizeTime"), "0");
this.add(lastOptimizationTime);
totalOptimizationTime = new InfoPanel(I18n.get("optimizeConsolePanel.totalOptimizeTime"), "0");
this.add(totalOptimizationTime);
optimizationTimeAverage = new InfoPanel(I18n.get("optimizeConsolePanel.optimizationTimeAverage"), "0");
this.add(optimizationTimeAverage);
lastOptimizationResult = new InfoPanel(I18n.get("optimizeConsolePanel.lastOptimizationResult"), "-");
this.add(lastOptimizationResult);
totalOptimizeErrors = new InfoPanel(I18n.get("optimizeConsolePanel.totalOptimizationErrors"), "0");
this.add(totalOptimizeErrors);
this.add(Box.createVerticalGlue());
optimizeButton = new SolrConnectedButton(I18n.get("optimizeConsolePanel.optimizeNow"), I18n.get("optimizeConsolePanel.pingFailing"), this.createPingOperation());
this.add(optimizeButton);
optimizeButton.setAlignmentX(0.5f);
optimizeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
controller.onOptimize();
}
});
}
private PingOperation createPingOperation() {
return new PingOperation(SolrServerRegistry.getSolrServer(SolrMeterConfiguration.getProperty(SolrMeterConfiguration.SOLR_ADD_URL)));
}
private void optimizing() {
optimizing.setValue("true");
optimizeButton.setEnabled(false);
}
private void idle() {
optimizing.setValue("false");
optimizeButton.setEnabled(true);
}
public void refreshView() {
if(executor.isOptimizing()) {
this.optimizing();
}else {
this.idle();
}
totalOptimizeCount.setValue(String.valueOf(optimizeStatistic.getOptimizationCount()));
lastOptimizationTime.setValue(String.valueOf(optimizeStatistic.getLastOptimizationTime()));
totalOptimizationTime.setValue(String.valueOf(optimizeStatistic.getTotalOptimizationTime()));
optimizationTimeAverage.setValue(String.valueOf(optimizeStatistic.getAverageOptimizationTime()));
if(optimizeStatistic.getLastOptimizationResult() != null) {
lastOptimizationResult.setValue(String.valueOf(optimizeStatistic.getLastOptimizationResult()));
}
totalOptimizeErrors.setValue(String.valueOf(optimizeStatistic.getOptimizeErrorCount()));
}
}