package org.simantics.district.network.techtype.requests; import java.util.UUID; import org.simantics.Simantics; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.procedure.adapter.TransientCacheListener; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.PossibleActiveModel; import org.simantics.db.layer0.util.Layer0Utils; import org.simantics.district.network.ontology.DistrictNetworkResource; import org.simantics.layer0.Layer0; public final class WriteTechTypeTable extends WriteRequest { private final String data; private final Resource componentType; public WriteTechTypeTable(Resource componentType, String data) { this.data = data; this.componentType = componentType; } @Override public void perform(WriteGraph graph) throws DatabaseException { Layer0 L0 = Layer0.getInstance(graph); DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); Resource model = graph.syncRequest(new PossibleActiveModel(Simantics.getProjectResource())); if (model == null) throw new DatabaseException("No active model for storing tech type data"); Resource ttt = graph.syncRequest(new PossibleTechTypeTable(model, componentType), TransientCacheListener.instance()); graph.getSession().markUndoPoint(); if (ttt == null) { ttt = graph.newResource(); graph.claim(ttt, L0.InstanceOf, DN.TechType_TechTypeTable); graph.claimLiteral(ttt, L0.HasName, UUID.randomUUID().toString()); graph.claim(model, L0.ConsistsOf, ttt); graph.claim(ttt, DN.TechType_TechTypeTable_HasComponentType, componentType); Layer0Utils.addCommentMetadata(graph, "Create tech type table"); } else { graph.deny(ttt, DN.TechType_TechTypeTable_HasEnabledItems); Layer0Utils.addCommentMetadata(graph, "Update tech type table"); } graph.claimLiteral(ttt, DN.TechType_TechTypeTable_HasData, data); } }