/*
* Copyright 2014 by SCSK Corporation.
*
* This file is part of PrimeCloud Controller(TM).
*
* PrimeCloud Controller(TM) 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 2 of the License, or
* (at your option) any later version.
*
* PrimeCloud Controller(TM) 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 PrimeCloud Controller(TM). If not, see <http://www.gnu.org/licenses/>.
*/
package jp.primecloud.auto.ui;
import java.util.ArrayList;
import java.util.List;
import jp.primecloud.auto.config.Config;
import jp.primecloud.auto.service.ProcessService;
import jp.primecloud.auto.service.dto.InstanceDto;
import jp.primecloud.auto.ui.DialogConfirm.Buttons;
import jp.primecloud.auto.ui.DialogConfirm.Result;
import jp.primecloud.auto.ui.util.BeanContext;
import jp.primecloud.auto.ui.util.Icons;
import jp.primecloud.auto.ui.util.OperationLogger;
import jp.primecloud.auto.ui.util.ViewContext;
import jp.primecloud.auto.ui.util.ViewMessages;
import jp.primecloud.auto.ui.util.ViewProperties;
import org.apache.commons.lang.BooleanUtils;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
@SuppressWarnings("serial")
public class ServerButtonsTop extends CssLayout {
private MainView sender;
private Button startAllButton;
private Button stopAllButton;
public ServerButtonsTop(MainView sender) {
this.sender = sender;
}
@Override
public void attach() {
setWidth("100%");
setMargin(true);
addStyleName("server-buttons");
addStyleName("server-table-label");
Label labeal = new Label(ViewProperties.getCaption("label.server"), Label.CONTENT_XHTML);
labeal.setWidth("200px");
addComponent(labeal);
// StopAllボタン
stopAllButton = new Button(ViewProperties.getCaption("button.stopAllServers"));
stopAllButton.setDescription(ViewProperties.getCaption("description.stopAllServers"));
stopAllButton.setIcon(Icons.STOPMINI.resource());
stopAllButton.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
stopAllButtonClick(event);
}
});
stopAllButton.addStyleName("right");
addComponent(stopAllButton);
// StartAllボタン
startAllButton = new Button(ViewProperties.getCaption("button.startAllServers"));
startAllButton.setDescription(ViewProperties.getCaption("description.startAllServers"));
startAllButton.setIcon(Icons.PLAYMINI.resource());
startAllButton.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
startAllButtonClick(event);
}
});
startAllButton.addStyleName("right");
addComponent(startAllButton);
initialize();
}
public void initialize() {
stopAllButton.setEnabled(true);
startAllButton.setEnabled(true);
}
private void startAllButtonClick(ClickEvent event) {
// ダイアログの表示オプション
VerticalLayout optionLayout = null;
final CheckBox checkBox;
String enableService = Config.getProperty("ui.enableService");
if (enableService == null || BooleanUtils.toBoolean(enableService)) {
optionLayout = new VerticalLayout();
checkBox = new CheckBox(ViewMessages.getMessage("IUI-000035"), false);
checkBox.setImmediate(true);
optionLayout.addComponent(checkBox);
optionLayout.setComponentAlignment(checkBox, Alignment.MIDDLE_CENTER);
} else {
checkBox = null;
}
// 確認ダイアログを表示
String message = ViewMessages.getMessage("IUI-000011");
DialogConfirm dialog = new DialogConfirm(ViewProperties.getCaption("dialog.confirm"), message,
Buttons.OKCancelConfirm, optionLayout);
dialog.setCallback(new DialogConfirm.Callback() {
@Override
public void onDialogResult(Result result) {
if (result != Result.OK) {
return;
}
boolean startService = (checkBox == null) ? false : (Boolean) checkBox.getValue();
startAll(startService);
}
});
getApplication().getMainWindow().addWindow(dialog);
}
private void startAll(boolean startService) {
// 選択されているサーバを保持する
Long selectedInstanceNo = null;
if (sender.serverPanel.serverTable.getValue() != null) {
InstanceDto instance = (InstanceDto) sender.serverPanel.serverTable.getValue();
selectedInstanceNo = instance.getInstance().getInstanceNo();
}
// オペレーションログ
OperationLogger.write("SERVER", "All Server Start", String.valueOf(startService));
// 全てのサーバを起動
List<Long> instanceNos = new ArrayList<Long>();
for (Object itemId : sender.serverPanel.serverTable.getItemIds()) {
instanceNos.add(((InstanceDto) itemId).getInstance().getInstanceNo());
}
ProcessService processService = BeanContext.getBean(ProcessService.class);
processService.startInstances(ViewContext.getFarmNo(), instanceNos, startService);
// 表示を更新
sender.refreshTable();
// 選択されていたサーバを選択し直す
if (selectedInstanceNo != null) {
for (Object itemId : sender.serverPanel.serverTable.getItemIds()) {
InstanceDto instance = (InstanceDto) itemId;
if (selectedInstanceNo.equals(instance.getInstance().getInstanceNo())) {
sender.serverPanel.serverTable.select(itemId);
break;
}
}
}
}
private void stopAllButtonClick(ClickEvent event) {
// 確認ダイアログの表示
String message = ViewMessages.getMessage("IUI-000012");
DialogConfirm dialog = new DialogConfirm(ViewProperties.getCaption("dialog.confirm"), message,
Buttons.OKCancelConfirm);
dialog.setCallback(new DialogConfirm.Callback() {
@Override
public void onDialogResult(Result result) {
if (result != Result.OK) {
return;
}
stopAll();
}
});
getApplication().getMainWindow().addWindow(dialog);
}
private void stopAll() {
// 選択されているサーバを保持する
Long selectedInstanceNo = null;
if (sender.serverPanel.serverTable.getValue() != null) {
InstanceDto instance = (InstanceDto) sender.serverPanel.serverTable.getValue();
selectedInstanceNo = instance.getInstance().getInstanceNo();
}
// オペレーションログ
OperationLogger.write("SERVER", "All Server Stop", null);
// 全てのサーバを停止
List<Long> instanceNos = new ArrayList<Long>();
for (Object itemId : sender.serverPanel.serverTable.getItemIds()) {
instanceNos.add(((InstanceDto) itemId).getInstance().getInstanceNo());
}
ProcessService processService = BeanContext.getBean(ProcessService.class);
processService.stopInstances(ViewContext.getFarmNo(), instanceNos);
// 表示を更新
sender.refreshTable();
// 選択されていたサーバを選択し直す
if (selectedInstanceNo != null) {
for (Object itemId : sender.serverPanel.serverTable.getItemIds()) {
InstanceDto instance = (InstanceDto) itemId;
if (selectedInstanceNo.equals(instance.getInstance().getInstanceNo())) {
sender.serverPanel.serverTable.select(itemId);
break;
}
}
}
}
}