Search in sources :

Example 6 with Column

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;
}
Also used : Entity(org.molgenis.data.Entity) Column(org.molgenis.oneclickimporter.model.Column) AttributeType(org.molgenis.data.meta.AttributeType) org.molgenis.data.meta.model(org.molgenis.data.meta.model)

Example 7 with Column

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);
}
Also used : Entity(org.molgenis.data.Entity) Column(org.molgenis.oneclickimporter.model.Column) DataCollection(org.molgenis.oneclickimporter.model.DataCollection) EntityServiceImpl(org.molgenis.oneclickimporter.service.impl.EntityServiceImpl) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Package(org.molgenis.data.meta.model.Package) Test(org.testng.annotations.Test)

Example 8 with Column

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);
}
Also used : DataCollection(org.molgenis.oneclickimporter.model.DataCollection) Column(org.molgenis.oneclickimporter.model.Column) Sheet(org.apache.poi.ss.usermodel.Sheet) Test(org.testng.annotations.Test)

Example 9 with Column

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);
}
Also used : DataCollection(org.molgenis.oneclickimporter.model.DataCollection) Column(org.molgenis.oneclickimporter.model.Column) Sheet(org.apache.poi.ss.usermodel.Sheet) Test(org.testng.annotations.Test)

Example 10 with Column

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);
}
Also used : DataCollection(org.molgenis.oneclickimporter.model.DataCollection) Column(org.molgenis.oneclickimporter.model.Column) OneClickImporterServiceImpl(org.molgenis.oneclickimporter.service.impl.OneClickImporterServiceImpl) Test(org.testng.annotations.Test)

Aggregations

Column (org.molgenis.oneclickimporter.model.Column)11 DataCollection (org.molgenis.oneclickimporter.model.DataCollection)9 Test (org.testng.annotations.Test)9 Sheet (org.apache.poi.ss.usermodel.Sheet)5 Entity (org.molgenis.data.Entity)2 OneClickImporterServiceImpl (org.molgenis.oneclickimporter.service.impl.OneClickImporterServiceImpl)2 Row (org.apache.poi.ss.usermodel.Row)1 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)1 AttributeType (org.molgenis.data.meta.AttributeType)1 org.molgenis.data.meta.model (org.molgenis.data.meta.model)1 Package (org.molgenis.data.meta.model.Package)1 EntityServiceImpl (org.molgenis.oneclickimporter.service.impl.EntityServiceImpl)1