/*
* Copyright (c) 2014 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.io.xls.ui;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import eu.esdihumboldt.hale.common.core.io.Value;
import eu.esdihumboldt.hale.common.instance.io.InstanceReader;
import eu.esdihumboldt.hale.io.csv.InstanceTableIOConstants;
import eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage;
import eu.esdihumboldt.hale.ui.io.instance.InstanceImportWizard;
/**
* Configuration page for the instance export provider of Excel files
*
* @author Patrick Lieb
*/
public class XLSInstanceImportConfigurationPage extends
AbstractConfigurationPage<InstanceReader, InstanceImportWizard> {
private Combo sheetSelection;
/**
* Default Constructor
*/
public XLSInstanceImportConfigurationPage() {
super("xls.instance.import.sheet.selection");
setTitle("Sheet selection");
setDescription("Select sheet to import instances");
}
/**
* @see eu.esdihumboldt.hale.ui.HaleWizardPage#createContent(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void createContent(Composite page) {
page.setLayout(new GridLayout(1, false));
Composite menu = new Composite(page, SWT.NONE);
menu.setLayout(new GridLayout(2, false));
GridDataFactory.fillDefaults().grab(true, false).applyTo(menu);
Label sheetLabel = new Label(menu, SWT.None);
sheetLabel.setText("Select sheet");
sheetSelection = new Combo(menu, SWT.DROP_DOWN | SWT.READ_ONLY);
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
.applyTo(sheetSelection);
setPageComplete(false);
}
/**
* @see eu.esdihumboldt.hale.ui.HaleWizardPage#onShowPage(boolean)
*/
@Override
protected void onShowPage(boolean firstShow) {
if (!firstShow) {
setErrorMessage(null);
}
try {
Workbook wb = WorkbookFactory.create(getWizard().getProvider().getSource().getInput());
int numberOfSheets = wb.getNumberOfSheets();
String[] items = new String[numberOfSheets];
for (int i = 0; i < numberOfSheets; i++) {
items[i] = wb.getSheetAt(i).getSheetName();
}
sheetSelection.setItems(items);
} catch (Exception e) {
setErrorMessage("Cannot load Excel file!");
setPageComplete(false);
return;
}
super.onShowPage(firstShow);
sheetSelection.select(0);
setPageComplete(true);
}
/**
* @see eu.esdihumboldt.hale.ui.io.IOWizardPage#updateConfiguration(eu.esdihumboldt.hale.common.core.io.IOProvider)
*/
@Override
public boolean updateConfiguration(InstanceReader provider) {
provider.setParameter(InstanceTableIOConstants.SHEET_INDEX,
Value.of(sheetSelection.getSelectionIndex()));
return true;
}
/**
* @see eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage#enable()
*/
@Override
public void enable() {
// not required
}
/**
* @see eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage#disable()
*/
@Override
public void disable() {
// not required
}
}