Search in sources :

Example 1 with CreateRelationPojo

use of i5.las2peer.services.noracleService.pojo.CreateRelationPojo in project Distributed-Noracle-Backend by Distributed-Noracle.

the class QuestionRelationsResource method createQuestionRelation.

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_HTML)
@ApiResponses({ @ApiResponse(code = HttpURLConnection.HTTP_CREATED, message = "Relation successfully created"), @ApiResponse(code = HttpURLConnection.HTTP_UNAUTHORIZED, message = "You have to be logged in to create a relation", response = ExceptionEntity.class), @ApiResponse(code = HttpURLConnection.HTTP_INTERNAL_ERROR, message = "Internal Server Error", response = ExceptionEntity.class) })
public Response createQuestionRelation(@PathParam("spaceId") String spaceId, @ApiParam(required = true) CreateRelationPojo createRelationPojo) throws ServiceInvocationException {
    QuestionRelation rel = createQuestionRelation(spaceId, createRelationPojo.getName(), createRelationPojo.getFirstQuestionId(), createRelationPojo.getSecondQuestionId(), createRelationPojo.isDirected());
    try {
        Gson gson = new Gson();
        String createRelationPojoJson = gson.toJson(createRelationPojo);
        JSONParser p = new JSONParser(JSONParser.MODE_PERMISSIVE);
        JSONObject obj = (JSONObject) p.parse(createRelationPojoJson);
        obj.put("spaceId", spaceId);
        obj.put("uid", Context.getCurrent().getMainAgent().getIdentifier());
        Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_3, obj.toJSONString());
        // Try to log training data
        try {
            String from = getQuestionText(createRelationPojo.getFirstQuestionId());
            String to = getQuestionText(createRelationPojo.getSecondQuestionId());
            JSONObject trainingData = new JSONObject();
            trainingData.put("unit", spaceId);
            trainingData.put("from", from);
            trainingData.put("to", to);
            if (createRelationPojo.isDirected())
                Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_40, trainingData.toString());
            else
                Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_41, trainingData.toString());
        } catch (ServiceInvocationException | NullPointerException e) {
            Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_ERROR_40, e.getMessage());
        }
        Question q1 = null;
        Question q2 = null;
        Serializable rmiResult = Context.get().invoke(new ServiceNameVersion(NoracleQuestionService.class.getCanonicalName(), NoracleService.API_VERSION), "getQuestion", createRelationPojo.getFirstQuestionId());
        if (rmiResult instanceof Question) {
            q1 = (Question) rmiResult;
        }
        Serializable rmiResult2 = Context.get().invoke(new ServiceNameVersion(NoracleQuestionService.class.getCanonicalName(), NoracleService.API_VERSION), "getQuestion", createRelationPojo.getSecondQuestionId());
        if (rmiResult instanceof Question) {
            q2 = (Question) rmiResult2;
        }
        if (q1 != null && q2 != null) {
            try {
                Instant timestamp = Instant.parse(q1.getTimestampCreated());
                Instant timestamp2 = Instant.parse(q2.getTimestampCreated());
                if (timestamp.isBefore(timestamp2) && q2.getDepth() < 1) {
                    changeQuestionDepth(q2.getQuestionId(), q1.getDepth() + 1);
                    JSONObject obj2 = new JSONObject();
                    obj2.put("spaceId", spaceId);
                    obj2.put("qid", q2.getQuestionId());
                    obj2.put("uid", Context.getCurrent().getMainAgent().getIdentifier());
                    obj2.put("depth", q1.getDepth() + 1);
                    Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_10, obj2.toJSONString());
                } else {
                    if (q1.getDepth() < 1) {
                        changeQuestionDepth(q1.getQuestionId(), q2.getDepth() + 1);
                        JSONObject obj2 = new JSONObject();
                        obj2.put("spaceId", spaceId);
                        obj2.put("qid", q1.getQuestionId());
                        obj2.put("uid", Context.getCurrent().getMainAgent().getIdentifier());
                        obj2.put("depth", q2.getDepth() + 1);
                        Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_10, obj2.toJSONString());
                    }
                }
            } catch (Exception e) {
            }
        }
        return Response.created(new URI(null, null, SpacesResource.RESOURCE_NAME + "/" + spaceId + "/" + RESOURCE_NAME + "/" + rel.getRelationId(), null)).build();
    } catch (URISyntaxException | ParseException e) {
        throw new InternalServerErrorException(e);
    }
}
Also used : Serializable(java.io.Serializable) Instant(java.time.Instant) Gson(com.google.gson.Gson) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) URISyntaxException(java.net.URISyntaxException) ServiceInvocationException(i5.las2peer.api.execution.ServiceInvocationException) ParseException(net.minidev.json.parser.ParseException) InternalServiceException(i5.las2peer.api.execution.InternalServiceException) JSONObject(net.minidev.json.JSONObject) ServiceNameVersion(i5.las2peer.api.p2p.ServiceNameVersion) JSONParser(net.minidev.json.parser.JSONParser) ParseException(net.minidev.json.parser.ParseException) ServiceInvocationException(i5.las2peer.api.execution.ServiceInvocationException) ApiResponses(io.swagger.annotations.ApiResponses)

Example 2 with CreateRelationPojo

use of i5.las2peer.services.noracleService.pojo.CreateRelationPojo in project Distributed-Noracle-Backend by Distributed-Noracle.

the class QuestionsResource method createRelatedQuestion.

@POST
@Path("/{questionId}/relation")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_HTML)
@ApiResponses({ @ApiResponse(code = HttpURLConnection.HTTP_CREATED, message = "Question successfully created"), @ApiResponse(code = HttpURLConnection.HTTP_BAD_REQUEST, message = "No question text given", response = ExceptionEntity.class), @ApiResponse(code = HttpURLConnection.HTTP_UNAUTHORIZED, message = "You have to be logged in to create a question", response = ExceptionEntity.class), @ApiResponse(code = HttpURLConnection.HTTP_INTERNAL_ERROR, message = "Internal Server Error", response = ExceptionEntity.class) })
public Response createRelatedQuestion(@PathParam("spaceId") String questionSpaceId, @PathParam("questionId") String fquestionId, @ApiParam(required = true) CreateQuestionPojo createQuestionPojo) throws ServiceInvocationException {
    Question question = createQuestion(questionSpaceId, createQuestionPojo.getText());
    try {
        // CREATE QUESTION
        Gson gson = new Gson();
        String createQuestionPojoJson = gson.toJson(createQuestionPojo);
        JSONParser p = new JSONParser(JSONParser.MODE_PERMISSIVE);
        JSONObject obj = new JSONObject();
        JSONObject attributes = new JSONObject();
        obj.put("functionName", "createQuestion");
        obj.put("serviceAlias", "distributed-noracle");
        obj.put("uid", Context.getCurrent().getMainAgent().getIdentifier());
        obj.put("qid", question.getQuestionId());
        attributes.put("spaceId", questionSpaceId);
        attributes.put("body", p.parse(createQuestionPojoJson));
        attributes.put("result", question.getQuestionId());
        obj.put("attributes", attributes);
        Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_5, obj.toJSONString());
        // CREATE RELATION
        CreateRelationPojo createRelationPojo = new CreateRelationPojo();
        createRelationPojo.setDirected(true);
        createRelationPojo.setFirstQuestionId(fquestionId);
        createRelationPojo.setSecondQuestionId(question.getQuestionId());
        createRelationPojo.setName("FollowUp");
        // createRelationPojo.isDirected());
        try {
            String createRelationPojoJson = gson.toJson(createRelationPojo);
            obj = (JSONObject) p.parse(createRelationPojoJson);
            obj.put("spaceId", questionSpaceId);
            obj.put("uid", Context.getCurrent().getMainAgent().getIdentifier());
            Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_3, obj.toJSONString());
            // Try to log training data
            try {
                String from = getQuestionText(createRelationPojo.getFirstQuestionId());
                String to = getQuestionText(createRelationPojo.getSecondQuestionId());
                JSONObject trainingData = new JSONObject();
                trainingData.put("unit", questionSpaceId);
                trainingData.put("from", from);
                trainingData.put("to", to);
                if (createRelationPojo.isDirected())
                    Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_40, trainingData.toString());
                else
                    Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_41, trainingData.toString());
            } catch (ServiceInvocationException | NullPointerException e) {
                Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_ERROR_40, e.getMessage());
            }
            Question q1 = null;
            Question q2 = null;
            Serializable rmiResult = Context.get().invoke(new ServiceNameVersion(NoracleQuestionService.class.getCanonicalName(), NoracleService.API_VERSION), "getQuestion", createRelationPojo.getFirstQuestionId());
            if (rmiResult instanceof Question) {
                q1 = (Question) rmiResult;
            }
            Serializable rmiResult2 = Context.get().invoke(new ServiceNameVersion(NoracleQuestionService.class.getCanonicalName(), NoracleService.API_VERSION), "getQuestion", createRelationPojo.getSecondQuestionId());
            if (rmiResult instanceof Question) {
                q2 = (Question) rmiResult2;
            }
            if (q1 != null && q2 != null) {
                try {
                    Instant timestamp = Instant.parse(q1.getTimestampCreated());
                    Instant timestamp2 = Instant.parse(q2.getTimestampCreated());
                    if (timestamp.isBefore(timestamp2) && q2.getDepth() < 1) {
                        changeQuestionDepth(q2.getQuestionId(), q1.getDepth() + 1);
                        JSONObject obj2 = new JSONObject();
                        obj2.put("spaceId", questionSpaceId);
                        obj2.put("qid", q2.getQuestionId());
                        obj2.put("uid", Context.getCurrent().getMainAgent().getIdentifier());
                        obj2.put("depth", q1.getDepth() + 1);
                        Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_10, obj2.toJSONString());
                    } else {
                        if (q1.getDepth() < 1) {
                            changeQuestionDepth(q1.getQuestionId(), q2.getDepth() + 1);
                            JSONObject obj2 = new JSONObject();
                            obj2.put("spaceId", questionSpaceId);
                            obj2.put("qid", q1.getQuestionId());
                            obj2.put("uid", Context.getCurrent().getMainAgent().getIdentifier());
                            obj2.put("depth", q2.getDepth() + 1);
                            Context.get().monitorEvent(MonitoringEvent.SERVICE_CUSTOM_MESSAGE_10, obj2.toJSONString());
                        }
                    }
                } catch (Exception e) {
                }
            }
        } catch (ParseException e) {
            throw new InternalServerErrorException(e);
        }
        return Response.created(new URI(null, null, SpacesResource.RESOURCE_NAME + "/" + questionSpaceId + "/" + RESOURCE_NAME + "/" + question.getQuestionId(), null)).build();
    } catch (URISyntaxException | ParseException e) {
        throw new InternalServerErrorException(e);
    }
}
Also used : Serializable(java.io.Serializable) Instant(java.time.Instant) Gson(com.google.gson.Gson) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) URISyntaxException(java.net.URISyntaxException) ServiceInvocationException(i5.las2peer.api.execution.ServiceInvocationException) ParseException(net.minidev.json.parser.ParseException) InternalServiceException(i5.las2peer.api.execution.InternalServiceException) CreateRelationPojo(i5.las2peer.services.noracleService.pojo.CreateRelationPojo) JSONObject(net.minidev.json.JSONObject) ServiceNameVersion(i5.las2peer.api.p2p.ServiceNameVersion) JSONParser(net.minidev.json.parser.JSONParser) ParseException(net.minidev.json.parser.ParseException) ServiceInvocationException(i5.las2peer.api.execution.ServiceInvocationException) ApiResponses(io.swagger.annotations.ApiResponses)

Aggregations

Gson (com.google.gson.Gson)2 InternalServiceException (i5.las2peer.api.execution.InternalServiceException)2 ServiceInvocationException (i5.las2peer.api.execution.ServiceInvocationException)2 ServiceNameVersion (i5.las2peer.api.p2p.ServiceNameVersion)2 ApiResponses (io.swagger.annotations.ApiResponses)2 Serializable (java.io.Serializable)2 URI (java.net.URI)2 URISyntaxException (java.net.URISyntaxException)2 Instant (java.time.Instant)2 JSONObject (net.minidev.json.JSONObject)2 JSONParser (net.minidev.json.parser.JSONParser)2 ParseException (net.minidev.json.parser.ParseException)2 CreateRelationPojo (i5.las2peer.services.noracleService.pojo.CreateRelationPojo)1