package org.insightech.er.editor.controller.command.common; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.extractor.ExcelExtractor; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.swt.SWT; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.insightech.er.Activator; import org.insightech.er.editor.controller.command.AbstractCommand; import org.insightech.er.editor.model.ERModelUtil; import org.insightech.er.editor.model.ViewableModel; import org.insightech.er.editor.model.diagram_contents.element.node.ermodel.ERModel; import org.insightech.er.editor.model.diagram_contents.element.node.table.ERVirtualTable; import org.insightech.er.editor.model.settings.Settings; import org.insightech.er.util.POIUtils; public class EditExcelCommand extends AbstractCommand { private ViewableModel model; public EditExcelCommand(ViewableModel model) { this.model = model; } @Override protected void doExecute() { if (model instanceof ERVirtualTable) { ERVirtualTable vtable = (ERVirtualTable) model; String tableName = vtable.getRawTable().getPhysicalName(); Settings settings = vtable.getDiagram().getDiagramContents().getSettings(); String path = settings.getMasterDataBasePath(); if (path != null) { IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path(path)); try { IResource[] members = folder.members(); boolean hit = false; for (IResource excelFile : members) { String ext = excelFile.getFileExtension(); if (ext == null) { continue; } if (!ext.equals("xls") && !ext.equals("xlsx")) { continue; } // Activator.log(new Exception(excelFile.getLocation().toFile().toString())); try { HSSFWorkbook book = POIUtils.readExcelBook(excelFile.getLocation().toFile()); for (int i = 0; i < book.getNumberOfSheets(); i++) { String name = book.getSheetName(i); if (name.equalsIgnoreCase(tableName)) { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IDE.openEditor(page, (IFile)excelFile); hit = true; break; } } } catch (Throwable e) { // ���܂�Excel���J���Ȃ����Ƃ����邪���� } } if (!hit) { if (Activator.showConfirmDialog(tableName + " �e�[�u���̃f�[�^���L�ڂ���Excel�����‚���܂���B�f�B���N�g�����J���܂����H", SWT.OK, SWT.CANCEL)) { ERModelUtil.openDirectory(members[0]); } } } catch (CoreException e) { Activator.log(e); } } } } @Override protected void doUndo() { // do nothing } }