/**
* @version $Id: EntryWizard.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/10/26 19:35:35
* @author kyohei-miyazato
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.ui.wizards;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.IPageChangingListener;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.jface.dialogs.PageChangingEvent;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import com.tida_okinawa.corona.io.model.IClaimData;
import com.tida_okinawa.corona.io.model.table.IFieldHeader;
import com.tida_okinawa.corona.ui.UIActivator;
import com.tida_okinawa.corona.ui.controllers.ErratumController;
import com.tida_okinawa.corona.ui.views.db.DataBaseView;
import com.tida_okinawa.corona.uicomponent.IRefreshable;
/**
* CSV・xlsx・ドキュメントからデータベースへ問い合わせデータを登録するウィザード
*
* @author kyohei-miyazato
*/
public class EntryWizard extends Wizard {
EntryWizardPage page1;
ColumnSelectWizardPage page2;
ErratumWizardPage page3;
/**
* コンストラクター
*/
public EntryWizard() {
setWindowTitle(Messages.EntryWizard_titleEntryDatabase);
setDialogSettings(UIActivator.getDefault().getDialogSettings());
}
@Override
public void addPages() {
page1 = new EntryWizardPage("com.tida_okinawa.corona.ui.wizardpage.EntryWizardPage"); //$NON-NLS-1$
page2 = new ColumnSelectWizardPage("com.tida_okinawa.corona.ui.wizardpage.ColumnSelectWizardPage"); //$NON-NLS-1$
page3 = new ErratumWizardPage("com.tida_okinawa.corona.ui.wizardpage.ErratumWizardPage"); //$NON-NLS-1$
addPage(page1);
addPage(page2);
addPage(page3);
/**
* 画面遷移前(page1)の状態でXLS形式が選択されている場合、確認メッセージを表示する。
* OKの場合 次画面へ遷移する。 (page2)
* CANCELの場合 次画面へ遷移しない。(page1)
*/
((WizardDialog) getContainer()).addPageChangingListener(new IPageChangingListener() {
@Override
public void handlePageChanging(PageChangingEvent event) {
if (event.getCurrentPage().equals(page1) && page1.isXlsTypeSelected()) {
MessageBox mb = new MessageBox(getShell(), SWT.OK | SWT.CANCEL);
mb.setText(Messages.EntryWizard_climaDataConfirm);
mb.setMessage(Messages.EntryWizard_climeDataConfirmText);
if (mb.open() == SWT.CANCEL) {
event.doit = false;
}
}
}
});
((WizardDialog) getContainer()).addPageChangedListener(new IPageChangedListener() {
@Override
public void pageChanged(PageChangedEvent event) {
if (event.getSelectedPage().equals(page2) && !page1.isDocTypeSelected()) {
List<IFieldHeader> fieldHeaders = null;
try {
fieldHeaders = page1.getFieldHeaders();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
page2.setFieldHeaders(fieldHeaders);
page3.setFieldHeaders(fieldHeaders);
}
((WizardPageBase) event.getSelectedPage()).setFocus();
}
});
}
/*
* 「終了」ボタン押下時の処理
*/
@Override
public boolean performFinish() {
// page2.finished();
IClaimData claim = page1.finished();
if (claim != null) {
// CSV形式の場合
if (!page1.isDocTypeSelected()) {
claim.setDispIdField(page2.getIdFieldIndex());
claim.setProductField(page2.getProductFieldIndex());
claim.commit();
}
List<IFieldHeader> targetFields = getTargetFieldHeaders();
ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell());
ErratumController controller = new ErratumController(dialog.getShell(), claim, targetFields, null);
try {
dialog.run(true, true, controller);
return true;
} catch (InvocationTargetException e) {
e.printStackTrace();
return false;
} catch (InterruptedException e) {
return false;
} finally {
/* 現在アクティブなビュー(DataBaseViewであるはず)の表示が更新可能な実装であれば更新する */
IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
if (part instanceof IRefreshable) {
((DataBaseView) part).refreshView();
}
}
/*
* true: Wizardを終了する。
* false:Wizardを終了しない
*/
} else {
MessageDialog.openWarning(getShell(), Messages.EntryWizard_messageError, Messages.EntryWizard_messageFailEntryDatabase);
return true;
}
}
/**
* @return 誤記補正対象フィールドの一覧
*/
public List<IFieldHeader> getTargetFieldHeaders() {
if (page1.isDocTypeSelected()) {
return page1.getTargetFieldHeaders();
}
return page3.getSelectedFields(false);
}
/*
* 「キャンセル」ボタン押下時の処理
*/
@Override
public boolean performCancel() {
/*
* true: Wizardを終了する。
* false:Wizardを終了しない
*/
return true;
}
@Override
public boolean canFinish() {
if (page1.isDocTypeSelected() && page1.isPageComplete()) {
return true;
}
return super.canFinish();
}
}