Search in sources :

Example 6 with Question

use of i5.las2peer.services.noracleService.model.Question in project Distributed-Noracle-Backend by Distributed-Noracle.

the class NoracleQuestionService method linkQuestionToSpace.

public boolean linkQuestionToSpace(String spaceId, String questionId) {
    int questionNumber;
    for (questionNumber = 1; questionNumber < MAX_QUESTIONS_PER_SPACE; questionNumber++) {
        try {
            Context.get().requestEnvelope(buildSpaceQuestionNumberId(spaceId, questionNumber));
        } catch (EnvelopeNotFoundException e) {
            // found free question number
            break;
        } catch (Exception e) {
        // XXX logging
        }
    }
    try {
        Envelope spaceQuestionEnv = Context.get().createEnvelope(buildSpaceQuestionNumberId(spaceId, questionNumber));
        spaceQuestionEnv.setPublic();
        spaceQuestionEnv.setContent(questionId);
        Context.get().storeEnvelope(spaceQuestionEnv);
        return true;
    } catch (EnvelopeOperationFailedException | EnvelopeAccessDeniedException e) {
        // TODO exception handling
        e.printStackTrace();
    }
    return false;
}
Also used : EnvelopeOperationFailedException(i5.las2peer.api.persistency.EnvelopeOperationFailedException) EnvelopeNotFoundException(i5.las2peer.api.persistency.EnvelopeNotFoundException) EnvelopeAccessDeniedException(i5.las2peer.api.persistency.EnvelopeAccessDeniedException) Envelope(i5.las2peer.api.persistency.Envelope) EnvelopeAccessDeniedException(i5.las2peer.api.persistency.EnvelopeAccessDeniedException) EnvelopeOperationFailedException(i5.las2peer.api.persistency.EnvelopeOperationFailedException) EnvelopeNotFoundException(i5.las2peer.api.persistency.EnvelopeNotFoundException)

Example 7 with Question

use of i5.las2peer.services.noracleService.model.Question in project Distributed-Noracle-Backend by Distributed-Noracle.

the class NoracleQuestionService method getQuestion.

@Override
public Question getQuestion(String questionId) throws ServiceInvocationException {
    if (questionId == null || questionId.isEmpty()) {
        throw new InvocationBadArgumentException("No question id given");
    }
    Envelope env;
    try {
        env = Context.get().requestEnvelope(getQuestionEnvelopeIdentifier(questionId));
    } catch (EnvelopeAccessDeniedException e) {
        throw new ServiceAccessDeniedException("Envelope Access Denied");
    } catch (EnvelopeOperationFailedException e) {
        throw new InternalServiceException("Could not fetch question envelope", e);
    } catch (EnvelopeNotFoundException e) {
        throw new ResourceNotFoundException("Question Not Found");
    }
    Question question = (Question) env.getContent();
    return question;
}
Also used : EnvelopeOperationFailedException(i5.las2peer.api.persistency.EnvelopeOperationFailedException) EnvelopeNotFoundException(i5.las2peer.api.persistency.EnvelopeNotFoundException) Question(i5.las2peer.services.noracleService.model.Question) EnvelopeAccessDeniedException(i5.las2peer.api.persistency.EnvelopeAccessDeniedException) Envelope(i5.las2peer.api.persistency.Envelope)

Example 8 with Question

use of i5.las2peer.services.noracleService.model.Question 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 9 with Question

use of i5.las2peer.services.noracleService.model.Question 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)

Example 10 with Question

use of i5.las2peer.services.noracleService.model.Question in project Distributed-Noracle-Backend by Distributed-Noracle.

the class QuestionsResource method getQuestionText.

private String getQuestionText(String questionId) throws ServiceInvocationException {
    String qText = "";
    Serializable rmiResult = Context.get().invoke(new ServiceNameVersion(NoracleQuestionService.class.getCanonicalName(), NoracleService.API_VERSION), "getQuestion", questionId);
    if (rmiResult instanceof Question)
        qText = ((Question) rmiResult).getText();
    return qText;
}
Also used : Serializable(java.io.Serializable) ServiceNameVersion(i5.las2peer.api.p2p.ServiceNameVersion)

Aggregations

Envelope (i5.las2peer.api.persistency.Envelope)8 EnvelopeAccessDeniedException (i5.las2peer.api.persistency.EnvelopeAccessDeniedException)8 EnvelopeOperationFailedException (i5.las2peer.api.persistency.EnvelopeOperationFailedException)8 ServiceNameVersion (i5.las2peer.api.p2p.ServiceNameVersion)7 EnvelopeNotFoundException (i5.las2peer.api.persistency.EnvelopeNotFoundException)7 Serializable (java.io.Serializable)7 Question (i5.las2peer.services.noracleService.model.Question)6 ApiResponses (io.swagger.annotations.ApiResponses)4 Gson (com.google.gson.Gson)3 ServiceInvocationException (i5.las2peer.api.execution.ServiceInvocationException)3 JSONObject (net.minidev.json.JSONObject)3 JSONParser (net.minidev.json.parser.JSONParser)3 ParseException (net.minidev.json.parser.ParseException)3 InternalServiceException (i5.las2peer.api.execution.InternalServiceException)2 URI (java.net.URI)2 URISyntaxException (java.net.URISyntaxException)2 Instant (java.time.Instant)2 QuestionRelation (i5.las2peer.services.noracleService.model.QuestionRelation)1 Space (i5.las2peer.services.noracleService.model.Space)1 Vote (i5.las2peer.services.noracleService.model.Vote)1