package org.insightech.er.editor.model.dbexport.excel.sheet_generator; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.eclipse.core.runtime.IProgressMonitor; import org.insightech.er.editor.model.ERDiagram; import org.insightech.er.editor.model.ObjectModel; import org.insightech.er.editor.model.dbexport.excel.ExportToExcelManager.LoopDefinition; import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn; import org.insightech.er.editor.model.diagram_contents.element.node.view.View; import org.insightech.er.util.POIUtils; import org.insightech.er.util.POIUtils.CellLocation; public class ViewSheetGenerator extends AbstractSheetGenerator { private static final String KEYWORD_LOGICAL_VIEW_NAME = "$LVN"; private static final String KEYWORD_PHYSICAL_VIEW_NAME = "$PVN"; private static final String KEYWORD_VIEW_DESCRIPTION = "$VDSC"; private static final String KEYWORD_VIEW_SQL = "$SQL"; private static final String[] FIND_KEYWORDS_OF_FK_COLUMN = { KEYWORD_LOGICAL_FOREIGN_KEY_NAME, KEYWORD_PHYSICAL_FOREIGN_KEY_NAME }; private ColumnTemplate columnTemplate; private ColumnTemplate fkColumnTemplate; protected void clear() { this.columnTemplate = null; this.fkColumnTemplate = null; } @Override public void generate(IProgressMonitor monitor, HSSFWorkbook workbook, int sheetNo, boolean useLogicalNameAsSheetName, Map<String, Integer> sheetNameMap, Map<String, ObjectModel> sheetObjectMap, ERDiagram diagram, Map<String, LoopDefinition> loopDefinitionMap) throws InterruptedException { this.clear(); List<View> nodeSet = null; if (diagram.getCurrentCategory() != null) { nodeSet = diagram.getCurrentCategory().getViewContents(); } else { nodeSet = diagram.getDiagramContents().getContents().getViewSet() .getList(); } for (View view : nodeSet) { String name = null; if (useLogicalNameAsSheetName) { name = view.getLogicalName(); } else { name = view.getPhysicalName(); } HSSFSheet newSheet = createNewSheet(workbook, sheetNo, name, sheetNameMap); sheetObjectMap.put(workbook.getSheetName(workbook .getSheetIndex(newSheet)), view); this.setViewData(workbook, newSheet, view); monitor.worked(1); } } /** * �r���[�V�[�g�Ƀf�[�^��ݒ肵�܂�. * * @param workbook * @param sheet * @param view */ public void setViewData(HSSFWorkbook workbook, HSSFSheet sheet, View view) { POIUtils.replace(sheet, KEYWORD_LOGICAL_VIEW_NAME, this.getValue( this.keywordsValueMap, KEYWORD_LOGICAL_VIEW_NAME, view .getLogicalName())); POIUtils.replace(sheet, KEYWORD_PHYSICAL_VIEW_NAME, this.getValue( this.keywordsValueMap, KEYWORD_PHYSICAL_VIEW_NAME, view .getPhysicalName())); POIUtils.replace(sheet, KEYWORD_VIEW_DESCRIPTION, this.getValue( this.keywordsValueMap, KEYWORD_VIEW_DESCRIPTION, view .getDescription())); POIUtils.replace(sheet, KEYWORD_VIEW_SQL, this.getValue( this.keywordsValueMap, KEYWORD_VIEW_SQL, view.getSql())); CellLocation cellLocation = POIUtils.findCell(sheet, FIND_KEYWORDS_OF_COLUMN); if (cellLocation != null) { int rowNum = cellLocation.r; HSSFRow templateRow = sheet.getRow(rowNum); if (this.columnTemplate == null) { this.columnTemplate = this.loadColumnTemplate(workbook, sheet, cellLocation); } int order = 1; for (NormalColumn normalColumn : view.getExpandedColumns()) { HSSFRow row = POIUtils.insertRow(sheet, rowNum++); this.setColumnData(this.keywordsValueMap, columnTemplate, row, normalColumn, view, order); order++; } this.setCellStyle(columnTemplate, sheet, cellLocation.r, rowNum - cellLocation.r, templateRow.getFirstCellNum()); } CellLocation fkCellLocation = POIUtils.findCell(sheet, FIND_KEYWORDS_OF_FK_COLUMN); if (fkCellLocation != null) { int rowNum = fkCellLocation.r; HSSFRow templateRow = sheet.getRow(rowNum); if (this.fkColumnTemplate == null) { this.fkColumnTemplate = this.loadColumnTemplate(workbook, sheet, fkCellLocation); } int order = 1; for (NormalColumn normalColumn : view.getExpandedColumns()) { if (normalColumn.isForeignKey()) { HSSFRow row = POIUtils.insertRow(sheet, rowNum++); this.setColumnData(this.keywordsValueMap, this.fkColumnTemplate, row, normalColumn, view, order); order++; } } this.setCellStyle(this.fkColumnTemplate, sheet, fkCellLocation.r, rowNum - fkCellLocation.r, templateRow.getFirstCellNum()); } } @Override public String getTemplateSheetName() { return "view_template"; } @Override public String[] getKeywords() { return new String[] { KEYWORD_LOGICAL_VIEW_NAME, KEYWORD_PHYSICAL_VIEW_NAME, KEYWORD_VIEW_DESCRIPTION, KEYWORD_VIEW_SQL, KEYWORD_ORDER, KEYWORD_LOGICAL_COLUMN_NAME, KEYWORD_PHYSICAL_COLUMN_NAME, KEYWORD_TYPE, KEYWORD_LENGTH, KEYWORD_DECIMAL, KEYWORD_PRIMARY_KEY, KEYWORD_NOT_NULL, KEYWORD_UNIQUE_KEY, KEYWORD_FOREIGN_KEY, KEYWORD_LOGICAL_REFERENCE_TABLE_KEY, KEYWORD_PHYSICAL_REFERENCE_TABLE_KEY, KEYWORD_LOGICAL_REFERENCE_TABLE, KEYWORD_PHYSICAL_REFERENCE_TABLE, KEYWORD_LOGICAL_REFERENCE_KEY, KEYWORD_PHYSICAL_REFERENCE_KEY, KEYWORD_AUTO_INCREMENT, KEYWORD_DEFAULT_VALUE, KEYWORD_DESCRIPTION, KEYWORD_LOGICAL_FOREIGN_KEY_NAME, KEYWORD_PHYSICAL_FOREIGN_KEY_NAME }; } @Override public int getKeywordsColumnNo() { return 12; } @Override public int count(ERDiagram diagram) { return diagram.getDiagramContents().getContents().getViewSet() .getList().size(); } }