Search in sources :

Example 1 with EQUALS

use of org.molgenis.emx2.Operator.EQUALS in project molgenis-emx2 by molgenis.

the class ImportSchemaTask method rollback.

private void rollback(Task task) {
    for (Step step : task.getSteps()) {
        if (step.getStatus().equals(COMPLETED)) {
            step.setStatus(SKIPPED);
            step.setDescription("Rolled back: " + step.getDescription());
        }
        if (step instanceof Task) {
            this.rollback((Task) step);
        }
    }
}
Also used : Task(org.molgenis.emx2.tasks.Task) Step(org.molgenis.emx2.tasks.Step)

Example 2 with EQUALS

use of org.molgenis.emx2.Operator.EQUALS in project molgenis-emx2 by molgenis.

the class ImportDataTask method run.

@Override
public void run() {
    this.start();
    // create a task for each table
    boolean skipped = true;
    // create task for the import, including subtasks for each sheet
    for (Table table : schema.getTablesSorted()) {
        if (tableStore.containsTable(table.getName())) {
            ImportTableTask importTableTask = new ImportTableTask(tableStore, table, isStrict());
            this.addSubTask(importTableTask);
            importTableTask.run();
            skipped = false;
        }
    }
    // check what files we skipped
    Collection<String> tableNames = schema.getTableNames();
    try {
        for (String sheet : tableStore.tableNames()) {
            if (!sheet.startsWith("_files/") && !"molgenis".equals(sheet) && !"molgenis_settings".equals(sheet) && !"molgenis_members".equals(sheet) && !tableNames.contains(sheet)) {
                this.addSubTask("Sheet with name '" + sheet + "' was skipped: no table with that name found").setSkipped();
            }
        }
    } catch (UnsupportedOperationException e) {
    // ignore, not important
    }
    // execute the import tasks
    if (skipped) {
        this.addSubTask("Import data skipped: No data sheet included").setSkipped();
    }
    this.complete();
}
Also used : Table(org.molgenis.emx2.Table)

Example 3 with EQUALS

use of org.molgenis.emx2.Operator.EQUALS in project molgenis-emx2 by molgenis.

the class SqlTableMetadata method addTransaction.

// static to ensure we don't touch 'this' until complete
private static SqlTableMetadata addTransaction(Database db, String schemaName, String tableName, Column[] column) {
    SqlTableMetadata tm = (SqlTableMetadata) db.getSchema(schemaName).getMetadata().getTableMetadata(tableName);
    // first per-column actions, then multi-column action such as composite keys/refs
    int position = MetadataUtils.getMaxPosition(tm.getJooq(), schemaName) + 1;
    for (Column c : column) {
        long start = System.currentTimeMillis();
        if (tm.getLocalColumn(c.getName()) != null) {
            tm.alterColumn(c);
        } else {
            Column newColumn = new Column(tm, c);
            if (tm.getInherit() != null && tm.getInheritedTable().getColumn(c.getName()) != null && // this column is replicated in all subclass tables
            !c.getName().equals(MG_TABLECLASS)) {
                throw new MolgenisException("Cannot add column " + tm.getTableName() + "." + c.getName() + ": column exists in inherited class " + tm.getInherit());
            }
            if (!newColumn.isHeading()) {
                validateColumn(newColumn);
                if (newColumn.getPosition() == null) {
                    // positions are asumed to number up in a schema
                    newColumn.setPosition(position++);
                }
                executeCreateColumn(tm.getJooq(), newColumn);
                tm.columns.put(c.getName(), newColumn);
                if (newColumn.getKey() > 0) {
                    createOrReplaceKey(tm.getJooq(), newColumn.getTable(), newColumn.getKey(), newColumn.getTable().getKeyFields(newColumn.getKey()));
                }
                executeCreateRefConstraints(tm.getJooq(), newColumn);
            } else {
                saveColumnMetadata(tm.getJooq(), newColumn);
                tm.columns.put(c.getName(), newColumn);
            }
            log(tm, start, "added column '" + newColumn.getName() + "' to table " + tm.getTableName());
        }
    }
    return tm;
}
Also used : MetadataUtils.deleteColumn(org.molgenis.emx2.sql.MetadataUtils.deleteColumn)

Example 4 with EQUALS

use of org.molgenis.emx2.Operator.EQUALS in project molgenis-emx2 by molgenis.

the class SqlTableMetadata method alterColumnTransaction.

// static to ensure we don't touch 'this' until transaction succesfull
private static SqlTableMetadata alterColumnTransaction(String schemaName, String tableName, String columnName, Column column, Database db) {
    SqlTableMetadata tm = (SqlTableMetadata) db.getSchema(schemaName).getMetadata().getTableMetadata(tableName);
    Column newColumn = new Column(tm, column);
    Column oldColumn = tm.getColumn(columnName);
    // primary keys by definition are required
    if (newColumn.getKey() == 1) {
        newColumn.setRequired(true);
    }
    validateColumn(newColumn);
    // check if reference and of different size
    if (newColumn.isRefArray() && !newColumn.getName().equals(oldColumn.getName()) && !newColumn.getColumnType().equals(oldColumn.getColumnType()) && newColumn.getRefTable().getPrimaryKeyFields().size() > 1) {
        throw new MolgenisException("Alter column of '" + oldColumn.getName() + " failed: REF_ARRAY is not supported for composite keys of table " + newColumn.getRefTableName());
    }
    // if changing 'ref' then check if not refBack exists
    if (!oldColumn.getColumnType().equals(newColumn.getColumnType())) {
        tm.checkNotRefback(columnName, oldColumn);
    }
    // drop old key, if touched
    if (oldColumn.getKey() > 0 && newColumn.getKey() != oldColumn.getKey()) {
        executeDropKey(tm.getJooq(), oldColumn.getTable(), oldColumn.getKey());
    }
    // drop referential constraints around this column
    executeRemoveRefConstraints(tm.getJooq(), oldColumn);
    // remove refBacks if exist
    executeRemoveRefback(oldColumn, newColumn);
    // add ontology table if needed
    if (newColumn.isOntology()) {
        createOntologyTable(newColumn);
    }
    // rename and retype if needed
    executeAlterType(tm.getJooq(), oldColumn, newColumn);
    executeAlterName(tm.getJooq(), oldColumn, newColumn);
    // only applies to key=1
    if ((oldColumn.isPrimaryKey() || newColumn.isPrimaryKey()) && oldColumn.isRequired() && !oldColumn.isRequired() == newColumn.isRequired()) {
        executeSetRequired(tm.getJooq(), newColumn);
    }
    // update the metadata so we can use it for new keys and references
    if (column.getPosition() == null) {
        column.setPosition(tm.columns.get(columnName).getPosition());
    }
    // remove the old
    tm.columns.remove(columnName);
    // add the new
    tm.columns.put(column.getName(), column);
    // reapply ref constrainst
    executeCreateRefConstraints(tm.getJooq(), newColumn);
    // check if refBack constraints need updating
    reapplyRefbackContraints(oldColumn, newColumn);
    // create/update key, if touched
    if (newColumn.getKey() != oldColumn.getKey()) {
        createOrReplaceKey(tm.getJooq(), tm, newColumn.getKey(), tm.getKeyFields(newColumn.getKey()));
    }
    // delete old column if name changed, then save any other metadata changes
    if (!oldColumn.getName().equals(newColumn.getName()))
        deleteColumn(tm.getJooq(), oldColumn);
    saveColumnMetadata(tm.getJooq(), newColumn);
    return tm;
}
Also used : MetadataUtils.deleteColumn(org.molgenis.emx2.sql.MetadataUtils.deleteColumn)

Example 5 with EQUALS

use of org.molgenis.emx2.Operator.EQUALS in project molgenis-emx2 by molgenis.

the class FileApi method getFile.

public static String getFile(Request request, Response response) throws IOException {
    String tableName = request.params("table");
    String columnName = request.params("column");
    String id = request.params("id");
    Schema schema = getSchema(request);
    Table t = schema.getTable(tableName);
    if (t == null) {
        throw new MolgenisException("Download failed: Table '" + tableName + "' not found in schema " + schema.getName());
    }
    Column c = t.getMetadata().getColumn(columnName);
    if (c == null) {
        throw new MolgenisException("Download failed: Column '" + columnName + "' not found in table " + schema.getName() + "." + tableName);
    }
    List<Row> result = t.query().select(t.getMetadata().getPrimaryKeyFields().stream().map(f -> s(f.getName())).toArray(SelectColumn[]::new)).select(s(columnName, s("contents"), s("mimetype"), s("extension"))).where(f(columnName, f("id", EQUALS, id))).retrieveRows();
    if (result.size() != 1) {
        throw new MolgenisException("Download failed: file id '" + id + "' not found in table " + tableName);
    }
    String ext = result.get(0).getString(columnName + "_extension");
    String mimetype = result.get(0).getString(columnName + "_mimetype");
    byte[] contents = result.get(0).getBinary(columnName + "_contents");
    response.raw().setHeader("Content-Disposition", "attachment; filename=" + c.getName() + "." + ext);
    response.raw().setContentType(mimetype);
    try (OutputStream out = response.raw().getOutputStream()) {
        // autoclosing
        out.write(contents);
        out.flush();
    }
    return "";
}
Also used : EQUALS(org.molgenis.emx2.Operator.EQUALS) OutputStream(java.io.OutputStream) Spark.get(spark.Spark.get) List(java.util.List) MolgenisWebservice.getSchema(org.molgenis.emx2.web.MolgenisWebservice.getSchema) Request(spark.Request) FilterBean.f(org.molgenis.emx2.FilterBean.f) Response(spark.Response) IOException(java.io.IOException) org.molgenis.emx2(org.molgenis.emx2) SelectColumn.s(org.molgenis.emx2.SelectColumn.s) MolgenisWebservice.getSchema(org.molgenis.emx2.web.MolgenisWebservice.getSchema) OutputStream(java.io.OutputStream)

Aggregations

Test (org.junit.Test)3 MolgenisException (org.molgenis.emx2.MolgenisException)3 Row (org.molgenis.emx2.Row)3 Table (org.molgenis.emx2.Table)3 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 Map (java.util.Map)2 Schema (org.molgenis.emx2.Schema)2 GraphqlException (org.molgenis.emx2.graphql.GraphqlException)2 MetadataUtils.deleteColumn (org.molgenis.emx2.sql.MetadataUtils.deleteColumn)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 GraphQL (graphql.GraphQL)1 OutputStream (java.io.OutputStream)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 List (java.util.List)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 org.molgenis.emx2 (org.molgenis.emx2)1 Column (org.molgenis.emx2.Column)1 ColumnType (org.molgenis.emx2.ColumnType)1