/* * 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 jp.primecloud.auto.exception.AutoApplicationException; import jp.primecloud.auto.service.InstanceService; import jp.primecloud.auto.service.dto.DataDiskDto; import jp.primecloud.auto.ui.util.BeanContext; import jp.primecloud.auto.ui.util.Icons; import jp.primecloud.auto.ui.util.ViewMessages; import jp.primecloud.auto.ui.util.ViewProperties; import com.vaadin.Application; import com.vaadin.data.validator.RegexpValidator; import com.vaadin.event.ShortcutAction.KeyCode; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Form; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; /** * <p> * データディスク追加/編集画面を生成します。 * </p> * */ @SuppressWarnings("serial") public class WinServerDataDiskConfig extends Window { Long instanceNo; DataDiskDto dataDiskDto; Application ap; TextField txtDiskSize; Boolean isAddMode; WinServerDataDiskConfig(Application ap, Long instanceNo, DataDiskDto dataDiskDto) { this.ap = ap; this.instanceNo = instanceNo; this.dataDiskDto = dataDiskDto; // Window isAddMode = (this.dataDiskDto == null) ? true : false; if (isAddMode) { //ディスク追加画面 setIcon(Icons.ADD.resource()); setCaption(ViewProperties.getCaption("window.WinServerAddDataDisk")); } else { //ディスク編集画面 setIcon(Icons.EDIT.resource()); setCaption(ViewProperties.getCaption("window.WinServerEditDataDisk")); } setModal(true); setWidth("400px"); setResizable(false); // Layout VerticalLayout layout = (VerticalLayout) getContent(); layout.setMargin(true); layout.setSpacing(true); // Form Form form = new Form(); txtDiskSize = new TextField(ViewProperties.getCaption("field.diskSize")); txtDiskSize.setWidth("90%"); form.getLayout().addComponent(txtDiskSize); layout.addComponent(form); // 下部のバー HorizontalLayout buttonBar = new HorizontalLayout(); buttonBar.setSpacing(true); buttonBar.setMargin(false, true, true, false); layout.addComponent(buttonBar); layout.setComponentAlignment(buttonBar, Alignment.BOTTOM_RIGHT); // OK Button Button btnOk = new Button(ViewProperties.getCaption("button.ok")); btnOk.setDescription(ViewProperties.getCaption("description.ok")); btnOk.addListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { okButtonClick(event); } }); buttonBar.addComponent(btnOk); // [Enter]でOKボタンクリック btnOk.setClickShortcut(KeyCode.ENTER); //Cancel Button Button btnCancel = new Button(ViewProperties.getCaption("button.cancel")); btnCancel.setDescription(ViewProperties.getCaption("description.cancel")); btnCancel.addListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { close(); } }); buttonBar.addComponent(btnCancel); //データ表示 showData(); // 入力チェックの設定 initValidation(); } private void showData() { if (!isAddMode) { txtDiskSize.setValue(String.valueOf(dataDiskDto.getDiskSize())); } } private void initValidation() { // ディスクサイズ String message = ViewMessages.getMessage("IUI-000032"); txtDiskSize.setRequired(true); txtDiskSize.setRequiredError(message); txtDiskSize.addValidator(new RegexpValidator("^[1-9]|[1-9][0-9]{1,2}|1000$", true, message)); } private void okButtonClick(ClickEvent event) { // 入力値を取得 String diskSize = (String) txtDiskSize.getValue(); // 入力チェック //基本バリデーション txtDiskSize.validate(); //個別バリデーション if (!isAddMode) { //編集の場合 if (Integer.valueOf(diskSize) < dataDiskDto.getDiskSize()) { //変更後のディスクサイズが変更前より小さい場合 throw new AutoApplicationException("IUI-000125"); } } // 更新処理 InstanceService instanceService = BeanContext.getBean(InstanceService.class); // 入力値を格納 Long diskNo; if (isAddMode) { //テーブル更新処理 dataDiskDto = new DataDiskDto(); dataDiskDto.setDiskSize(Integer.valueOf(diskSize)); diskNo = instanceService.createDataDisk(instanceNo, dataDiskDto); } else { //テーブル更新処理 dataDiskDto.setDiskSize(Integer.valueOf(diskSize)); instanceService.updateDataDisk(instanceNo, dataDiskDto); diskNo = dataDiskDto.getDiskNo(); } //IaasGateWay処理(ディスクアタッチ) instanceService.attachDataDisk(instanceNo, diskNo); // ログイン画面を閉じる close(); } }