/*
* 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.service.FarmService;
import jp.primecloud.auto.service.dto.FarmDto;
import jp.primecloud.auto.ui.DialogConfirm.Buttons;
import jp.primecloud.auto.ui.DialogConfirm.Callback;
import jp.primecloud.auto.ui.DialogConfirm.Result;
import jp.primecloud.auto.ui.util.BeanContext;
import jp.primecloud.auto.ui.util.ContextUtils;
import jp.primecloud.auto.ui.util.Icons;
import jp.primecloud.auto.ui.util.OperationLogger;
import jp.primecloud.auto.ui.util.ViewMessages;
import jp.primecloud.auto.ui.util.ViewProperties;
import com.vaadin.data.validator.StringLengthValidator;
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.Form;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
/**
* <p>
* myCloudの編集画面を生成します。
* </p>
*
*/
@SuppressWarnings("serial")
public class MyCloudEdit extends Window {
final String COLUMN_HEIGHT = "30px";
private Long farmNo;
private BasicTab basicTab;
private FarmDto farm;
public MyCloudEdit(Long farmNo) {
this.farmNo = farmNo;
}
@Override
public void attach() {
// モーダルウインドウ
setIcon(Icons.ADD.resource());
setCaption(ViewProperties.getCaption("window.myCloudEdit"));
setModal(true);
setWidth("450px");
VerticalLayout layout = (VerticalLayout) getContent();
layout.setMargin(false, true, false, true);
layout.setSpacing(true);
// 基本情報
basicTab = new BasicTab();
layout.addComponent(basicTab);
// 下部のバー
HorizontalLayout bottomLayout = new HorizontalLayout();
bottomLayout.setSpacing(true);
bottomLayout.setMargin(false, false, true, false);
//okbar.setWidth("100%");
layout.addComponent(bottomLayout);
layout.setComponentAlignment(bottomLayout, Alignment.BOTTOM_RIGHT);
// OKボタン
Button okButton = new Button(ViewProperties.getCaption("button.ok"));
okButton.setDescription(ViewProperties.getCaption("description.editCloud.ok"));
okButton.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
editButtonClick(event);
}
});
bottomLayout.addComponent(okButton);
// Cancelボタン
Button cancelButton = new Button(ViewProperties.getCaption("button.cancel"));
cancelButton.setDescription(ViewProperties.getCaption("description.cancel"));
cancelButton.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
close();
}
});
bottomLayout.addComponent(cancelButton);
// myCloud情報を表示
loadData();
basicTab.show(farm);
}
private class BasicTab extends Form {
private TextField cloudNameField;
private TextField domainNameField;
private TextField commentField;
@Override
public void attach() {
// myCloud名
cloudNameField = new TextField(ViewProperties.getCaption("field.cloudName"));
getLayout().addComponent(cloudNameField);
// ドメイン名
domainNameField = new TextField(ViewProperties.getCaption("field.domainName"));
domainNameField.setWidth("100%");
getLayout().addComponent(domainNameField);
// コメント
commentField = new TextField(ViewProperties.getCaption("field.comment"));
commentField.setWidth("100%");
getLayout().addComponent(commentField);
cloudNameField.focus();
initValidation();
}
private void initValidation() {
String message = ViewMessages.getMessage("IUI-000003");
commentField.addValidator(new StringLengthValidator(message, -1, 100, true));
}
public void show(FarmDto farm) {
cloudNameField.setReadOnly(false);
cloudNameField.setValue(farm.getFarm().getFarmName());
cloudNameField.setReadOnly(true);
commentField.setValue(farm.getFarm().getComment());
domainNameField.setReadOnly(false);
domainNameField.setValue(farm.getFarm().getDomainName());
domainNameField.setReadOnly(true);
}
}
private void loadData() {
// myCloud情報を取得
FarmService farmService = BeanContext.getBean(FarmService.class);
farm = farmService.getFarm(farmNo);
}
private void editButtonClick(ClickEvent event) {
// 入力値を取得
final String cloudName = (String) basicTab.cloudNameField.getValue();
final String domainName = (String) basicTab.domainNameField.getValue();
final String comment = (String) basicTab.commentField.getValue();
// 入力チェック
basicTab.commentField.validate();
// myCloud編集の確認ダイアログを表示
String diagMessage = ViewMessages.getMessage("IUI-000041", cloudName);
DialogConfirm dialogConfirm = new DialogConfirm(ViewProperties.getCaption("dialog.confirm"), diagMessage,
Buttons.OKCancel);
dialogConfirm.setCallback(new Callback() {
@Override
public void onDialogResult(Result result) {
if (result != Result.OK) {
return;
}
OperationLogger.writeFarm("CLOUD", "Edit Cloud", farmNo, null);
// myCloudを編集
FarmService farmService = BeanContext.getBean(FarmService.class);
farmService.updateFarm(farmNo, comment, domainName);
// 編集したmyCloudのfarmNoをセッションに格納
ContextUtils.setAttribute("editFarmNo", farmNo);
// 画面を閉じる
close();
}
});
getApplication().getMainWindow().addWindow(dialogConfirm);
}
}