Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: export multiple feature type to Excel #1043

Merged
merged 5 commits into from
Jul 20, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@
public class InstanceExportConfigurationPage
extends AbstractConfigurationPage<InstanceWriter, IOWizard<InstanceWriter>> {

private Button solveNestedProperties;
private Button useSchema;
protected Button solveNestedProperties;
protected Button useSchema;
private TypeDefinitionSelector typeSelector;
private Composite page;
protected Composite page;

private final ViewerFilter validTypesToSelect = new ViewerFilter() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,9 @@ public class InstanceTableIOConstants {
*/
public static final String EXPORT_TYPE = "selectedExportType";

/**
* Parameter for exporting empty feature types to XLS Export
*/
public static final String EXPORT_EMPTY_FEATURETYPES = "emptyFeatureTypes";

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

Expand Down Expand Up @@ -157,9 +158,7 @@ public void testWriteComplexSchema() throws Exception {
Sheet sheet = wb.getSheetAt(0);

checkHeader(sheet, header);

checkSheetName(sheet, "person");

checkFirstDataRow(sheet, firstDataRow);
}

Expand Down Expand Up @@ -209,6 +208,49 @@ public void testWriteNotNestedProperties() throws Exception {
checkFirstDataRow(sheet, firstDataRow);
}

/**
* Test - write data of complex schema and analyze result
*
* @throws Exception , if an error occurs
*/
@Test
public void testExportMultiFeatureToExcel() throws Exception {
ArrayList<InstanceCollection> examples = new ArrayList<>();
TransformationExample example = TransformationExamples
.getExample(TransformationExamples.SIMPLE_COMPLEX);
TransformationExample example2 = TransformationExamples
.getExample(TransformationExamples.CARDINALITY_MOVE);
examples.add(example.getTargetInstances());
examples.add(example2.getTargetInstances());

// set instances to xls instance writer
XLSInstanceWriter writer = new XLSInstanceWriter();
IContentType contentType = HalePlatform.getContentTypeManager()
.getContentType("eu.esdihumboldt.hale.io.xls.xls");
writer.setParameter(InstanceTableIOConstants.SOLVE_NESTED_PROPERTIES, Value.of(false));
writer.setParameter(InstanceTableIOConstants.USE_SCHEMA, Value.of(false));
writer.setParameter(InstanceTableIOConstants.EXPORT_EMPTY_FEATURETYPES, Value.of(true));

File tmpFile = tmpFolder.newFile("excelWith2Sheets.xls");
// write instances to a temporary XLS file
writer.setTarget(new FileIOSupplier(tmpFile));
writer.setContentType(contentType);

for (InstanceCollection instanceCollection : examples) {
writer.setInstances(instanceCollection);
stempler marked this conversation as resolved.
Show resolved Hide resolved
}
System.out.println("XLSInstanceWriterTest.testExportMultiFeatureToExcel()");

IOReport report = writer.execute(null);
Workbook wb;
// https: // poi.apache.org/components/spreadsheet/quick-guide.html#FileInputStream
try (POIFSFileSystem fs = new POIFSFileSystem(tmpFile)) {
wb = new HSSFWorkbook(fs.getRoot(), true);
}
int sheetNumber = wb.getNumberOfSheets();
assertEquals(examples.size(), sheetNumber);
}

/**
*
* @param sheet the excel file sheet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,19 @@ Bundle-SymbolicName: eu.esdihumboldt.hale.io.xls.ui;singleton:=true
Bundle-Version: 5.1.0.qualifier
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
eu.esdihumboldt.hale.ui
eu.esdihumboldt.hale.ui,
eu.esdihumboldt.hale.common.instance
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: de.fhg.igd.eclipse.util.extension,
de.fhg.igd.slf4jplus,
eu.esdihumboldt.hale.common.core.io,
eu.esdihumboldt.hale.common.core.io.project.model,
eu.esdihumboldt.hale.common.core.io.supplier,
eu.esdihumboldt.hale.common.instance.io,
eu.esdihumboldt.hale.common.schema,
eu.esdihumboldt.hale.common.schema.io,
eu.esdihumboldt.hale.common.schema.model,
eu.esdihumboldt.hale.common.schema.model.constraint.type,
eu.esdihumboldt.hale.io.csv,
eu.esdihumboldt.hale.io.csv.ui,
eu.esdihumboldt.hale.io.xls,
Expand Down
2 changes: 1 addition & 1 deletion io/plugins/eu.esdihumboldt.hale.io.xls.ui/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
</provider>
</configPage>
<configPage
class="eu.esdihumboldt.hale.io.csv.ui.InstanceExportConfigurationPage"
class="eu.esdihumboldt.hale.io.xls.ui.XLSInstanceExportConfigurationPage"
order="0">
<provider
ref="eu.esdihumboldt.hale.io.xls.writer.instance">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
/*
* Copyright (c) 2023 wetransform GmbH
*
* 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:
* wetransform GmbH <http://www.wetransform.to>
*/

package eu.esdihumboldt.hale.io.xls.ui;

import java.util.ArrayList;
import java.util.Collection;

import javax.xml.namespace.QName;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.PlatformUI;

import eu.esdihumboldt.hale.common.core.io.Value;
import eu.esdihumboldt.hale.common.instance.io.InstanceWriter;
import eu.esdihumboldt.hale.common.schema.model.TypeDefinition;
import eu.esdihumboldt.hale.io.csv.InstanceTableIOConstants;
import eu.esdihumboldt.hale.io.csv.ui.InstanceExportConfigurationPage;

/**
* Configuration page for exporting Excel
*
* @author Emanuela Epure
*/
public class XLSInstanceExportConfigurationPage extends InstanceExportConfigurationPage {
stempler marked this conversation as resolved.
Show resolved Hide resolved

private CheckboxTableViewer featureTypeTable;
private Button selectAll = null;
private Button exportEmptyData = null;
private Group chooseFeatureTypes;
private Table table;

/**
*
*/
public XLSInstanceExportConfigurationPage() {
super();
}

/**
* @see eu.esdihumboldt.hale.io.csv.ui.InstanceExportConfigurationPage#createContent(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void createContent(Composite page) {
this.page = page;

page.setLayout(new GridLayout(1, false));

solveNestedProperties = new Button(page, SWT.CHECK);
solveNestedProperties.setText("Solve nested properties");
solveNestedProperties.setSelection(true);

useSchema = new Button(page, SWT.CHECK);
useSchema.setText("Use the source schema for the order of the exported columns");
useSchema.setSelection(true);

GridDataFactory groupData = GridDataFactory.fillDefaults().grab(true, false);
chooseFeatureTypes = new Group(page, SWT.NONE);
chooseFeatureTypes.setLayout(new GridLayout(1, false));
chooseFeatureTypes.setText("Choose your Type you want to export");
groupData.applyTo(chooseFeatureTypes);

page.pack();

// wait for selected type
setPageComplete(false);
}

/**
* @see eu.esdihumboldt.hale.io.csv.ui.InstanceExportConfigurationPage#onShowPage(boolean)
*/
@Override
protected void onShowPage(boolean firstShow) {
if (firstShow) {

exportEmptyData = new Button(chooseFeatureTypes, SWT.CHECK);
exportEmptyData.setText("Ignore feature types without data");
exportEmptyData.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));

exportEmptyData.addSelectionListener(new SelectionAdapter() {

@Override
public void widgetSelected(SelectionEvent e) {
}
});
exportEmptyData.setSelection(false);

selectAll = new Button(chooseFeatureTypes, SWT.CHECK);
selectAll.setText("Select all");
selectAll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));

selectAll.addSelectionListener(new SelectionAdapter() {

@Override
public void widgetSelected(SelectionEvent e) {
featureTypeTable.setAllChecked(((Button) e.getSource()).getSelection());
page.layout();
page.pack();
setPageComplete(validate());
}
});

table = new Table(chooseFeatureTypes, SWT.CHECK | SWT.MULTI | SWT.SCROLL_PAGE);
table.setHeaderVisible(false);
table.setLinesVisible(false);
table.setBackground(
PlatformUI.getWorkbench().getDisplay().getSystemColor(SWT.COLOR_GRAY));
GridDataFactory groupData = GridDataFactory.fillDefaults().grab(true, false);
groupData.applyTo(table);

featureTypeTable = new CheckboxTableViewer(table);
featureTypeTable.setLabelProvider(new LabelProvider() {

@Override
public String getText(Object element) {
return ((TypeDefinition) element).getDisplayName();
}

});
featureTypeTable.setContentProvider(ArrayContentProvider.getInstance());

Collection<? extends TypeDefinition> relevantTypes = getWizard().getProvider()
.getTargetSchema().getMappingRelevantTypes();

ArrayList<QName> tableContent = new ArrayList<>();
for (TypeDefinition typeDefinition : relevantTypes) {
tableContent.add(typeDefinition.getName());
}

featureTypeTable.setInput(relevantTypes);

featureTypeTable.addCheckStateListener(new ICheckStateListener() {

@Override
public void checkStateChanged(CheckStateChangedEvent event) {
page.layout();
page.pack();
setPageComplete(validate());
}
});

page.layout();
page.pack();
}
}

private boolean validate() {
return (featureTypeTable.getCheckedElements().length > 0);
}

/**
* @see eu.esdihumboldt.hale.io.csv.ui.InstanceExportConfigurationPage#updateConfiguration(eu.esdihumboldt.hale.common.instance.io.InstanceWriter)
*/
@Override
public boolean updateConfiguration(InstanceWriter provider) {
provider.setParameter(InstanceTableIOConstants.SOLVE_NESTED_PROPERTIES,
Value.of(solveNestedProperties.getSelection()));
provider.setParameter(InstanceTableIOConstants.USE_SCHEMA,
Value.of(useSchema.getSelection()));

provider.setParameter(InstanceTableIOConstants.EXPORT_EMPTY_FEATURETYPES,
Value.of(exportEmptyData.getSelection()));

Object[] elements = featureTypeTable.getCheckedElements();
String param = "";
for (Object el : elements) {
param = param + ((TypeDefinition) el).getName().toString() + ",";
}
provider.setParameter(InstanceTableIOConstants.EXPORT_TYPE, Value.of(param));

return true;
}

}
Loading