blob: bb231a704e3ceeedda6567af81018e5c94ff2f15 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.orcs.rest.internal.writer;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URI;
import org.eclipse.osee.framework.core.util.XResultData;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelSaxHandler;
import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor;
import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
/**
* @author Donald G. Dunne
*/
public class OrcsWriterExcelReader {
private OwCollector collector;
private final XResultData result;
public OrcsWriterExcelReader(XResultData result) {
this.result = result;
}
public void run(URI source) throws SAXException, IOException, UnsupportedEncodingException, MalformedURLException {
collector = new OwCollector();
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(new ExcelSaxHandler(new ExcelRowProcessor(collector, result), true));
InputStreamReader inputStreamReader = new InputStreamReader(source.toURL().openStream(), "UTF-8");
xmlReader.parse(new InputSource(inputStreamReader));
inputStreamReader.close();
}
public void run(InputStream source) throws SAXException, IOException, UnsupportedEncodingException, MalformedURLException {
collector = new OwCollector();
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(new ExcelSaxHandler(new ExcelRowProcessor(collector, result), true));
xmlReader.parse(new InputSource(source));
}
private static final class ExcelRowProcessor implements RowProcessor {
private final OwCollector collector;
private OrcsWriterSheetProcessorForCreateUpdate createSheet;
private OrcsWriterSheetProcessorForSettings settingsSheet;
private String sheetName = "";
private final XResultData result;
private OrcsWriterSheetProcessorForCreateUpdate updateSheet;
private OrcsWriterSheetProcessorForDelete deleteSheet;
public ExcelRowProcessor(OwCollector collector, XResultData result) {
this.collector = collector;
this.result = result;
}
@Override
public void detectedRowAndColumnCounts(int rowCount, int columnCount) {
// do nothing
}
@Override
public void foundStartOfWorksheet(String sheetName) throws OseeCoreException {
System.out.println("Processing Sheet " + sheetName);
this.sheetName = sheetName;
if (sheetName.equals(OrcsWriterUtil.CREATE_SHEET_NAME)) {
createSheet = new OrcsWriterSheetProcessorForCreateUpdate(collector, result, true);
return;
} else if (sheetName.equals(OrcsWriterUtil.UPDATE_SHEET_NAME)) {
updateSheet = new OrcsWriterSheetProcessorForCreateUpdate(collector, result, false);
return;
} else if (sheetName.equals(OrcsWriterUtil.INSTRUCTIONS_AND_SETTINGS_SHEET_NAME)) {
settingsSheet = new OrcsWriterSheetProcessorForSettings(collector, result);
return;
} else if (sheetName.equals(OrcsWriterUtil.DELETE_SHEET_NAME)) {
deleteSheet = new OrcsWriterSheetProcessorForDelete(collector, result);
return;
}
}
@Override
public void processCommentRow(String[] row) {
// do nothing
}
@Override
public void processEmptyRow() {
// do nothing
}
@Override
public void processHeaderRow(String[] headerRow) {
if (isCreateSheet()) {
createSheet.processHeaderRow(headerRow);
} else if (isUpdateSheet()) {
updateSheet.processHeaderRow(headerRow);
} else if (isDeleteSheet()) {
deleteSheet.processHeaderRow(headerRow);
}
}
private boolean isCreateSheet() {
return sheetName.equals(OrcsWriterUtil.CREATE_SHEET_NAME);
}
private boolean isDeleteSheet() {
return sheetName.equals(OrcsWriterUtil.DELETE_SHEET_NAME);
}
private boolean isUpdateSheet() {
return sheetName.equals(OrcsWriterUtil.UPDATE_SHEET_NAME);
}
private boolean isSettingsSheet() {
return sheetName.equals(OrcsWriterUtil.INSTRUCTIONS_AND_SETTINGS_SHEET_NAME);
}
@Override
public void processRow(String[] row) throws OseeCoreException {
if (isCreateSheet()) {
processCreateSheetRow(row);
} else if (isUpdateSheet()) {
processUpdateSheetRow(row);
} else if (isSettingsSheet()) {
settingsSheet.processRow(row);
} else if (isDeleteSheet()) {
processDeleteSheetRow(row);
}
}
private void processDeleteSheetRow(String[] row) {
deleteSheet.processRow(row);
}
private void processUpdateSheetRow(String[] row) {
updateSheet.processRow(row);
}
private void processCreateSheetRow(String[] row) {
createSheet.processRow(row);
}
@Override
public void reachedEndOfWorksheet() {
// do nothing
}
}
public OwCollector getCollector() {
return collector;
}
}