package io.lumify.palantir.mr.mappers; import io.lumify.core.model.properties.LumifyProperties; import io.lumify.core.model.workspace.WorkspaceLumifyProperties; import io.lumify.core.model.workspace.WorkspaceRepository; import io.lumify.core.security.LumifyVisibility; import io.lumify.palantir.model.AWState; import io.lumify.palantir.model.PtGraph; import io.lumify.palantir.util.TryInflaterInputStream; import io.lumify.web.clientapi.model.WorkspaceAccess; import org.apache.hadoop.io.LongWritable; import org.securegraph.EdgeBuilderByVertexId; import org.securegraph.VertexBuilder; import org.securegraph.Visibility; import java.io.IOException; public class PtGraphMapper extends PalantirMapperBase<LongWritable, PtGraph> { private Visibility workspaceOnlyVisibility; @Override protected void setup(Context context) throws IOException, InterruptedException { super.setup(context); workspaceOnlyVisibility = new LumifyVisibility(WorkspaceRepository.VISIBILITY_STRING).getVisibility(); } @Override protected void safeMap(LongWritable key, PtGraph ptGraph, Context context) throws Exception { context.setStatus(key.toString()); byte[] awstateProto = TryInflaterInputStream.inflate(ptGraph.getAwstateProto()); AWState.Wrapper1 awstate = AWState.Wrapper1.parseFrom(awstateProto); String workspaceVertexId = getWorkspaceVertexId(ptGraph); String userId = PtUserMapper.getUserVertexId(ptGraph.getCreatedBy()); getAuthorizationRepository().addAuthorizationToGraph(workspaceVertexId); saveWorkspaceVertex(ptGraph, workspaceVertexId); saveWorkspaceToUserEdge(workspaceVertexId, userId); for (AWState.Vertex v : awstate.getWrapper2().getWrapper3().getVertexList()) { long objectId = v.getVertexInner().getObjectId(); String objectVertexId = PtObjectMapper.getObjectVertexId(objectId); String edgeId = PtGraphObjectMapper.getWorkspaceToEntityEdgeId(workspaceVertexId, objectVertexId); EdgeBuilderByVertexId m = getGraph().prepareEdge(edgeId, workspaceVertexId, objectVertexId, WorkspaceRepository.WORKSPACE_TO_ENTITY_RELATIONSHIP_IRI, workspaceOnlyVisibility); WorkspaceLumifyProperties.WORKSPACE_TO_ENTITY_GRAPH_POSITION_X.setProperty(m, v.getVertexInner().getX(), workspaceOnlyVisibility); WorkspaceLumifyProperties.WORKSPACE_TO_ENTITY_GRAPH_POSITION_Y.setProperty(m, v.getVertexInner().getY(), workspaceOnlyVisibility); m.save(getAuthorizations()); } } private void saveWorkspaceToUserEdge(String workspaceVertexId, String userId) { String edgeId = workspaceVertexId + WorkspaceRepository.WORKSPACE_TO_USER_RELATIONSHIP_IRI + userId; EdgeBuilderByVertexId edgeBuilder = getGraph().prepareEdge(edgeId, workspaceVertexId, userId, WorkspaceRepository.WORKSPACE_TO_USER_RELATIONSHIP_IRI, workspaceOnlyVisibility); WorkspaceLumifyProperties.WORKSPACE_TO_USER_IS_CREATOR.setProperty(edgeBuilder, true, workspaceOnlyVisibility); WorkspaceLumifyProperties.WORKSPACE_TO_USER_ACCESS.setProperty(edgeBuilder, WorkspaceAccess.WRITE.toString(), workspaceOnlyVisibility); edgeBuilder.save(getAuthorizations()); } private void saveWorkspaceVertex(PtGraph ptGraph, String workspaceVertexId) { VertexBuilder m = prepareVertex(workspaceVertexId, workspaceOnlyVisibility); LumifyProperties.CONCEPT_TYPE.setProperty(m, WorkspaceRepository.WORKSPACE_CONCEPT_IRI, workspaceOnlyVisibility); WorkspaceLumifyProperties.TITLE.setProperty(m, ptGraph.getTitle(), workspaceOnlyVisibility); m.save(getAuthorizations()); } public static String getWorkspaceVertexId(PtGraph ptGraph) { return getWorkspaceVertexId(ptGraph.getId()); } public static String getWorkspaceVertexId(long graphId) { return ID_PREFIX + "WORKSPACE_" + graphId; } }