use of i5.las2peer.api.p2p.ServiceNameVersion in project Distributed-Noracle-Backend by Distributed-Noracle.
the class NoracleQuestionService method createQuestion.
@Override
public Question createQuestion(String questionSpaceId, String text) throws ServiceInvocationException {
Agent mainAgent = Context.get().getMainAgent();
if (questionSpaceId == null || questionSpaceId.isEmpty()) {
throw new InvocationBadArgumentException("No question space id given");
} else if (text == null || text.isEmpty()) {
throw new InvocationBadArgumentException("No question text given");
} else if (mainAgent instanceof AnonymousAgent) {
throw new ServiceNotAuthorizedException("You have to be logged in to create a question");
}
Space targetSpace;
Serializable rmiResult = Context.get().invoke(new ServiceNameVersion(NoracleSpaceService.class.getCanonicalName(), NoracleService.API_VERSION), "getSpace", questionSpaceId);
if (rmiResult instanceof Space) {
targetSpace = (Space) rmiResult;
} else {
throw new InternalServiceException("Unexpected result (" + rmiResult.getClass().getCanonicalName() + ") of RMI call");
}
String targetReaderGroupId = targetSpace.getSpaceReaderGroupId();
GroupAgent targetReaderGroup;
try {
targetReaderGroup = (GroupAgent) Context.get().requestAgent(targetReaderGroupId, mainAgent);
} catch (AgentNotFoundException | AgentOperationFailedException e) {
throw new InternalServiceException("Could not fetch reader group agent for space", e);
} catch (ClassCastException e) {
throw new InternalServiceException("Agent for space reader group is not a GroupAgent", e);
} catch (AgentAccessDeniedException e) {
throw new ServiceAccessDeniedException("Agent not in space reader group", e);
}
String questionId = buildQuestionId();
Envelope env;
try {
env = Context.get().createEnvelope(getQuestionEnvelopeIdentifier(questionId), mainAgent);
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope Access Denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not create envelope for question", e);
}
env.addReader(targetReaderGroup);
Question question = new Question(questionId, text, questionSpaceId, mainAgent.getIdentifier(), Instant.now().toString());
env.setContent(question);
try {
Context.get().storeEnvelope(env, mainAgent);
} catch (EnvelopeAccessDeniedException e) {
throw new ServiceAccessDeniedException("Envelope Access Denied");
} catch (EnvelopeOperationFailedException e) {
throw new InternalServiceException("Could not store question envelope", e);
}
if (questionSpaceId != null && !questionSpaceId.isEmpty()) {
linkQuestionToSpace(questionSpaceId, questionId);
}
return question;
}
use of i5.las2peer.api.p2p.ServiceNameVersion 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.api.p2p.ServiceNameVersion 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.api.p2p.ServiceNameVersion 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;
}
use of i5.las2peer.api.p2p.ServiceNameVersion in project Distributed-Noracle-Backend by Distributed-Noracle.
the class RelationVotesResource method getAllVotes.
@Override
public VoteList getAllVotes(String objectId) throws ServiceInvocationException {
Serializable rmiResult = Context.get().invoke(new ServiceNameVersion(NoracleVoteService.class.getCanonicalName(), NoracleService.API_VERSION), "getAllVotes", objectId);
VoteList vote;
if (rmiResult instanceof VoteList) {
vote = (VoteList) rmiResult;
} else {
throw new InternalServiceException("Unexpected result (" + rmiResult.getClass().getCanonicalName() + ") of RMI call");
}
return vote;
}
Aggregations