/*
* 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 java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeNodeContentProvider;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.wst.jsdt.core.IJavaScriptProject;
import com.htmlhifive.tools.wizard.H5WizardPlugin;
import com.htmlhifive.tools.wizard.RemoteContentManager;
import com.htmlhifive.tools.wizard.library.LibraryList;
import com.htmlhifive.tools.wizard.library.LibraryState;
import com.htmlhifive.tools.wizard.library.xml.Category;
import com.htmlhifive.tools.wizard.library.xml.Library;
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;
import com.htmlhifive.tools.wizard.ui.page.tree.CategoryNode;
import com.htmlhifive.tools.wizard.ui.page.tree.LibraryNode;
import com.htmlhifive.tools.wizard.ui.page.tree.LibraryTreeLabelProvider;
import com.htmlhifive.tools.wizard.ui.page.tree.LibraryTreeLatestViewerFilter;
import com.htmlhifive.tools.wizard.ui.page.tree.RootNode;
import com.htmlhifive.tools.wizard.utils.H5IOUtils;
import com.htmlhifive.tools.wizard.utils.H5LogUtils;
/**
* <H3>ライブラリインポート用コンポジット.</H3>
*
* @author fkubo
*/
public class LibraryImportComposite extends Composite {
/** ロガー. */
private static PluginLogger logger = PluginLoggerFactory.getLogger(LibraryImportComposite.class);
private final Tree treeLibrary;
private final CheckboxTreeViewer treeViewerLibrary;
private final Table tableSelection;
private final Link linkDetail;
private final Label lblListInfo;
private final Button checkFilterLatest;
private final Combo cmbDefaultInstallPath;
private final ScrolledComposite scrolledComposite;
private final Button btnReload;
private IJavaScriptProject jsProject = null;
private String projectName = null;
/**
* Create the composite.
*
* @param parent
* @param style
*/
public LibraryImportComposite(Composite parent, int style) {
super(parent, style);
logger.log(Messages.TR0001, getClass().getSimpleName(), "<init>");
setLayout(new GridLayout(1, false));
Label lblInfo = new Label(this, SWT.NONE);
lblInfo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
lblInfo.setText(UIMessages.LibraryImportComposite_lblNewLabel_text);
lblListInfo = new Label(this, SWT.NONE);
lblListInfo.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
Group groupAll = new Group(this, SWT.NONE);
groupAll.setLayout(new GridLayout(4, false));
groupAll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
groupAll.setText(UIMessages.LibraryImportPageComposite_groupAll_text);
checkFilterLatest = new Button(groupAll, SWT.CHECK);
checkFilterLatest.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
checkFilterLatest.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
do_checkFilterLatest_widgetSelected(e);
}
});
checkFilterLatest.setText(UIMessages.LibraryImportComposite_checkFilterLatest_text);
checkFilterLatest.setSelection(true);
Button btnRecommended = new Button(groupAll, SWT.NONE);
btnRecommended.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
btnRecommended.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
do_btnRecommended_widgetSelected(e);
}
});
btnRecommended.setText(UIMessages.LibraryImportComposite_btnRecommended_text);
btnReload = new Button(groupAll, SWT.NONE);
btnReload.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
btnReload.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
do_btnReload_widgetSelected(e);
}
});
btnReload.setText(UIMessages.LibraryImportComposite_btnReload_text);
Label lblDefaultInstallPath = new Label(groupAll, SWT.NONE);
lblDefaultInstallPath.setText(UIMessages.LibraryImportComposite_lblDefaultInstallPath_text);
cmbDefaultInstallPath = new Combo(groupAll, SWT.NONE);
cmbDefaultInstallPath.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
do_cmbDefaultInstallPath_modifyText(e);
}
});
GridData gd_cmbDefaultInstallPath = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
gd_cmbDefaultInstallPath.horizontalIndent = 20;
cmbDefaultInstallPath.setLayoutData(gd_cmbDefaultInstallPath);
new Label(groupAll, SWT.NONE);
new Label(groupAll, SWT.NONE);
treeViewerLibrary = new CheckboxTreeViewer(groupAll, SWT.BORDER | SWT.CHECK);
treeLibrary = treeViewerLibrary.getTree();
TreeColumn treeClmnName = new TreeColumn(treeLibrary, SWT.NONE);
treeClmnName.setWidth(320);
treeClmnName.setText(UIMessages.LibraryImportComposite_treeColumn_text);
treeLibrary.setHeaderVisible(true);
treeLibrary.setLinesVisible(true);
treeLibrary.setEnabled(false);
treeViewerLibrary.setAutoExpandLevel(3);
Tree treeLibrary = treeViewerLibrary.getTree();
GridData gd_treeLibrary = new GridData(SWT.FILL, SWT.FILL, false, true, 4, 1);
gd_treeLibrary.heightHint = 160;
treeLibrary.setLayoutData(gd_treeLibrary);
treeLibrary.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
do_treeLibrary_widgetSelected(e);
}
});
treeViewerLibrary.setContentProvider(new TreeNodeContentProvider());
treeViewerLibrary.setLabelProvider(new LibraryTreeLabelProvider());
treeViewerLibrary.setFilters(new ViewerFilter[] { new LibraryTreeLatestViewerFilter() });
TreeColumn treeClmnPath = new TreeColumn(treeLibrary, SWT.NONE);
treeClmnPath.setWidth(180);
treeClmnPath.setText(UIMessages.LibraryImportComposite_treeClmnPath_text);
Group grpDetails = new Group(groupAll, SWT.NONE);
FillLayout fl_grpDetails = new FillLayout(SWT.HORIZONTAL);
fl_grpDetails.marginWidth = 5;
fl_grpDetails.marginHeight = 5;
grpDetails.setLayout(fl_grpDetails);
GridData gd_grpDetails = new GridData(SWT.FILL, SWT.FILL, false, false, 4, 1);
gd_grpDetails.heightHint = 60;
grpDetails.setLayoutData(gd_grpDetails);
grpDetails.setText(UIMessages.LibraryImportComposite_grpDetails_text);
scrolledComposite = new ScrolledComposite(grpDetails, SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandVertical(true);
scrolledComposite.setExpandHorizontal(true);
linkDetail = new Link(scrolledComposite, SWT.NONE);
linkDetail.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent selectionevent) {
if (selectionevent.text.startsWith("http://") || selectionevent.text.startsWith("https://")) {
// 安全のためとりあえずは、http, httpsだけ
Program.launch(selectionevent.text);
}
}
});
scrolledComposite.setContent(linkDetail);
scrolledComposite.setMinSize(linkDetail.computeSize(SWT.DEFAULT, SWT.DEFAULT));
Group groupSelect = new Group(this, SWT.NONE);
groupSelect.setLayout(new GridLayout(2, false));
groupSelect.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
groupSelect.setText(UIMessages.LibraryImportPageComposite_groupSelect_text);
TableViewer tableSelectionViewer = new TableViewer(groupSelect, SWT.BORDER | SWT.FULL_SELECTION
| SWT.HIDE_SELECTION);
tableSelection = tableSelectionViewer.getTable();
GridData gd_tableSelection = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
gd_tableSelection.heightHint = 60;
tableSelection.setLayoutData(gd_tableSelection);
tableSelection.setHeaderVisible(true);
tableSelection.setLinesVisible(true);
TableColumn tblclmnStatus = new TableColumn(tableSelection, SWT.NONE);
tblclmnStatus.setText(UIMessages.LibraryImportComposite_tblclmnStatus_text);
tblclmnStatus.setWidth(80);
TableColumn tblclmnCategory = new TableColumn(tableSelection, SWT.NONE);
tblclmnCategory.setWidth(100);
tblclmnCategory.setText(UIMessages.LibraryImportComposite_tblclmnCategory_text);
TableColumn tblclmnVersion = new TableColumn(tableSelection, SWT.NONE);
tblclmnVersion.setWidth(80);
tblclmnVersion.setText(UIMessages.LibraryImportComposite_tblclmnVersion_text);
TableColumn tblclmnPath = new TableColumn(tableSelection, SWT.NONE);
tblclmnPath.setWidth(80);
tblclmnPath.setText(UIMessages.LibraryImportComposite_tblclmnPath_text);
TableColumn tblclmnFiles = new TableColumn(tableSelection, SWT.NONE);
tblclmnFiles.setWidth(80);
tblclmnFiles.setText(UIMessages.LibraryImportComposite_tblclmnFiles_text);
TableColumn tblclmnUrl = new TableColumn(tableSelection, SWT.NONE);
tblclmnUrl.setWidth(160);
tblclmnUrl.setText(UIMessages.LibraryImportComposite_tblclmnUrl_text);
}
/**
* 選択ライブラリ取得.
*
* @return 選択ライブラリ.
*/
private Set<LibraryNode> getSelectedLibrarySet() {
return H5WizardPlugin.getInstance().getSelectedLibrarySet();
}
/**
* ライブラリツリーを取得する.
*
* @param e イベント
* @return ライブラリツリー
*/
public Tree getTreeLibrary() {
return treeLibrary;
}
/**
* 変更が必要かどうか.
*
* @return 変更が必要かどうか
*/
public boolean isChanged() {
return tableSelection.getItemCount() > 0;
}
/**
* インストールディレクトリを取得する.
*
* @return インストールディレクトリ
*/
public String getDefaultInstallPath() {
return cmbDefaultInstallPath.getText();
}
/**
* 初期化.
*
* @param jsProject プロジェクト
* @param projectName プロジェクト名
* @param defaultInstallPath 初期インストール場所
* @param forceClear 強制的に初期化する
* @param enableReload 再読み込みを有効にするかどうか
* @return 変更あり
*/
public boolean initialize(IJavaScriptProject jsProject, String projectName, String defaultInstallPath,
boolean forceClear, boolean enableReload) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "initialize");
// TODO:要リファクタ
// if (jsProject == null && StringUtils.equals(this.projectName, projectName)
// && StringUtils.equals(cmbDefaultInstallPath.getText(), defaultInstallPath)) {
if (!forceClear
&& StringUtils.equals(this.projectName, projectName)
&& (defaultInstallPath == null || StringUtils.equals(cmbDefaultInstallPath.getText(),
defaultInstallPath))) {
// 既に設定済なので処理しない.
return false;
}
this.jsProject = jsProject;
if (this.jsProject != null) {
// PropertyPageからの呼び出し.
this.projectName = this.jsProject.getProject().getName();
} else {
// WizardPageからの呼び出し.
this.projectName = projectName;
}
btnReload.setEnabled(enableReload);
// 選択を除去.
H5WizardPlugin.getInstance().getSelectedLibrarySet().clear();
// // 一覧をダウンロード.
refreshTreeLibrary(jsProject == null, true);
// 初期値設定.
if (defaultInstallPath != null) {
cmbDefaultInstallPath.setText(defaultInstallPath);
} else if (cmbDefaultInstallPath.getItemCount() > 0) {
String setText = cmbDefaultInstallPath.getItem(0);
// /libで終わるものを優先的に設定する.
for (String item : cmbDefaultInstallPath.getItems()) {
if (item.endsWith("/lib")) {
setText = item;
break;
}
}
if (setText.startsWith(".")) { // .始まりの場合は空文字としておく
setText = "";
}
cmbDefaultInstallPath.setText(setText);
} else {
cmbDefaultInstallPath.setText("");
}
return true;
}
/**
* ツリー最新化.
*
* @param checkedRecommanded 推奨設定をチェック済みにするかどうか
* @param forceDefault 強制的にデフォルトに戻す
*/
public void refreshTreeLibrary(boolean checkedRecommanded, boolean forceDefault) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "refreshTreeLibrary");
LibraryList libraryList = RemoteContentManager.getLibraryList();
// テーブルも初期化.
if (!checkedRecommanded) {
getSelectedLibrarySet().clear();
}
tableSelection.removeAll();
tableSelection.layout();
// libraryListのnull対応.
if (libraryList == null) {
lblListInfo.setText(Messages.PI0151.format());
lblListInfo.setForeground(getDisplay().getSystemColor(SWT.COLOR_RED));
treeViewerLibrary.setInput(null);
treeLibrary.setEnabled(false);
return;
}
lblListInfo.setText(libraryList.getInfo());
treeLibrary.setEnabled(false);
if (libraryList.getSource() == null) {
lblListInfo.setForeground(getDisplay().getSystemColor(SWT.COLOR_RED));
} else {
lblListInfo.setForeground(null);
}
lblListInfo.getParent().layout();
if (libraryList.getLibraries().getSiteLibraries().getCategory().isEmpty()) {
treeLibrary.setEnabled(false);
cmbDefaultInstallPath.setEnabled(false);
checkFilterLatest.setEnabled(false);
} else {
treeLibrary.setEnabled(true);
cmbDefaultInstallPath.setEnabled(true);
checkFilterLatest.setEnabled(true);
}
// チェック.
if (projectName != null) {
RootNode rootNode = new RootNode(libraryList);
IContainer[] containers = libraryList.checkLibrary(jsProject, projectName, cmbDefaultInstallPath.getText(),
rootNode);
setDefaultInstallPath(containers);
treeViewerLibrary.setInput(rootNode.getChildren());
} else {
H5LogUtils.putLog(null, Messages.SE0023, "projectName is null");
}
treeViewerLibrary.refresh(true);
// Treeに反映.
for (TreeItem item2 : treeLibrary.getItems()) {
for (TreeItem item3 : item2.getItems()) {
if (item3.getData() instanceof LibraryNode) {
LibraryNode libraryNode = (LibraryNode) item3.getData();
if (checkedRecommanded && libraryNode.isRecommended() || libraryNode.isExists()) {
item3.setChecked(true);
addTableItem(libraryNode);
} else if (forceDefault) {
item3.setChecked(false);
if (libraryNode.isIncomplete()) {
item3.setGrayed(true);
}
}
effectTreeViewParentItem(item3);
}
}
}
changeTableSelection();
}
/**
* ツリー選択イベント.
*
* @param e イベント
*/
protected void do_treeLibrary_widgetSelected(SelectionEvent e) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "do_treeLibrary_widgetSelected");
// 詳細更新.
TreeItem treeItem = (TreeItem) e.item;
CategoryNode categoryNode = null;
if (treeItem.getData() instanceof CategoryNode) {
categoryNode = (CategoryNode) treeItem.getData();
} else if (treeItem.getData() instanceof LibraryNode) {
LibraryNode libraryNode = (LibraryNode) treeItem.getData();
if (libraryNode.isIncomplete() && libraryNode.getState() == LibraryState.DEFAULT) {
treeLibrary.setToolTipText(Messages.PI0135.format(UIMessages.LibraryState_INCOMPLETE));
} else if (libraryNode.isInError() && libraryNode.getState() == LibraryState.DEFAULT) {
treeLibrary.setToolTipText(Messages.PI0135.format(UIMessages.LibraryState_ERROR));
} else {
treeLibrary.setToolTipText(Messages.PI0135.format(libraryNode.getState().getText()));
}
treeItem.getParent().setToolTipText(Messages.PI0135.format(libraryNode.getState().getText()));
categoryNode = libraryNode.getParent();
}
StringBuilder detail = new StringBuilder();
if (categoryNode != null) {
if (StringUtils.isNotEmpty(categoryNode.getDescription())) {
detail.append(categoryNode.getDescription());
} else {
detail.append(categoryNode.getLabel());
}
}
linkDetail.setText(detail.toString());
scrolledComposite.setMinSize(linkDetail.computeSize(SWT.DEFAULT, SWT.DEFAULT));
// チェック切り替えの処理
if (e.detail == SWT.CHECK) {
if (treeLibrary.getSelection().length == 1 && treeLibrary.getSelection()[0] != treeItem) {
treeLibrary.setSelection(treeItem); // 選択状態にしておく.
}
if (treeItem.getData() instanceof LibraryNode) {
LibraryNode libraryNode = (LibraryNode) treeItem.getData();
itemCheck(libraryNode, treeItem);
// 親処理.
effectTreeViewParentItem(treeItem);
tableSelection.layout();
} else if (treeItem.getData() instanceof CategoryNode) {
for (TreeItem childItem : treeItem.getItems()) {
LibraryNode libraryNode = (LibraryNode) childItem.getData();
childItem.setChecked(treeItem.getChecked());
itemCheck(libraryNode, treeItem);
}
treeItem.setGrayed(false);
tableSelection.layout();
}
changeTableSelection();
treeViewerLibrary.refresh(true);
// } else {
//
// buttonAdd.setEnabled(false);
//
// TreeItem item = (TreeItem) e.item;
// if (item.getData() instanceof LibraryNode) {
// LibraryNode libraryNode = (LibraryNode) item.getData();
// // 全て含まれている時はfalseのまま.
// if (!getSelectedLibrarySet().contains(libraryNode) && !existsLibrary(libraryNode)) {
// buttonAdd.setEnabled(true);
// }
// }
}
}
/**
* アイテムのチェックを行う.
*
* @param libraryNode ノード
* @param treeItem アイテム
*/
private void itemCheck(LibraryNode libraryNode, TreeItem treeItem) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "itemCheck");
if (libraryNode.isIncomplete()) {
if (treeItem.getChecked() && treeItem.getGrayed()) {
// 追加処理.
addTableItem(libraryNode);
treeItem.setGrayed(false);
} else if (!treeItem.getChecked() && !treeItem.getGrayed()) {
// 削除処理.
removeTableItem(libraryNode);
treeItem.setGrayed(false);
} else {
// 削除処理.
removeTableItem(libraryNode);
// デフォルト
treeItem.setChecked(false);
treeItem.setGrayed(true);
}
} else if (treeItem.getChecked()) {
// 追加処理.
addTableItem(libraryNode);
} else {
// 削除処理.
removeTableItem(libraryNode);
}
}
/**
* 親Itemの状態を設定する.
*
* @param treeItem 対象Item
*/
private void effectTreeViewParentItem(TreeItem treeItem) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "effectTreeViewParentItem");
// 親処理.
boolean allChecked = true;
boolean anyChecked = false;
for (TreeItem childItem : treeItem.getParentItem().getItems()) {
if (childItem.getChecked()) {
anyChecked = true;
} else {
allChecked = false;
}
}
treeItem.getParentItem().setChecked(anyChecked || allChecked);
treeItem.getParentItem().setGrayed(anyChecked && !allChecked);
}
/**
* インストールディレクトリを取得する.
*
* @param paths フォルダ一覧
*/
public void setDefaultInstallPath(IContainer[] paths) {
String oldValue = cmbDefaultInstallPath.getText();
if (cmbDefaultInstallPath.getItemCount() > 0) {
cmbDefaultInstallPath.removeAll();
}
for (IContainer container : paths) {
if (!container.getProjectRelativePath().toString().isEmpty()) {
cmbDefaultInstallPath.add(container.getProjectRelativePath().toString());
}
}
if (!cmbDefaultInstallPath.getText().equals(oldValue)) {
cmbDefaultInstallPath.setText(oldValue);
}
}
// イベント処理系.
/**
* 推奨設定ボタン.
*
* @param e イベント
*/
protected void do_btnRecommended_widgetSelected(SelectionEvent e) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "do_btnRecommended_widgetSelected");
// 一旦フィルターを解除する.
ViewerFilter[] viewerFilter = treeViewerLibrary.getFilters();
treeViewerLibrary.resetFilters();
// getSelectedLibrarySet().clear();
// tableSelection.removeAll();
// RemoteContentManager.getLibraryList();
for (TreeItem item2 : treeLibrary.getItems()) {
for (TreeItem item3 : item2.getItems()) {
if (item3.getData() instanceof LibraryNode) {
LibraryNode libraryNode = (LibraryNode) item3.getData();
if (libraryNode.isRecommended()) {
if (!libraryNode.isExists()) {
// 追加.
item3.setChecked(true);
}
addTableItem(libraryNode);
// 既に古いライブラリが存在している時は削除する.
for (TreeItem item3a : item2.getItems()) {
if (item3 != item3a) {
LibraryNode checkLibraryNode = (LibraryNode) item3a.getData();
if (item3a.getChecked()) {
item3a.setChecked(false);
removeTableItem(checkLibraryNode);
}
}
}
effectTreeViewParentItem(item3);
// } else if (libraryNode.isExists()) {
// getTableItem(libraryNode, LibraryState.REMOVE);
}
}
}
}
// }
tableSelection.layout();
treeViewerLibrary.setFilters(viewerFilter);
refreshTreeViewerFilter();
changeTableSelection();
}
/**
* 再読込処理.
*
* @param e イベント
*/
protected void do_btnReload_widgetSelected(SelectionEvent e) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "do_btnReload_widgetSelected");
UIEventHelper.notifyListeners(this, UIEventHelper.LIST_RELOAD);
// リスト再取得.
//RemoteContentManager.getLibraryList(true);
// 一覧をダウンロード.
//refreshTreeLibrary(false, true);
}
/**
* フィルターの更新.
*
* @param e イベント
*/
protected void do_checkFilterLatest_widgetSelected(SelectionEvent e) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "do_checkFilterLatest_widgetSelected");
// 変更.
if (e == null || ((Button) e.widget).getSelection()) {
treeViewerLibrary.setFilters(new ViewerFilter[] { new LibraryTreeLatestViewerFilter() });
} else {
treeViewerLibrary.resetFilters();
}
refreshTreeViewerFilter();
}
/**
* フィルター更新に伴うチェックの復元.
*/
private void refreshTreeViewerFilter() {
logger.log(Messages.TR0001, getClass().getSimpleName(), "refreshTreeViewerFilter");
treeViewerLibrary.refresh(true);
// チェック復元.
for (TreeItem treeItem : treeViewerLibrary.getTree().getItems()) {
for (TreeItem treeItem2 : treeItem.getItems()) {
if (treeItem2.getData() instanceof LibraryNode) {
LibraryNode libraryNode = (LibraryNode) treeItem2.getData();
if (getSelectedLibrarySet().contains(libraryNode)) {
// 処理あり.
if (libraryNode.isAddable()) {
treeItem2.setChecked(true);
} else if (!libraryNode.isIncomplete()) {
treeItem2.setChecked(false);
} else {
treeItem2.setChecked(false);
treeItem2.setGrayed(false);
}
//libraryNode.setState(libraryNode.getState());
} else if (libraryNode.isIncomplete()) {
treeItem2.setGrayed(true);
}
effectTreeViewParentItem(treeItem2);
}
}
}
treeLibrary.layout();
}
/**
* LibraryData から TableItem を追加.
*
* @param libraryData
*/
private void removeTableItem(LibraryNode libraryNode) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "removeTableItem");
//if (libraryNode.isExists() && !getSelectedLibrarySet().contains(libraryNode)) {
if (!getSelectedLibrarySet().contains(libraryNode) || libraryNode.isIncomplete()
&& libraryNode.getState() == LibraryState.ADD) {
setTableItem(libraryNode, LibraryState.REMOVE);
} else {
if (libraryNode.isExists()) {
libraryNode.setState(LibraryState.EXISTS);
} else {
libraryNode.setState(LibraryState.DEFAULT);
}
// 本当に削除.
if (getSelectedLibrarySet().contains(libraryNode)) {
getSelectedLibrarySet().remove(libraryNode); // URL
if (tableSelection.getItemCount() > 0) {
for (int i = 0; i < tableSelection.getItemCount(); i++) {
if (tableSelection.getItem(i).getData() == libraryNode) {
tableSelection.remove(i);
break;
}
}
}
}
}
changeTableSelection();
}
/**
* TableItemを追加する.
*
* @param libraryData ライブラリデータ
* @param libraryState 操作状態
*/
private void addTableItem(LibraryNode libraryNode) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "addTableItem");
if (libraryNode.isExists() && getSelectedLibrarySet().contains(libraryNode)) {
removeTableItem(libraryNode);
} else if (libraryNode.isExists()) {
setTableItem(libraryNode, LibraryState.EXISTS);
} else {
setTableItem(libraryNode, LibraryState.ADD);
}
}
/**
* TableItemを追加または更新する.
*
* @param libraryData ライブラリデータ
* @param libraryState 操作状態
*/
private void setTableItem(LibraryNode libraryNode, LibraryState state) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "setTableItem");
// 状態を変更.
libraryNode.setState(state);
// ファイルが存在する場合.
if (getSelectedLibrarySet().contains(libraryNode)) { // && state != LibraryState.EXISTS
// テーブルにもあるので状態変更のみ.
if (tableSelection.getItemCount() > 0) {
for (int i = 0; i < tableSelection.getItemCount(); i++) {
if (tableSelection.getItem(i).getData() == libraryNode) {
tableSelection.getItem(i).setText(0, state.getText());
break;
}
}
}
return;
}
// 色替え.
// treeItem.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLUE));
// treeItem.setFont(new Font(treeItem.getFont().getDevice(), treeItem.getFont().getFontData()[0].getName(),
// treeItem.getFont().getFontData()[0].getHeight(), SWT.BOLD));
// Image addImage = H5WizardPlugin.getImage("step_done.gif");
// treeItem.setImage(addImage);
if (state == LibraryState.EXISTS) {
// 存在していたら追加しない
return;
}
Library library = libraryNode.getValue();
CategoryNode categoryNode = libraryNode.getParent();
Category category = categoryNode.getValue();
// LibraryNOde → Library にする
// TODO:LabelProvider化
TableItem tableItem = new TableItem(tableSelection, SWT.NONE);
tableItem.setText(0, state.getText());
tableItem.setText(1, category.getName());
tableItem.setText(2, library.getVersion());
tableItem.setText(3, categoryNode.getPathLable());
// List生成時に無くても作成するよう変更
if (libraryNode.getFileList() != null) {
tableItem.setText(4, StringUtils.join(libraryNode.getFileList(), ","));
}
if (!library.getSite().isEmpty()) {
tableItem.setText(5, library.getSite().get(0).getUrl() + " ...");
}
tableItem.setData(libraryNode);
getSelectedLibrarySet().add(libraryNode);
}
/**
* テーブル変更時.
*/
protected void changeTableSelection() {
logger.log(Messages.TR0001, getClass().getSimpleName(), "changeTableSelection");
UIEventHelper.notifyListeners(this, UIEventHelper.TABLE_SELECTION_CHANGE, tableSelection);
}
/**
* テキスト編集イベント.
*
* @param e イベント
*/
protected void do_cmbDefaultInstallPath_modifyText(ModifyEvent e) {
logger.log(Messages.TR0001, getClass().getSimpleName(), "do_cmbDefaultInstallPath_modifyText");
if (treeLibrary.getItemCount() > 0) {
((CategoryNode[]) treeLibrary.getData())[0].getParent().setDefaultInstallPath(((Combo) e.widget).getText());
treeViewerLibrary.refresh(true);
}
// テーブルにもあるので状態変更のみ.
if (tableSelection.getItemCount() > 0) {
for (TableItem tableItem : tableSelection.getItems()) {
LibraryNode libraryNode = (LibraryNode) tableItem.getData();
// tableItem.setText(0, libraryNode.getState().getText());
// tableItem.setText(1, libraryNode.getParent().getValue().getName());
// tableItem.setText(2, libraryNode.getValue().getVersion());
tableItem.setText(3, libraryNode.getParent().getPathLable());
// // List生成時に無くても作成するよう変更
// if (libraryNode.getFileList() != null) {
// tableItem.setText(4, StringUtils.join(libraryNode.getFileList(), ","));
// }
// if (!libraryNode.getValue().getSite().isEmpty()) {
// tableItem.setText(5, libraryNode.getValue().getSite().get(0).getUrl() + " ...");
// }
}
}
validatePage();
}
/**
* Returns whether this page's controls currently all contain valid values.
*/
void validatePage() {
logger.log(Messages.TR0001, getClass().getSimpleName(), "validatePage");
// プロジェクト名のチェック.
String path = cmbDefaultInstallPath.getText();
// check whether the project name field is empty
if (StringUtils.isNotEmpty(path)
&& !H5IOUtils.isValidWorkspacePath(ResourcesPlugin.getWorkspace().getRoot().getProject(projectName)
.getFullPath().append(path))) {
// setMessage(NewWizardMessages.JavaProjectWizardFirstPage_Message_enterProjectName);
// setErrorMessage(NewWizardMessages.JavaProjectWizardFirstPage_Message_enterProjectName);
UIEventHelper.setErrorMessage(this,
Messages.SE0054.format(UIMessages.LibraryImportComposite_lblDefaultInstallPath_text));
return;
}
// 正常.
UIEventHelper.setErrorMessage(this, null);
}
/**
* projectNameを設定します.
*
* @param projectName projectName
*/
public void setProjectName(String projectName) {
this.projectName = projectName;
}
}