package org.openlca.jsonld.input; import org.openlca.core.model.ModelType; import org.openlca.core.model.ParameterRedef; import org.openlca.core.model.Process; import org.openlca.core.model.ProductSystem; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; public class ProductSystemImport extends BaseImport<ProductSystem> { private ProductSystemImport(String refId, ImportConfig conf) { super(ModelType.PRODUCT_SYSTEM, refId, conf); } static ProductSystem run(String refId, ImportConfig conf) { return new ProductSystemImport(refId, conf).run(); } @Override ProductSystem map(JsonObject json, long id) { if (json == null) return null; ProductSystem s = new ProductSystem(); In.mapAtts(json, s, id, conf); String processRefId = In.getRefId(json, "referenceProcess"); if (processRefId != null) s.setReferenceProcess(ProcessImport.run(processRefId, conf)); s.setTargetAmount(In.getDouble(json, "targetAmount", 1d)); addProcesses(json, s); addParameters(json, s); importLinkRefs(json, s); ProductSystemExchanges.map(json, conf, s); return conf.db.put(s); } private void addProcesses(JsonObject json, ProductSystem s) { JsonArray array = In.getArray(json, "processes"); if (array == null || array.size() == 0) return; for (JsonElement element : array) { JsonObject ref = element.getAsJsonObject(); String refId = In.getString(ref, "@id"); Process p = ProcessImport.run(refId, conf); if (p != null) s.getProcesses().add(p.getId()); } } private void importLinkRefs(JsonObject json, ProductSystem s) { JsonArray array = In.getArray(json, "processLinks"); if (array == null || array.size() == 0) return; for (JsonElement element : array) { JsonObject obj = element.getAsJsonObject(); String providerRefId = In.getRefId(obj, "provider"); ProcessImport.run(providerRefId, conf); String processRefId = In.getRefId(obj, "process"); ProcessImport.run(processRefId, conf); String flowRefId = In.getRefId(obj, "flow"); FlowImport.run(flowRefId, conf); } } private void addParameters(JsonObject json, ProductSystem s) { JsonArray array = In.getArray(json, "parameterRedefs"); if (array == null || array.size() == 0) return; for (JsonElement element : array) { JsonObject ref = element.getAsJsonObject(); ParameterRedef p = new ParameterRedef(); p.setName(In.getString(ref, "name")); p.setValue(In.getDouble(ref, "value", 0)); p.setUncertainty(Uncertainties.read(In .getObject(ref, "uncertainty"))); JsonObject context = In.getObject(ref, "context"); if (context == null) { s.getParameterRedefs().add(p); continue; } String type = In.getString(context, "@type"); if (!Process.class.getSimpleName().equals(type)) continue; String refId = In.getString(context, "@id"); Process model = ProcessImport.run(refId, conf); if (model == null) continue; p.setContextType(ModelType.PROCESS); p.setContextId(model.getId()); s.getParameterRedefs().add(p); } } }