use of org.molgenis.oneclickimporter.model.Column in project molgenis by molgenis.
the class EntityServiceImpl method createEntityType.
@Override
public EntityType createEntityType(DataCollection dataCollection, String packageName) {
String entityTypeId = idGenerator.generateId();
// Create a dataTable
EntityType entityType = entityTypeFactory.create();
org.molgenis.data.meta.model.Package package_ = metaDataService.getPackage(packageName);
if (package_ == null) {
package_ = packageFactory.create(packageName);
package_.setLabel(packageName);
metaDataService.addPackage(package_);
}
entityType.setPackage(package_);
entityType.setId(entityTypeId);
entityType.setLabel(oneClickImporterNamingService.getLabelWithPostFix(dataCollection.getName()));
// Check if first column can be used as id ( has unique values )
List<Column> columns = dataCollection.getColumns();
Column firstColumn = columns.get(0);
final boolean isFirstColumnUnique = oneClickImporterService.hasUniqueValues(firstColumn);
AttributeType type = attributeTypeService.guessAttributeType(firstColumn.getDataValues());
final boolean isValidAttributeType = getValidIdAttributeTypes().contains(type);
final boolean useAutoId = !isFirstColumnUnique || !isValidAttributeType;
Attribute idAttribute = useAutoId ? createIdAttribute() : createAttribute(firstColumn);
entityType.addAttribute(idAttribute, ROLE_ID);
// Add all columns to the dataTable
columns.forEach(column -> {
if (useAutoId || column != firstColumn) {
Attribute attribute = createAttribute(column);
entityType.addAttribute(attribute);
}
});
// Store the dataTable (metadata only)
metaDataService.addEntityType(entityType);
// TODO: the user who adds/owns should get WRITE META always.
permissionSystemService.giveUserWriteMetaPermissions(entityType);
List<Entity> rows = newArrayList();
int numberOfRows = dataCollection.getColumns().get(0).getDataValues().size();
for (int index = 0; index < numberOfRows; index++) {
Entity row = entityManager.create(entityType, NO_POPULATE);
if (useAutoId) {
row.setIdValue(idGenerator.generateId());
}
for (Column column : columns) {
setRowValueForAttribute(row, index, column);
}
rows.add(row);
}
dataService.add(entityType.getId(), rows.stream());
return entityType;
}
use of org.molgenis.oneclickimporter.model.Column in project molgenis by molgenis.
the class EntityServiceImplTest method testCreateEntity.
@Test
public void testCreateEntity() throws Exception {
String tableName = "super-powers";
List<Object> userNames = Arrays.asList("Mark", "Mariska", "Bart");
List<Object> superPowers = Arrays.asList("Arrow functions", "Cookies", "Knots");
List<Column> columns = Arrays.asList(Column.create("user name", 0, userNames), Column.create("super power", 1, superPowers));
DataCollection dataCollection = DataCollection.create(tableName, columns);
// mock auto id
String generatedId = "id_0";
when(idGenerator.generateId()).thenReturn(generatedId);
// mock attributes
Attribute idAttr = mock(Attribute.class);
when(idAttr.setName(anyString())).thenReturn(idAttr);
when(idAttr.setVisible(anyBoolean())).thenReturn(idAttr);
when(idAttr.setAuto(anyBoolean())).thenReturn(idAttr);
when(idAttr.setIdAttribute(anyBoolean())).thenReturn(idAttr);
Attribute nameAttr = mock(Attribute.class);
when(nameAttr.getDataType()).thenReturn(STRING);
Attribute powerAttr = mock(Attribute.class);
when(powerAttr.getDataType()).thenReturn(STRING);
when(attributeFactory.create()).thenReturn(idAttr, nameAttr, powerAttr);
// mock table
EntityType table = mock(EntityType.class);
when(entityTypeFactory.create()).thenReturn(table);
when(table.getId()).thenReturn(generatedId);
when(table.getAttribute("user_name")).thenReturn(nameAttr);
when(table.getAttribute("super_power")).thenReturn(powerAttr);
// mock package
Package package_ = mock(Package.class);
when(metaDataService.getPackage("package_")).thenReturn(package_);
when(dataService.getMeta()).thenReturn(metaDataService);
// mock rows
Entity row1 = mock(Entity.class);
when(row1.getEntityType()).thenReturn(table);
Entity row2 = mock(Entity.class);
when(row2.getEntityType()).thenReturn(table);
Entity row3 = mock(Entity.class);
when(row3.getEntityType()).thenReturn(table);
when(entityManager.create(table, NO_POPULATE)).thenReturn(row1, row2, row3);
when(oneClickImporterNamingService.asValidColumnName("user name")).thenReturn("user_name");
when(oneClickImporterNamingService.asValidColumnName("super power")).thenReturn("super_power");
when(oneClickImporterNamingService.getLabelWithPostFix("super-powers")).thenReturn("super-powers");
when(attributeTypeService.guessAttributeType(any())).thenReturn(STRING);
entityService = new EntityServiceImpl(entityTypeFactory, attributeFactory, idGenerator, dataService, metaDataService, entityManager, attributeTypeService, oneClickImporterService, oneClickImporterNamingService, packageFactory, permissionSystemService);
EntityType entityType = entityService.createEntityType(dataCollection, "package_");
assertEquals(entityType.getId(), generatedId);
verify(table).setPackage(package_);
verify(table).setId(generatedId);
verify(table).setLabel(tableName);
verify(permissionSystemService).giveUserWriteMetaPermissions(table);
}
use of org.molgenis.oneclickimporter.model.Column in project molgenis by molgenis.
the class OneClickImporterServiceTest method testBuildDataCollectionWithSimpleValidExcelFile.
@Test
public void testBuildDataCollectionWithSimpleValidExcelFile() throws IOException, InvalidFormatException, URISyntaxException, EmptySheetException {
List<Sheet> sheets = loadSheetFromFile(OneClickImporterServiceTest.class, "/simple-valid.xlsx");
DataCollection actual = oneClickImporterService.buildDataCollectionsFromExcel(sheets).get(0);
Column c1 = Column.create("name", 0, newArrayList("Mark", "Connor", "Fleur", "Dennis"));
Column c2 = Column.create("superpower", 1, newArrayList("arrow functions", "Oldschool syntax", "Lambda Magician", "Root access"));
DataCollection expected = DataCollection.create("Sheet1", newArrayList(c1, c2));
assertEquals(actual, expected);
}
use of org.molgenis.oneclickimporter.model.Column in project molgenis by molgenis.
the class OneClickImporterServiceTest method testBuildDataSheetWithValidFormulaFile.
@Test
public void testBuildDataSheetWithValidFormulaFile() throws IOException, InvalidFormatException, URISyntaxException, EmptySheetException {
List<Sheet> sheets = loadSheetFromFile(OneClickImporterServiceTest.class, "/valid-with-formula.xlsx");
DataCollection actual = oneClickImporterService.buildDataCollectionsFromExcel(sheets).get(0);
Column c1 = Column.create("name", 0, newArrayList("Mark", "Mariska"));
Column c2 = Column.create("age", 1, newArrayList(26.0, 22.0));
DataCollection expected = DataCollection.create("Sheet1", newArrayList(c1, c2));
assertEquals(actual, expected);
}
use of org.molgenis.oneclickimporter.model.Column in project molgenis by molgenis.
the class OneClickImporterServiceTest method testBuildDataCollectionWithComplexValidCsvFile.
@Test
public void testBuildDataCollectionWithComplexValidCsvFile() throws IOException, URISyntaxException {
oneClickImporterService = new OneClickImporterServiceImpl();
List<String[]> lines = loadLinesFromFile(OneClickImporterServiceTest.class, "/complex-valid.csv");
DataCollection actual = oneClickImporterService.buildDataCollectionFromCsv("complex-valid", lines);
Column c1 = Column.create("first name", 0, newArrayList("Mark", "Fleur", "Dennis", "Bart", "Sido", "Mariska", "Tommy", "Connor", "Piet", "Jan"));
Column c2 = Column.create("last name", 1, newArrayList("de Haan", "Kelpin", "Hendriksen", "Charbon", "Haakma", "Slofstra", "de Boer", "Stroomberg", "Klaassen", null));
Column c3 = Column.create("full name", 2, newArrayList("Mark de Haan", "Fleur Kelpin", "Dennis Hendriksen", "Bart Charbon", "Sido Haakma", "Mariska Slofstra", "Tommy de Boer", "Connor Stroomberg", "Piet Klaassen", null));
Column c4 = Column.create("UMCG employee", 3, newArrayList(true, true, true, true, true, true, true, true, false, false));
Column c5 = Column.create("Age", 4, newArrayList(26.4f, null, null, null, null, 22, 27, null, 53, 0.123f));
DataCollection expected = DataCollection.create("complex-valid", newArrayList(c1, c2, c3, c4, c5));
assertEquals(actual, expected);
}
Aggregations