/* * 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.common.status.ComponentStatus; import jp.primecloud.auto.service.ProcessService; import jp.primecloud.auto.service.dto.ComponentDto; 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.StringUtils; 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.HorizontalLayout; import com.vaadin.ui.Label; @SuppressWarnings("serial") public class ServiceButtonsTop extends CssLayout { private MainView sender; private Button startAllButton; private Button stopAllButton; public ServiceButtonsTop(MainView sender) { this.sender = sender; } @Override public void attach() { setWidth("100%"); setMargin(false); addStyleName("service-buttons"); addStyleName("service-table-label"); Label label = new Label(ViewProperties.getCaption("label.service"), Label.CONTENT_XHTML); label.setWidth("200px"); addComponent(label); // StopAllボタン stopAllButton = new Button(ViewProperties.getCaption("button.stopAllServices")); stopAllButton.setDescription(ViewProperties.getCaption("description.stopAllServices")); 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.startAllServices")); startAllButton.setDescription(ViewProperties.getCaption("description.startAllServices")); 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) { // 変更中のサービスが存在する場合は操作させない for (Object itemId : sender.servicePanel.serviceTable.getItemIds()) { ComponentDto component = (ComponentDto) itemId; if (component.getStatus().equals(ComponentStatus.STARTING.toString()) || component.getStatus().equals(ComponentStatus.STOPPING.toString()) || component.getStatus().equals(ComponentStatus.CONFIGURING.toString())) { String message = ViewMessages.getMessage("IUI-000046", new Object[] { StringUtils.capitalize(component.getStatus().toLowerCase()) }); DialogConfirm dialog = new DialogConfirm(ViewProperties.getCaption("dialog.confirm"), message); getApplication().getMainWindow().addWindow(dialog); return; } } // 確認ダイアログを表示 String message = ViewMessages.getMessage("IUI-000009"); 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; } startAll(); } }); getApplication().getMainWindow().addWindow(dialog); } private void startAll() { // 選択されているサービスを保持する Long selectedComponentNo = null; if (sender.servicePanel.serviceTable.getValue() != null) { ComponentDto component = (ComponentDto) sender.servicePanel.serviceTable.getValue(); selectedComponentNo = component.getComponent().getComponentNo(); } // オペレーションログ OperationLogger.write("SERVICE", "All Service Start", null); // 全てのサービスを開始 List<Long> componentNos = new ArrayList<Long>(); for (Object itemId : sender.servicePanel.serviceTable.getItemIds()) { componentNos.add(((ComponentDto) itemId).getComponent().getComponentNo()); } ProcessService processService = BeanContext.getBean(ProcessService.class); processService.startComponents(ViewContext.getFarmNo(), componentNos); // 表示を更新 sender.refreshTable(); // 選択されていたサービスを選択し直す if (selectedComponentNo != null) { for (Object itemId : sender.servicePanel.serviceTable.getItemIds()) { ComponentDto component = (ComponentDto) itemId; if (selectedComponentNo.equals(component.getComponent().getComponentNo())) { sender.servicePanel.serviceTable.select(itemId); break; } } } } private void stopAllButtonClick(ClickEvent event) { // ダイアログの表示オプション HorizontalLayout optionLayout = new HorizontalLayout(); final CheckBox checkBox = new CheckBox(ViewMessages.getMessage("IUI-000033"), false); checkBox.setImmediate(true); optionLayout.addComponent(checkBox); // 確認ダイアログを表示 String message = ViewMessages.getMessage("IUI-000010"); 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 stopInstance = (Boolean) checkBox.getValue(); stopAll(stopInstance); } }); getApplication().getMainWindow().addWindow(dialog); } private void stopAll(boolean stopInstance) { // 選択されているサービスを保持する Long selectedComponentNo = null; if (sender.servicePanel.serviceTable.getValue() != null) { ComponentDto component = (ComponentDto) sender.servicePanel.serviceTable.getValue(); selectedComponentNo = component.getComponent().getComponentNo(); } // オペレーションログ OperationLogger.write("SERVICE", "All Service Stop", String.valueOf(stopInstance)); // 全てのサービスを停止 List<Long> componentNos = new ArrayList<Long>(); for (Object itemId : sender.servicePanel.serviceTable.getItemIds()) { componentNos.add(((ComponentDto) itemId).getComponent().getComponentNo()); } ProcessService processService = BeanContext.getBean(ProcessService.class); processService.stopComponents(ViewContext.getFarmNo(), componentNos, stopInstance); // 表示を更新 sender.refreshTable(); // 選択されていたサービスを選択し直す if (selectedComponentNo != null) { for (Object itemId : sender.servicePanel.serviceTable.getItemIds()) { ComponentDto component = (ComponentDto) itemId; if (selectedComponentNo.equals(component.getComponent().getComponentNo())) { sender.servicePanel.serviceTable.select(itemId); break; } } } } }