All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.molgenis.js.magma.JsMagmaScriptExecutor Maven / Gradle / Ivy

package org.molgenis.js.magma;

import static java.util.Objects.requireNonNull;

import java.util.Map;
import java.util.Set;
import org.molgenis.data.Entity;
import org.molgenis.data.meta.model.AttributeFactory;
import org.molgenis.data.meta.model.EntityType;
import org.molgenis.data.meta.model.EntityTypeFactory;
import org.molgenis.data.support.DynamicEntity;
import org.springframework.stereotype.Service;

/** Executes a JavaScript using the Magma API */
@Service
class JsMagmaScriptExecutor {
  private final JsMagmaScriptEvaluator jsMagmaScriptEvaluator;
  private final EntityTypeFactory entityTypeFactory;
  private final AttributeFactory attributeFactory;

  JsMagmaScriptExecutor(
      JsMagmaScriptEvaluator jsMagmaScriptEvaluator,
      EntityTypeFactory entityTypeFactory,
      AttributeFactory attributeFactory) {
    this.jsMagmaScriptEvaluator = jsMagmaScriptEvaluator;
    this.entityTypeFactory = requireNonNull(entityTypeFactory);
    this.attributeFactory = requireNonNull(attributeFactory);
  }

  /** Execute a JavaScript using the Magma API */
  Object executeScript(String jsScript, Map parameters) {
    EntityType entityType = entityTypeFactory.create("entity");
    Set attributeNames = parameters.keySet();
    attributeNames.forEach(key -> entityType.addAttribute(attributeFactory.create().setName(key)));
    if (attributeNames.iterator().hasNext()) {
      entityType.getAttribute(attributeNames.iterator().next()).setIdAttribute(true);
    }
    Entity entity = new DynamicEntity(entityType);
    parameters.forEach(entity::set);
    return jsMagmaScriptEvaluator.eval(jsScript, entity);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy