/******************************************************************************* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2013,2014 by Peter Pilgrim, Addiscombe, Surrey, XeNoNiQUe UK * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU GPL v3.0 * which accompanies this distribution, and is available at: * http://www.gnu.org/licenses/gpl-3.0.txt * * Developers: * Peter Pilgrim -- design, development and implementation * -- Blog: http://www.xenonique.co.uk/blog/ * -- Twitter: @peter_pilgrim * * Contributors: * *******************************************************************************/ package je7hb.intro.xentracker.control; import je7hb.intro.xentracker.boundary.ProjectTaskService; import je7hb.intro.xentracker.entity.Project; import je7hb.intro.xentracker.entity.Task; import javax.ejb.Stateless; import javax.inject.Inject; import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonReader; import javax.json.stream.JsonGenerator; import javax.json.stream.JsonGeneratorFactory; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.io.StringReader; import java.util.HashMap; import java.util.List; /** * The type ProjectWebSocketRetrieveEndpoint * * @author Peter Pilgrim (peter) */ @ServerEndpoint("/update-task-status") @Stateless public class ProjectWebSocketUpdateStatusTaskEndpoint { @Inject ProjectTaskService service; static JsonGeneratorFactory jsonGeneratorFactory = Json.createGeneratorFactory( new HashMap<String, Object>() {{ put(JsonGenerator.PRETTY_PRINTING, true); }}); @OnMessage public String updateTaskStatus(String message) { System.out.printf("--++++-- updateTaskStatus(message:%s)\n", message); System.out.flush(); final StringReader stringReader = new StringReader(message); final JsonReader reader = Json.createReader(stringReader); final JsonObject obj = reader.readObject(); if ( !obj.containsKey("projectId")) { return "json object does not have `projectId' key"; } if ( !obj.containsKey("taskId")) { return "json object does not have `taskId' key"; } if ( !obj.containsKey("completed")) { return "json object does not have `completed' key"; } final int projectId = obj.getInt("projectId"); final int taskId = obj.getInt("taskId"); final boolean completed = obj.getBoolean("completed"); final List<Project> projects = service.findProjectById(projectId); if ( !projects.isEmpty()) { for ( Task task: projects.get(0).getTasks()) { if ( task.getId() == taskId) { task.setCompleted(completed); service.saveProject(task.getProject()); return "OK"; } } } return "NOT FOUND"; } @OnOpen public void open( Session session ) { System.out.printf("%s.open( session=%s )\n", getClass().getSimpleName(), session ); } @OnClose public void close( Session session ) { System.out.printf("%s.close( session=%s )\n", getClass().getSimpleName(), session ); } @OnError public void error( Session session, Throwable error ){ System.err.printf("%s.onError( session=%s, error=%s )\n", getClass().getSimpleName(), session, error); error.printStackTrace(System.err); } }