/*******************************************************************************
* 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.*;
import javax.ejb.*;
import javax.inject.Inject;
import javax.json.Json;
import javax.json.stream.*;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* The type ProjectWebSocketServerEndpoint
*
* @author Peter Pilgrim (peter)
*/
@ServerEndpoint("/sockets")
@Stateless
public class ProjectWebSocketServerEndpoint {
static SimpleDateFormat FMT =
new SimpleDateFormat("dd-MMM-yyyy");
@Inject ProjectTaskService service;
@OnMessage
public String retrieveProjectAndTasks(String message) {
int projectId = Integer.parseInt(message.trim());
List<Project> projects =
service.findProjectById(projectId);
StringWriter swriter = new StringWriter();
JsonGeneratorFactory factory =
Json.createGeneratorFactory(
new HashMap<String, Object>(){{
put(JsonGenerator.PRETTY_PRINTING, true);
}});
JsonGenerator generator = factory.createGenerator(swriter);
generator.writeStartArray();
for ( Project project: projects ) {
generator.writeStartObject()
.write("id", project.getId())
.write("name", project.getName())
.writeStartArray("tasks");
for ( Task task: project.getTasks()) {
generator.writeStartObject()
.write("id", task.getId())
.write("name", task.getName())
.write("targetDate",
task.getTargetDate() == null ? "" :
FMT.format(task.getTargetDate()))
.write("completed", task.isCompleted())
.writeEnd();
}
generator.writeEnd().writeEnd();
}
generator.writeEnd().close();
return swriter.toString();
}
@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);
}
}