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;
}
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;
}
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);
}
}
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);
}
}
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;
}
Aggregations