svnno****@sourc*****
svnno****@sourc*****
2009年 3月 17日 (火) 20:56:32 JST
Revision: 2895 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=2895 Author: daisuke_m Date: 2009-03-17 20:56:32 +0900 (Tue, 17 Mar 2009) Log Message: ----------- テーブルに対するレコードリストを新規に作る操作を追加。 Modified Paths: -------------- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/DataSetEditDialog.java vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/DataSetEditDialogTableTab.java Added Paths: ----------- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/TableSelectDialog.java Removed Paths: ------------- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogRecordTab.java -------------- next part -------------- Modified: vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/DataSetEditDialog.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/DataSetEditDialog.java 2009-03-17 10:31:14 UTC (rev 2894) +++ vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/DataSetEditDialog.java 2009-03-17 11:56:32 UTC (rev 2895) @@ -1,6 +1,6 @@ /* * Copyright 2007-2009 Jiemamy Project and the Others. - * Created on 2009/02/16 + * Created on 2009/03/17 * * This file is part of Jiemamy. * @@ -18,20 +18,23 @@ */ package org.jiemamy.eclipse.editor.dialog.root; -import java.io.BufferedReader; -import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.Set; -import org.apache.commons.io.IOUtils; +import org.apache.commons.collections15.IteratorUtils; import org.apache.commons.lang.SystemUtils; import org.apache.commons.lang.Validate; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MenuAdapter; +import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; @@ -40,23 +43,29 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.jiemamy.JiemamyFactory; import org.jiemamy.ReferenceResolver; import org.jiemamy.eclipse.JiemamyUIPlugin; import org.jiemamy.eclipse.ui.JiemamyEditDialog; import org.jiemamy.facade.JiemamyFacade; import org.jiemamy.model.RootModel; import org.jiemamy.model.dataset.DataSetModel; +import org.jiemamy.model.dataset.RecordModel; import org.jiemamy.model.entity.TableModel; import org.jiemamy.model.entity.TableRef; import org.jiemamy.utils.model.DataSetUtil; +import org.jiemamy.utils.model.RootModelUtil; /** * {@link RootModel}設定ダイアログクラス。 @@ -114,7 +123,7 @@ @Override protected Control createDialogArea(Composite parent) { - DataSetModel dataSetModel = getTargetModel(); + final DataSetModel dataSetModel = getTargetModel(); getShell().setText("データ編集"); // RESOURCE ReferenceResolver referenceResolver = dataSetModel.getJiemamy().getReferenceResolver(); @@ -126,6 +135,9 @@ tabFolder = new TabFolder(composite, SWT.NONE); GridData gd = new GridData(GridData.FILL_BOTH); tabFolder.setLayoutData(gd); + final Menu menu = new Menu(tabFolder); + tabFolder.setMenu(menu); + menu.addMenuListener(new TabMenuListener(dataSetModel, menu)); Set<TableRef> tableRefs = dataSetModel.getRecords().keySet(); for (TableRef tableRef : tableRefs) { @@ -201,16 +213,13 @@ TabItem item = tabFolder.getItem(tabFolder.getSelectionIndex()); TableModel tableModel = (TableModel) item.getData(); - BufferedWriter bw = null; try { DataSetUtil.exportToCsv(dataSetModel, tableModel, new FileOutputStream(csv)); } catch (IOException e) { JiemamyUIPlugin.log(e); - } finally { - IOUtils.closeQuietly(bw); } - if (SystemUtils.OS_NAME.toLowerCase().contains("windows")) { + if (SystemUtils.IS_OS_WINDOWS) { boolean result = MessageDialog.openQuestion(getShell(), "Success", "エクスポートが完了しました。ファイルを開きますか?"); // RESOURCE if (result) { try { @@ -245,11 +254,15 @@ return; } + boolean result = MessageDialog.openQuestion(getShell(), "confirm", "元のデータは全てクリアされます。よろしいですか?"); // RESOURCE + if (result == false) { + return; + } + DataSetModel dataSetModel = getTargetModel(); TabItem item = tabFolder.getItem(tabFolder.getSelectionIndex()); TableModel tableModel = (TableModel) item.getData(); - BufferedReader br = null; try { DataSetUtil.importFromCsv(dataSetModel, tableModel, new FileInputStream(csv)); } catch (FileNotFoundException e) { @@ -257,9 +270,82 @@ JiemamyUIPlugin.log(e); } catch (IOException e) { JiemamyUIPlugin.log(e); - } finally { - IOUtils.closeQuietly(br); } MessageDialog.openInformation(getShell(), "Success", "インポートが完了しました。"); // RESOURCE + + item.notifyListeners(DataSetEditDialogTableTab.RECORD_CHANGED, new Event()); } + + + /** + * TODO for daisuke + * + * @author daisuke + */ + private final class TabMenuListener extends MenuAdapter { + + private final DataSetModel dataSetModel; + + private final Menu menu; + + + /** + * インスタンスを生成する。 + * + * @param dataSetModel + * @param menu + */ + private TabMenuListener(DataSetModel dataSetModel, Menu menu) { + this.dataSetModel = dataSetModel; + this.menu = menu; + } + + @Override + public void menuShown(MenuEvent evt) { + for (MenuItem item : menu.getItems()) { + item.dispose(); + } + + MenuItem addTab = new MenuItem(menu, SWT.PUSH); + addTab.setText("&Add"); // RESOURCE + addTab.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent evt) { + JiemamyFactory factory = dataSetModel.getJiemamy().getFactory(); + RootModel rootModel = factory.getRootModel(); + Collection<TableModel> tables = RootModelUtil.getEntities(rootModel, TableModel.class); + List<TableModel> list = IteratorUtils.toList(tables.iterator()); + TableSelectDialog dialog = new TableSelectDialog(getShell(), list); + dialog.open(); + TableModel tableModel = dialog.getResult(); + // TODO facade経由で + dataSetModel.getRecords().put(factory.newReference(tableModel), new ArrayList<RecordModel>()); + addTab(new DataSetEditDialogTableTab(tabFolder, SWT.NONE, dataSetModel, tableModel, jiemamyFacade)); + } + }); + + MenuItem removeTab = new MenuItem(menu, SWT.PUSH); + removeTab.setText("&Remove"); // RESOURCE + removeTab.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent evt) { + TabItem item = tabFolder.getItem(tabFolder.getSelectionIndex()); + TableModel tableModel = (TableModel) item.getData(); + boolean result = + MessageDialog.openQuestion(getShell(), "confirm", tableModel.getName() + + "のレコードを全て削除します。\nよろしいですか?"); // RESOURCE + if (result == false) { + return; + } + + // TODO facade経由で + JiemamyFactory factory = dataSetModel.getJiemamy().getFactory(); + dataSetModel.getRecords().remove(factory.newReference(tableModel)); + item.dispose(); + } + }); + } + } } Modified: vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/DataSetEditDialogTableTab.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/DataSetEditDialogTableTab.java 2009-03-17 10:31:14 UTC (rev 2894) +++ vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/DataSetEditDialogTableTab.java 2009-03-17 11:56:32 UTC (rev 2895) @@ -1,6 +1,6 @@ /* * Copyright 2007-2009 Jiemamy Project and the Others. - * Created on 2009/02/16 + * Created on 2009/03/17 * * This file is part of Jiemamy. * @@ -60,6 +60,8 @@ private final JiemamyFacade jiemamyFacade; + public static final int RECORD_CHANGED = 123; + /** * インスタンスを生成する。 @@ -77,7 +79,7 @@ this.jiemamyFacade = jiemamyFacade; - JiemamyFactory factory = dataSetModel.getJiemamy().getFactory(); + final JiemamyFactory factory = dataSetModel.getJiemamy().getFactory(); Composite composite = new Composite(parentTabFolder, SWT.NULL); composite.setLayout(new GridLayout(1, false)); @@ -97,19 +99,8 @@ column.setData(columnModel); } - List<RecordModel> records = dataSetModel.getRecords().get(factory.newReference(tableModel)); - for (RecordModel recordModel : records) { - List<String> data = CollectionsUtil.newArrayList(); - for (TableColumn tableColumn : table.getColumns()) { - ColumnModel columnModel = (ColumnModel) tableColumn.getData(); - ColumnRef columnRef = factory.newReference(columnModel); - String string = recordModel.getValues().get(columnRef); - data.add(string); - } - TableItem item = new TableItem(table, SWT.NONE); - item.setText(data.toArray(new String[0])); - item.setData(recordModel); - } + final List<RecordModel> records = dataSetModel.getRecords().get(factory.newReference(tableModel)); + refreshTable(factory, table, records); final TableEditor editor = new TableEditor(table); editor.horizontalAlignment = SWT.LEFT; @@ -117,6 +108,12 @@ table.addListener(SWT.MouseDown, new StartEditListener(editor, table)); getTabItem().setControl(composite); + getTabItem().addListener(RECORD_CHANGED, new Listener() { + + public void handleEvent(Event event) { + refreshTable(factory, table, records); + } + }); } @Override @@ -125,6 +122,32 @@ return true; } + /** + * TODO for daisuke + * + * @param factory + * @param table + * @param records + */ + private void refreshTable(JiemamyFactory factory, final Table table, List<RecordModel> records) { + for (TableItem item : table.getItems()) { + item.dispose(); + } + + for (RecordModel recordModel : records) { + List<String> data = CollectionsUtil.newArrayList(); + for (TableColumn tableColumn : table.getColumns()) { + ColumnModel columnModel = (ColumnModel) tableColumn.getData(); + ColumnRef columnRef = factory.newReference(columnModel); + String string = recordModel.getValues().get(columnRef); + data.add(string); + } + TableItem item = new TableItem(table, SWT.NONE); + item.setText(data.toArray(new String[data.size()])); + item.setData(recordModel); + } + } + private final class StartEditListener implements Listener { Added: vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/TableSelectDialog.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/TableSelectDialog.java (rev 0) +++ vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/TableSelectDialog.java 2009-03-17 11:56:32 UTC (rev 2895) @@ -0,0 +1,129 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * Created on 2009/02/18 + * + * This file is part of Jiemamy. + * + * 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 org.jiemamy.eclipse.editor.dialog.root; + +import java.util.List; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.TableItem; + +import org.jiemamy.eclipse.editor.DisplayPlace; +import org.jiemamy.eclipse.editor.utils.LabelStringUtil; +import org.jiemamy.model.RootModel; +import org.jiemamy.model.entity.TableModel; + +/** + * テーブルを選択するダイアログ。 + * + * @author daisuke + */ +public class TableSelectDialog extends Dialog { + + private int selectIndex = -1; + + private List<TableModel> tables; + + private Table tblColumns; + + + /** + * インスタンスを生成する。 + * + * @param shell シェルオブジェクト + * @param tables テーブルのリスト + */ + public TableSelectDialog(Shell shell, List<TableModel> tables) { + super(shell); + setShellStyle(getShellStyle() | SWT.RESIZE); + + this.tables = tables; + } + + /** + * 選択結果を取得します。 + * + * @return 選択されたカラム + */ + public TableModel getResult() { + if (selectIndex >= 0 && selectIndex < tables.size()) { + return tables.get(selectIndex); + } + return null; + } + + @Override + protected Control createDialogArea(Composite parent) { + getShell().setText("テーブル選択"); // RESOURCE + + Composite composite = new Composite(parent, SWT.NULL); + composite.setLayout(new GridLayout(1, false)); + composite.setLayoutData(new GridData(GridData.FILL_BOTH)); + + tblColumns = new Table(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); + tblColumns.setLayoutData(new GridData(GridData.FILL_BOTH)); + tblColumns.setHeaderVisible(true); + + TableColumn colStatus = new TableColumn(tblColumns, SWT.LEFT); + colStatus.setText(""); + colStatus.setWidth(40); + + TableColumn colName = new TableColumn(tblColumns, SWT.LEFT); + colName.setText("テーブル名"); + colName.setWidth(100); + + refreshTable(); + + tblColumns.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + selectIndex = tblColumns.getSelectionIndex(); + } + }); + + return composite; + } + + /** + * Tableをリフレッシュします。 + */ + protected void refreshTable() { + tblColumns.removeAll(); + for (TableModel model : tables) { + TableItem item = new TableItem(tblColumns, SWT.NULL); + updateColumnTableItem(item, model); + } + } + + private void updateColumnTableItem(TableItem item, TableModel tableModel) { + RootModel rootModel = tableModel.getJiemamy().getFactory().getRootModel(); + item.setText(0, ""); + item.setText(1, LabelStringUtil.getString(rootModel, tableModel, DisplayPlace.TABLE)); + } +} Property changes on: vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/TableSelectDialog.java ___________________________________________________________________ Added: svn:mime-type + text/plain Deleted: vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogRecordTab.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogRecordTab.java 2009-03-17 10:31:14 UTC (rev 2894) +++ vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogRecordTab.java 2009-03-17 11:56:32 UTC (rev 2895) @@ -1,855 +0,0 @@ -/* - * Copyright 2007-2009 Jiemamy Project and the Others. - * Created on 2009/02/18 - * - * This file is part of Jiemamy. - * - * 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 org.jiemamy.eclipse.editor.dialog.table; - -// -//import java.io.BufferedReader; -//import java.io.BufferedWriter; -//import java.io.File; -//import java.io.FileNotFoundException; -//import java.io.FileReader; -//import java.io.FileWriter; -//import java.io.IOException; -//import java.util.ArrayList; -//import java.util.List; -//import java.util.Map; -//import java.util.Random; -//import java.util.StringTokenizer; -// -//import org.eclipse.jface.dialogs.MessageDialog; -//import org.eclipse.jface.resource.ImageRegistry; -//import org.eclipse.jface.viewers.ArrayContentProvider; -//import org.eclipse.jface.viewers.BaseLabelProvider; -//import org.eclipse.jface.viewers.CellEditor; -//import org.eclipse.jface.viewers.ComboBoxCellEditor; -//import org.eclipse.jface.viewers.ICellModifier; -//import org.eclipse.jface.viewers.ITableLabelProvider; -//import org.eclipse.jface.viewers.TableViewer; -//import org.eclipse.jface.viewers.TextCellEditor; -//import org.eclipse.jface.viewers.Viewer; -//import org.eclipse.swt.SWT; -//import org.eclipse.swt.custom.CCombo; -//import org.eclipse.swt.events.KeyAdapter; -//import org.eclipse.swt.events.KeyEvent; -//import org.eclipse.swt.events.SelectionAdapter; -//import org.eclipse.swt.events.SelectionEvent; -//import org.eclipse.swt.graphics.Image; -//import org.eclipse.swt.layout.GridData; -//import org.eclipse.swt.layout.GridLayout; -//import org.eclipse.swt.widgets.Button; -//import org.eclipse.swt.widgets.Combo; -//import org.eclipse.swt.widgets.Composite; -//import org.eclipse.swt.widgets.Control; -//import org.eclipse.swt.widgets.FileDialog; -//import org.eclipse.swt.widgets.Item; -//import org.eclipse.swt.widgets.Label; -//import org.eclipse.swt.widgets.TabFolder; -//import org.eclipse.swt.widgets.TabItem; -//import org.eclipse.swt.widgets.Table; -//import org.eclipse.swt.widgets.TableColumn; -// -//import org.jiemamy.eclipse.JiemamyPlugin; -//import org.jiemamy.eclipse.ui.AbstractTableEditor; -//import org.jiemamy.eclipse.ui.tab.AbstractTab; -//import org.jiemamy.editcommand.Command; -//import org.jiemamy.editcommand.CommandListener; -//import org.jiemamy.model.JiemamyElement; -//import org.jiemamy.model.attribute.ColumnModel; -//import org.jiemamy.model.dataset.RecordModel; -//import org.jiemamy.model.entity.TableModel; -// -///** -// * テーブル編集ダイアログの「レコード」タブ -// * -// * @author daisuke -// */ -//public class TableEditDialogRecordTab extends AbstractTab { -// -// private TableModel tableModel; -// -// private AbstractTableEditor recordsEditArea; -// -// private Combo subjectCombo; -// -// private Combo objectCombo; -// -// private Button btnClear; -// -// private Button btnExchange; -// -// private Button btnExecute; -// -// -// public TableEditDialogRecordTab(TabFolder parentTabFolder, int style, TableModel tableModel) { -// super(parentTabFolder, style, "レコード"); // RESOURCE -// this.tableModel = tableModel; -// } -// -// @Override -// public Composite createTabArea(TabFolder parentTabFolder) { -// Composite composite = new Composite(parentTabFolder, SWT.NULL); -// composite.setLayout(new GridLayout(1, false)); -// composite.setLayoutData(new GridData(GridData.FILL_BOTH)); -// -// TabItem tabRecord = new TabItem(parentTabFolder, SWT.NONE); -// tabRecord.setText(JiemamyPlugin.getResourceString("dialog.table.tab.record")); -// tabRecord.setControl(composite); -// -// createRecordTab(composite); -// recordsEditArea.disableEditControls(); -// -// return composite; -// } -// -// private void createRecordTab(Composite parent) { -// recordsEditArea = new RecordTableEditor(tableModel); -// recordsEditArea.setAddLabel(JiemamyPlugin.getResourceString("dialog.table.record.btn.add")); -// recordsEditArea.setInsertLabel(JiemamyPlugin.getResourceString("dialog.table.record.btn.insert")); -// recordsEditArea.setRemoveLabel(JiemamyPlugin.getResourceString("dialog.table.record.btn.remove")); -// recordsEditArea.createControlArea(parent); -// } -// -// private void refreshEditComboItems() { -// boolean first = true; -// subjectCombo.removeAll(); -// objectCombo.removeAll(); -// for (ColumnIdNameDto dto : tableModel.getRecordColumnDtos()) { -// subjectCombo.add(dto.getName()); -// objectCombo.add(dto.getName()); -// if (first) { -// subjectCombo.setText(dto.getName()); -// objectCombo.setText(dto.getName()); -// } -// first = false; -// } -// } -// -// -// private class RecordTableEditor extends AbstractTableEditor { -// -// private TableModel tableModel; -// -// private Table table; -// -// private RecordContentProvider contentProvider; -// -// /** セルエディタのリスト */ -// private List<CellEditor> editorList = new ArrayList<CellEditor>(); -// -// /** CSVインポートボタン */ -// private Button btnImport; -// -// /** CSVエクスポートボタン */ -// private Button btnExport; -// -// -// /** -// * コンストラクタ。 -// * -// * @param targetModel -// */ -// public RecordTableEditor(TableModel targetModel) { -// tableModel = targetModel; -// } -// -// @Override -// protected JiemamyElement addItem() { -// RecordModel record = new RecordModel(); -// tableModel.addRecord(record); -// -// int addedIndex = tableModel.getRecords().indexOf(record); -// table.setSelection(addedIndex); -// enableEditControls(addedIndex); -// -// return record; -// } -// -// @Override -// protected void configureCellEditor() { -// int columnSize = tableModel.getRecordColumnDtos().size(); -// List<String> propertyList = new ArrayList<String>(columnSize); -// editorList.clear(); -// for (ColumnIdNameDto dto : tableModel.getRecordColumnDtos()) { -// propertyList.add(String.valueOf(dto.getColumnId())); -// -// ColumnModel column = tableModel.getColumnById(dto.getColumnId()); -// if (column != null && column.canEditRecordByCombo()) { -// List<String> allowedStrings = new ArrayList<String>(); -// for (RecordValueModel allowedValue : column.getValuesAllowedByForeignKeys()) { -// StringBuilder sb = new StringBuilder(); -// sb.append(allowedValue.getValue()); -// if (allowedValue.getTypicalValue().length() != 0) { -// sb.append(" (").append(allowedValue.getTypicalValue()).append(")"); -// } -// allowedStrings.add(sb.toString()); -// } -// editorList.add(new RecordComboBoxCellEditor(table, allowedStrings.toArray(new String[allowedStrings -// .size()]))); -// } else { -// editorList.add(new RecordTextCellEditor(table)); -// } -// } -// TableViewer tableViewer = getTableViewer(); -// tableViewer.setColumnProperties(propertyList.toArray(new String[columnSize])); -// tableViewer.setCellEditors(editorList.toArray(new CellEditor[columnSize])); -// } -// -// @Override -// protected void configureEditButtons() { -// super.configureEditButtons(); -// -// btnImport.setText(JiemamyPlugin.getResourceString("dialog.table.record.btn.import")); -// btnImport.addSelectionListener(new SelectionAdapter() { -// -// @Override -// public void widgetSelected(SelectionEvent e) { -// importFromCsv(); -// } -// -// private void importFromCsv() { -// FileDialog dialog = new FileDialog(btnImport.getShell(), SWT.OPEN); -// dialog.setText(JiemamyPlugin.getResourceString("dialog.table.record.import.title")); -// String filename = dialog.open(); -// -// if (filename != null) { -// File csv = new File(filename); -// BufferedReader br = null; -// try { -// br = new BufferedReader(new FileReader(csv)); -// -// List<Long> columnIds = new ArrayList<Long>(); -// if (br.ready()) { -// String line = br.readLine(); -// StringTokenizer st = new StringTokenizer(line, ","); -// while (st.hasMoreTokens()) { -// ColumnModel column = tableModel.getColumn(st.nextToken()); -// if (column != null) { -// columnIds.add(column.getId()); -// } else { -// columnIds.add(Math.abs(new Random().nextLong())); -// } -// } -// } -// -// while (br.ready()) { -// RecordModel record = (RecordModel) addItem(); -// -// String line = br.readLine(); -// StringTokenizer st = new StringTokenizer(line, ","); -// for (int i = 0; st.hasMoreTokens(); i++) { -// while (columnIds.size() <= i) { -// columnIds.add(Math.abs(new Random().nextLong())); -// } -// -// record.setRecordData(columnIds.get(i), new RecordValueModel(st.nextToken())); -// } -// } -// -// refreshTableColumns(); -// } catch (FileNotFoundException e) { -// JiemamyPlugin.handleException(e, JiemamyPlugin.LOG | JiemamyPlugin.DIALOG); -// } catch (IOException e) { -// JiemamyPlugin.handleException(e, JiemamyPlugin.ALL); -// } finally { -// ResourceUtils.close(br); -// } -// } -// } -// }); -// -// btnExport.setText(JiemamyPlugin.getResourceString("dialog.table.record.btn.export")); -// btnExport.addSelectionListener(new SelectionAdapter() { -// -// @Override -// public void widgetSelected(SelectionEvent e) { -// exportToCsv(); -// } -// -// private void exportToCsv() { -// FileDialog dialog = new FileDialog(btnExport.getShell(), SWT.SAVE); -// dialog.setText(JiemamyPlugin.getResourceString("dialog.table.record.export.title")); -// String filename = dialog.open(); -// -// if (filename != null) { -// File csv = new File(filename); -// BufferedWriter bw = null; -// if (csv.exists()) { -// boolean result = MessageDialog.openQuestion(btnExport.getShell(), "Confirm", "overwrite?"); // RESOURCE -// if (!result) { -// return; -// } -// } -// try { -// bw = new BufferedWriter(new FileWriter(csv)); -// -// boolean first = true; -// for (ColumnIdNameDto dto : tableModel.getRecordColumnDtos()) { -// bw.write(first ? "" : ","); -// bw.write(dto.getName()); -// first = false; -// } -// bw.write("\n"); -// -// for (RecordModel record : tableModel.getRecords()) { -// first = true; -// for (Map.Entry<Long, RecordValueModel> entry : record.getRecord().entrySet()) { -// RecordValueModel value = entry.getValue(); -// bw.write(first ? "" : ","); -// bw.write(value.getValue()); -// first = false; -// } -// bw.write("\n"); -// } -// } catch (IOException e) { -// JiemamyPlugin.handleException(e, JiemamyPlugin.ALL); -// } finally { -// ResourceUtils.close(bw); -// } -// } -// } -// }); -// } -// -// @Override -// protected void configureEditorControls() { -// btnClear.addSelectionListener(new SelectionAdapter() { -// -// @Override -// public void widgetSelected(SelectionEvent evt) { -// objectCombo.setEnabled(false); -// } -// }); -// btnExchange.addSelectionListener(new SelectionAdapter() { -// -// @Override -// public void widgetSelected(SelectionEvent evt) { -// objectCombo.setEnabled(true); -// } -// }); -// -// btnExecute.addSelectionListener(new SelectionAdapter() { -// -// @Override -// public void widgetSelected(SelectionEvent evt) { -// if (btnClear.getSelection()) { -// tableModel.removeRecordColumn(tableModel.getRecordColumnDtos().get( -// subjectCombo.getSelectionIndex()).getColumnId()); -// } else if (btnExchange.getSelection()) { -// tableModel.exchangeRecordColumn(tableModel.getRecordColumnDtos().get( -// subjectCombo.getSelectionIndex()).getColumnId(), tableModel.getRecordColumnDtos().get( -// objectCombo.getSelectionIndex()).getColumnId()); -// } -// } -// }); -// } -// -// @Override -// protected void configureTable(final Table table) { -// super.configureTable(table); -// -// // THINK ↓要る? -//// final Menu menu = new Menu(table); -//// table.setMenu(menu); -//// menu.addMenuListener(new MenuAdapter() { -//// -//// @Override -//// public void menuShown(MenuEvent evt) { -//// for (MenuItem item : menu.getItems()) { -//// item.dispose(); -//// } -//// int index = table.getSelectionIndex(); -//// if (index == -1) { -//// return; -//// } -//// -//// MenuItem removeItem = new MenuItem(menu, SWT.PUSH); -//// removeItem.setText("&Remove"); // RESOURCE -//// removeItem.addSelectionListener(new SelectionAdapter() { -//// -//// @Override -//// public void widgetSelected(SelectionEvent evt) { -//// removeTableSelectionItem(); -//// } -//// }); -//// } -//// }); -// } -// -// @Override -// protected void configureTableViewer(TableViewer tableViewer) { -// tableViewer.setCellModifier(new RecordCellModifier(tableViewer)); -// tableViewer.setLabelProvider(new RecordLabelProvider()); -// contentProvider = new RecordContentProvider(); -// tableViewer.setContentProvider(contentProvider); -//// tableViewer.setSorter(new ViewerSorter()); -// tableViewer.setInput(tableModel.getRecords()); -// } -// -// @Override -// protected void createEditorControls(Composite parent) { -// Composite composite = new Composite(parent, SWT.NULL); -// GridLayout layout = new GridLayout(6, false); -// layout.marginHeight = 0; -// layout.marginWidth = 0; -// composite.setLayout(layout); -// composite.setLayoutData(new GridData()); -// -// Label label = new Label(composite, SWT.NONE); -// label.setText(JiemamyPlugin.getResourceString("dialog.table.record.label.column")); -// GridData gd = new GridData(); -// gd.verticalSpan = 2; -// label.setLayoutData(gd); -// -// subjectCombo = new Combo(composite, SWT.READ_ONLY); -// gd = new GridData(); -// gd.verticalSpan = 2; -// subjectCombo.setLayoutData(gd); -// subjectCombo.setVisibleItemCount(20); -// -// btnClear = new Button(composite, SWT.RADIO); -// btnClear.setText(JiemamyPlugin.getResourceString("dialog.table.record.label.delete")); -// btnClear.setSelection(true); -// gd = new GridData(); -// gd.horizontalSpan = 3; -// btnClear.setLayoutData(gd); -// -// btnExecute = new Button(composite, SWT.PUSH); -// btnExecute.setText(JiemamyPlugin.getResourceString("dialog.table.record.label.execute")); -// gd = new GridData(); -// gd.verticalSpan = 2; -// btnExecute.setLayoutData(gd); -// -// btnExchange = new Button(composite, SWT.RADIO); -// btnExchange.setText(JiemamyPlugin.getResourceString("dialog.table.record.label.exchange1")); -// -// objectCombo = new Combo(composite, SWT.READ_ONLY); -// objectCombo.setEnabled(false); -// objectCombo.setVisibleItemCount(20); -// -// label = new Label(composite, SWT.NONE); -// label.setText(JiemamyPlugin.getResourceString("dialog.table.record.label.exchange2")); -// -// refreshEditComboItems(); -// -// return composite; -// } -// -// @Override -// protected void createOptionalEditButtons(Composite parent) { -// btnImport = new Button(parent, SWT.PUSH); -// btnExport = new Button(parent, SWT.PUSH); -// } -// -// @Override -// protected void createTableColumns(Table table) { -// for (ColumnIdNameDto dto : tableModel.getRecordColumnDtos()) { -// TableColumn col = new TableColumn(table, SWT.LEFT); -// col.setText(dto.getName()); -// col.setWidth(100); -// col.addSelectionListener(new SelectionAdapter() { -// -// @Override -// public void widgetSelected(SelectionEvent evt) { -// subjectCombo.setText(((TableColumn) evt.getSource()).getText()); -// } -// }); -// } -// } -// -// @Override -// protected JiemamyElement insertTableSelectionItem() { -// int index = table.getSelectionIndex(); -// RecordModel record = new RecordModel(); -// if (index < 0 || index > table.getItemCount()) { -// tableModel.addRecord(record); -// } else { -// tableModel.addRecord(index, record); -// } -// -// int addedIndex = tableModel.getRecords().indexOf(record); -// table.setSelection(addedIndex); -// enableEditControls(addedIndex); -// -// return record; -// } -// -// @Override -// protected void moveDownTableSelectionItem() { -// int index = table.getSelectionIndex(); -// if (index < 0 || index >= table.getItemCount()) { -// return; -// } -// -// tableModel.moveDownRecord(index); -// -// table.setSelection(index + 1); -// enableEditControls(index + 1); -// } -// -// @Override -// protected void moveUpTableSelectionItem() { -// int index = table.getSelectionIndex(); -// if (index <= 0 || index > table.getItemCount()) { -// return; -// } -// -// tableModel.moveUpRecord(index); -// -// table.setSelection(index - 1); -// enableEditControls(index - 1); -// } -// -// @Override -// protected JiemamyElement removeTableSelectionItem() { -// int index = table.getSelectionIndex(); -// if (index < 0 || index > table.getItemCount()) { -// return null; -// } -// RecordModel recordToRemove = tableModel.removeRecord(table.getSelectionIndex()); -// -// TableViewer tableViewer = getTableViewer(); -// tableViewer.remove(recordToRemove); -// -// disableEditControls(); -// -// return recordToRemove; -// } -// -// -// /** -// * 編集セルをCTRL+カーソルキーで移動できるようにするKeyListener -// * -// * @author daisuke -// */ -// private class CellEditorKeyListener extends KeyAdapter { -// -// private Control control; -// -// private CellEditor editor; -// -// -// /** -// * コンストラクタ。 -// * -// * @param control -// * @param editor -// */ -// public CellEditorKeyListener(Control control, CellEditor editor) { -// this.control = control; -// this.editor = editor; -// } -// -// @Override -// public void keyPressed(KeyEvent evt) { -// if (control == null || control.isDisposed()) { -// return; -// } -// -// if ((evt.stateMask & SWT.CTRL) == 0) { -// return; -// } -// -// int selectionIndex = table.getSelectionIndex(); -// int columnIndex = editorList.indexOf(editor); -// -// switch (evt.keyCode) { -// case SWT.ARROW_RIGHT: -// if (columnIndex < editorList.size()) { -// columnIndex++; -// } -// break; -// -// case SWT.ARROW_LEFT: -// if (columnIndex >= 0) { -// columnIndex--; -// } -// break; -// -// case SWT.ARROW_UP: -// if (selectionIndex >= 0) { -// table.setSelection(--selectionIndex); -// } -// break; -// -// case SWT.ARROW_DOWN: -// if (selectionIndex < tableModel.getRecords().size() - 1) { -// table.setSelection(++selectionIndex); -// } -// break; -// -// default: -// return; -// } -// -// editor.deactivate(); -// getTableViewer().editElement(tableModel.getRecord(selectionIndex), columnIndex); -// } -// } -// -// /** -// * Record用CellModifier -// * -// * @author daisuke -// */ -// private class RecordCellModifier implements ICellModifier { -// -// @SuppressWarnings("unused") -// private TableViewer viewer; -// -// -// public RecordCellModifier(TableViewer viewer) { -// this.viewer = viewer; -// } -// -// public boolean canModify(Object element, String property) { -// return true; -// } -// -// public Object getValue(Object element, String property) { -// RecordModel record = (RecordModel) element; -// ColumnModel column = tableModel.getColumnById(Long.parseLong(property)); -// -// assert record != null; -// -// Object result; -// if (column != null && column.canEditRecordByCombo()) { -// String value = record.getRecordData(Long.parseLong(property)).getValue(); -// -// int index; -// for (index = 0; index < column.getValuesAllowedByForeignKeys().size(); index++) { -// String currentValue = column.getValuesAllowedByForeignKeys().get(index).getValue(); -// if (currentValue.equals(value)) { -// break; -// } -// } -// result = index; -// } else { -// result = record.getRecordData(Long.parseLong(property)); -// } -// return result; -// } -// -// public void modify(Object element, String property, Object value) { -// RecordModel record; -// if (element instanceof Item) { -// record = (RecordModel) ((Item) element).getData(); -// } else { -// record = (RecordModel) element; -// } -// ColumnModel column = tableModel.getColumnById(Long.parseLong(property)); -// -// if (column != null && column.canEditRecordByCombo()) { -// RecordValueModel val; -// if (value == null) { // NULL選択時 -// val = null; -// } else if (value instanceof Integer) { -// val = column.getValuesAllowedByForeignKeys().get((Integer) value); -// } else { // 選択肢外入力時 -// val = new RecordValueModel((String) value); -// } -// record.setRecordData(Long.parseLong(property), val); -// } else { -// record.setRecordData(Long.parseLong(property), (RecordValueModel) value); -// } -// TableViewer tableViewer = getTableViewer(); -// tableViewer.update(element, null); -// } -// -// } -// -// /** -// * RecordTable用ComboBoxCellEditor -// * -// * @author daisuke -// */ -// private class RecordComboBoxCellEditor extends ComboBoxCellEditor { -// -// private CCombo comboBox; -// -// -// /** -// * コンストラクタ。 -// * -// * @param parent 親 -// * @param items コンボアイテム文字列の配列 -// */ -// public RecordComboBoxCellEditor(Composite parent, String[] items) { -// super(parent, items); -// } -// -// @Override -// protected Control createControl(Composite parent) { -// comboBox = (CCombo) super.createControl(parent); -// comboBox.addKeyListener(new CellEditorKeyListener(comboBox, this)); -// return comboBox; -// } -// -// @Override -// protected Object doGetValue() { -// Object value = super.doGetValue(); -// if (value.equals(-1)) { // 選択肢外入力時 -// return comboBox.getText(); -// } else if (value.equals(0)) { // NULL選択時 -// // TODO NOT NULLの時は? -// return null; -// } -// return value; -// } -// -// @Override -// protected void doSetValue(Object value) { -// Object newValue; -// if (value == null) { -// newValue = 0; -// } else { -// newValue = value; -// } -// super.doSetValue(newValue); -// } -// } -// -// /** -// * Record用ContentProvider -// * -// * @author daisuke -// */ -// private class RecordContentProvider extends ArrayContentProvider implements CommandListener { -// -// private Viewer viewer; -// -// -// public void commandExecuted(Command command) { -//// if (evt.getPropertyName().equals(RecordModel.P_RECORD_DATA)) { -// refreshTable(); -//// } else if (evt.getPropertyName().equals(TableModel.P_ENTITY_TABLE_RECORDS)) { -//// refreshTable(); // レコードの変更を反映させる。 -//// } else if (evt.getPropertyName().equals(TableModel.P_ENTITY_TABLE_COLUMNS)) { -//// refreshTableColumns(); // 増えた/減ったカラムを反映させる。 -//// configureCellEditor(); // CellEditor関係を更新する。 -//// refreshEditComboItems(); // 削除・交換操作用コンボを更新する。 -//// } -// } -// -// @Override -// public void dispose() { -//// for (RecordModel record : tableModel.getRecords()) { -//// record.removePropertyChangeListener(this); -//// } -//// tableModel.removePropertyChangeListener(this); -// super.dispose(); -// } -// -// public JiemamyElement getTargetModel() { -// return (JiemamyElement) viewer.getInput(); -// } -// -// @Override -// public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { -// this.viewer = viewer; -//// if (oldInput != null) { -//// for (RecordModel record : tableModel.getRecords()) { -//// record.removePropertyChangeListener(this); -//// } -//// tableModel.removePropertyChangeListener(this); -//// } -//// if (newInput != null) { -//// tableModel.addPropertyChangeListener(this); -//// for (RecordModel record : tableModel.getRecords()) { -//// record.addPropertyChangeListener(this); -//// } -//// } -// -// super.inputChanged(viewer, oldInput, newInput); -// } -// -// } -// -// /** -// * Record用LabelProvider -// * -// * @author daisuke -// */ -// private class RecordLabelProvider extends BaseLabelProvider implements ITableLabelProvider { -// -// public Image getColumnImage(Object element, int columnIndex) { -// RecordModel record = (RecordModel) element; -// long columnId = tableModel.getRecordColumnDtos().get(columnIndex).getColumnId(); -// -// RecordValueModel value = record.getRecordData(columnId); -// if (value.getStatus() != RecordValueStatus.VALUE) { -// ImageRegistry ir = JiemamyPlugin.getDefault().getImageRegistry(); -// return ir.get(ImageNames.ICON_NULL_DATA); -// } -// -// return null; -// } -// -// public String getColumnText(Object element, int columnIndex) { -// RecordModel record = (RecordModel) element; -// long columnId = tableModel.getRecordColumnDtos().get(columnIndex).getColumnId(); -// RecordValueModel result = record.getRecordData(columnId); -// -// return result.getValueWithTypical(); -// } -// } -// -// /** -// * RecordTable用TextCellEditor -// * -// * @author daisuke -// */ -// private class RecordTextCellEditor extends TextCellEditor { -// -// public RecordTextCellEditor(Composite parent) { -// super(parent); -// } -// -// @Override -// protected Control createControl(Composite parent) { -// Control text = super.createControl(parent); -// text.addKeyListener(new CellEditorKeyListener(text, this)); -// return text; -// } -// -// @Override -// protected Object doGetValue() { -// Object value = super.doGetValue(); -// if (RecordValueStatus.NULL.getKey().equals(value)) { -// return new RecordValueModel(RecordValueStatus.NULL); -// } else if (RecordValueStatus.NOT_SPECIFIED.getKey().equals(value)) { -// return new RecordValueModel(RecordValueStatus.NOT_SPECIFIED); -// } -// return new RecordValueModel((String) value); -// } -// -// @Override -// protected void doSetValue(Object value) { -// Object newValue; -// if (((RecordValueModel) value).getStatus() == RecordValueStatus.NULL) { -// newValue = RecordValueStatus.NULL.getKey(); -// } else if (((RecordValueModel) value).getStatus() == RecordValueStatus.NOT_SPECIFIED) { -// newValue = RecordValueStatus.NOT_SPECIFIED.getKey(); -// } else { -// newValue = ((RecordValueModel) value).getValue(); -// } -// super.doSetValue(newValue); -// } -// } -// } -//}