/*
* Copyright (C) 2012-2016 NS Solutions Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.htmlhifive.tools.wizard.ui.page;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.dialogs.IPageChangeProvider;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.IPageChangingListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.jface.dialogs.PageChangingEvent;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.wst.jsdt.internal.ui.wizards.JavaProjectWizardFirstPage;
import org.eclipse.wst.jsdt.internal.ui.wizards.NewWizardMessages;
import com.htmlhifive.tools.wizard.RemoteContentManager;
import com.htmlhifive.tools.wizard.library.LibraryList;
import com.htmlhifive.tools.wizard.library.xml.BaseProject;
import com.htmlhifive.tools.wizard.log.PluginLogger;
import com.htmlhifive.tools.wizard.log.PluginLoggerFactory;
import com.htmlhifive.tools.wizard.log.messages.Messages;
import com.htmlhifive.tools.wizard.ui.UIEventHelper;
import com.htmlhifive.tools.wizard.ui.UIMessages;
/**
* ディレクトリ構造を決定するウィザードのページ.
*
* @author fkubo
*/
public class StructureSelectPage extends WizardPage {
/** ロガー. */
private static PluginLogger logger = PluginLoggerFactory.getLogger(StructureSelectPage.class);
/** container. */
private StructureSelectComposite container;
/** changeProject. */
private boolean changeProject = true;
/** refreshList. */
private boolean refreshList = true;
/** initFlag. */
private boolean initFlag = false;
/**
* コンストラクタ.
*
* @param pageName ページ名
*/
public StructureSelectPage(String pageName) {
super(pageName);
logger.log(Messages.TR0011, getClass().getSimpleName(), "<init>");
setDescription("");
setMessage(UIMessages.StructureSelectPage_this_message);
setTitle(UIMessages.StructureSelectPage_this_title);
//setPageComplete(false);
}
/**
* {@inheritDoc}
*/
@Override
public void createControl(Composite parent) {
logger.log(Messages.TR0011, getClass().getSimpleName(), "createControl");
container = new StructureSelectComposite(parent, SWT.NONE);
setControl(container);
// 下からのメッセージを受ける.
container.addListener(UIEventHelper.SET_MESSAGE, new Listener() {
@Override
public void handleEvent(Event event) {
// メッセージを設定.
setErrorMessage(event.text); // WizardPage
// 次に遷移できるかどうかを設定
setPageComplete(event.text == null);
}
});
container.addListener(UIEventHelper.PROJECT_CHANGE, new Listener() {
@Override
public void handleEvent(Event event) {
StructureSelectPage.this.changeProject = true;
JavaProjectWizardFirstPage javaProjectWizardFirstPage = (JavaProjectWizardFirstPage) getWizard()
.getPage(NewWizardMessages.JavaProjectWizardFirstPage_page_pageName);
// プロジェクト名を設定する.
javaProjectWizardFirstPage.setName(getProjectName());
StructureSelectPage.this.container.validatePage();
((LibraryImportPage) getNextPage()).setPageComplete(false);//falseにしておく.
getContainer().updateButtons();
}
});
container.addListener(UIEventHelper.LIST_RELOAD, new Listener() {
@Override
public void handleEvent(Event event) {
StructureSelectPage.this.refreshList = true;
StructureSelectPage.this.container.validatePage();
((LibraryImportPage) getNextPage()).setPageComplete(false);//falseにしておく.
getContainer().updateButtons();
}
});
// ページ初期表示時の処理.
((IPageChangeProvider) getContainer()).addPageChangedListener(new IPageChangedListener() {
@Override
public void pageChanged(PageChangedEvent event) {
if (!initFlag && event.getSelectedPage() == StructureSelectPage.this
&& event.getSource() == getContainer()) {
// 初期プロジェクト名.
container.setProjectName("hifive-web");
// チェック.
container.setInputComboZip();
initFlag = true;
}
StructureSelectPage.this.container.validatePage();
}
});
// ページ切替時の処理.
((WizardDialog) getContainer()).addPageChangingListener(new IPageChangingListener() {
@Override
public void handlePageChanging(PageChangingEvent event) {
// // 画面表示時.
// if (!initFlag && event.getCurrentPage() != getNextPage()
// && event.getTargetPage() == StructureSelectPage.this) {
// // 初期プロジェクト名.
// container.setProjectName("hifive-web");
//
// // チェック.
// container.setInputComboZip();
// initFlag = true;
// return;
// }
// 次のページ遷移時.
if (event.getCurrentPage() == StructureSelectPage.this && event.getTargetPage() == getNextPage()) {
if (StructureSelectPage.this.changeProject || StructureSelectPage.this.refreshList) {
//ConfirmLicensePage confirmLicensePage = (ConfirmLicensePage) getWizard().getPage(
//"confirmLicensePage");
LibraryImportPage libraryImportPage = (LibraryImportPage) getWizard().getPage(
"libraryImportPage");
// JavaProjectWizardFirstPage javaProjectWizardFirstPage = (JavaProjectWizardFirstPage) getWizard()
// .getPage(NewWizardMessages.JavaProjectWizardFirstPage_page_pageName);
// // プロジェクト名を設定する.
// javaProjectWizardFirstPage.setName(getProjectName());
BaseProject baseProject = getBaseProject();
if (baseProject != null) {
if (libraryImportPage.initialize(null, getProjectName(), baseProject.getDefaultJsLibPath(),
refreshList)) {
// 変更あり.
//confirmLicensePage.clearCategory();
StructureSelectPage.this.changeProject = false;
}
}
}
}
}
});
// // 初期プロジェクト名.
// container.setProjectName("hifive-web");
//
// // チェック.
// container.setInputComboZip();
}
/**
* Creates a project resource handle for the current project name field value. The project handle is created
* relative to the workspace root.
* <p>
* This method does not create the project resource; this is the responsibility of <code>IProject::create</code>
* invoked by the new project resource wizard.
* </p>
*
* @return the new project resource handle
*/
public IProject getProjectHandle() {
return ResourcesPlugin.getWorkspace().getRoot().getProject(getProjectName());
}
/**
* プロジェクト名を取得する.
*
* @return プロジェクト名
*/
public String getProjectName() {
return container.textProject.getText().trim();
}
/**
* 選択済のベースのプロジェクト.
*
* @return 選択済のベースのプロジェクト.
*/
public BaseProject getBaseProject() {
// libraryListのnull対応.
LibraryList libraryList = RemoteContentManager.getLibraryList();
if (libraryList == null) {
return null;
}
return libraryList.getInfoBaseProjectMap().get(container.comboZip.getText());
}
}