package org.insightech.er.editor.model.dbexport.excel.sheet_generator;
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.ERTable;
import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn;
import org.insightech.er.editor.model.diagram_contents.element.node.table.index.Index;
import org.insightech.er.util.POIUtils;
import org.insightech.er.util.POIUtils.CellLocation;
public class IndexSheetGenerator extends AbstractSheetGenerator {
private static final String KEYWORD_PHYSICAL_INDEX_NAME = "$PIN";
private static final String KEYWORD_INDEX_TYPE = "$ITYP";
private static final String KEYWORD_UNIQUE_INDEX = "$IU";
private static final String KEYWORD_INDEX_DESCRIPTION = "$IDSC";
private ColumnTemplate columnTemplate;
protected void clear() {
this.columnTemplate = 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) {
this.clear();
for (ERTable table : diagram.getDiagramContents().getContents()
.getTableSet()) {
if (diagram.getCurrentCategory() != null
&& !diagram.getCurrentCategory().contains(table)) {
continue;
}
for (Index index : table.getIndexes()) {
String name = index.getName();
HSSFSheet newSheet = createNewSheet(workbook, sheetNo,
name, sheetNameMap);
sheetObjectMap.put(workbook.getSheetName(workbook
.getSheetIndex(newSheet)), index);
this.setIndexData(workbook, newSheet, index);
monitor.worked(1);
}
}
}
/**
* �C���f�b�N�X�V�[�g�Ƀf�[�^��ݒ肵�܂�.
*
* @param workbook
* @param sheet
* @param index
*/
public void setIndexData(HSSFWorkbook workbook, HSSFSheet sheet, Index index) {
POIUtils.replace(sheet, KEYWORD_PHYSICAL_INDEX_NAME, this.getValue(
this.keywordsValueMap, KEYWORD_PHYSICAL_INDEX_NAME, index
.getName()));
POIUtils.replace(sheet, KEYWORD_INDEX_TYPE, this.getValue(
this.keywordsValueMap, KEYWORD_INDEX_TYPE, index.getType()));
POIUtils.replace(sheet, KEYWORD_UNIQUE_INDEX, this.getValue(
this.keywordsValueMap, KEYWORD_UNIQUE_INDEX, !index
.isNonUnique()));
POIUtils.replace(sheet, KEYWORD_PHYSICAL_TABLE_NAME, this.getValue(
this.keywordsValueMap, KEYWORD_PHYSICAL_TABLE_NAME, index
.getTable().getPhysicalName()));
POIUtils.replace(sheet, KEYWORD_LOGICAL_TABLE_NAME, this.getValue(
this.keywordsValueMap, KEYWORD_LOGICAL_TABLE_NAME, index
.getTable().getLogicalName()));
POIUtils.replace(sheet, KEYWORD_INDEX_DESCRIPTION, this.getValue(
this.keywordsValueMap, KEYWORD_INDEX_DESCRIPTION, index
.getDescription()));
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 = loadColumnTemplate(workbook, sheet,
cellLocation);
}
int order = 1;
for (NormalColumn normalColumn : index.getColumns()) {
HSSFRow row = POIUtils.insertRow(sheet, rowNum++);
this.setColumnData(this.keywordsValueMap, columnTemplate, row,
normalColumn, index.getTable(), order);
order++;
}
this.setCellStyle(columnTemplate, sheet, cellLocation.r, rowNum
- cellLocation.r, templateRow.getFirstCellNum());
}
}
@Override
public String getTemplateSheetName() {
return "index_template";
}
@Override
public String[] getKeywords() {
return new String[] { KEYWORD_PHYSICAL_INDEX_NAME, KEYWORD_INDEX_TYPE,
KEYWORD_UNIQUE_INDEX, KEYWORD_INDEX_DESCRIPTION, KEYWORD_ORDER,
KEYWORD_LOGICAL_TABLE_NAME, KEYWORD_PHYSICAL_TABLE_NAME,
KEYWORD_TABLE_DESCRIPTION, 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 };
}
@Override
public int getKeywordsColumnNo() {
return 4;
}
@Override
public int count(ERDiagram diagram) {
int count = 0;
for (ERTable table : diagram.getDiagramContents().getContents()
.getTableSet()) {
if (diagram.getCurrentCategory() != null
&& !diagram.getCurrentCategory().contains(table)) {
continue;
}
count += table.getIndexes().size();
}
return count;
}
}