Show AgilePlannerWebUIServiceImpl.java syntax highlighted
package ucalgary.ebe.webui.server;
import java.sql.Timestamp;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
import persister.AbstractRoot;
import persister.Backlog;
import persister.ConnectionFailedException;
import persister.CouldNotLoadProjectException;
import persister.ForbiddenOperationException;
import persister.IndexCard;
import persister.IndexCardNotFoundException;
import persister.Iteration;
import persister.NotConnectedException;
import persister.Project;
import persister.StoryCard;
import persister.SynchronousPersister;
import persister.local.PersisterToXML;
import ucalgary.ebe.webui.client.data.BacklogWeb;
import ucalgary.ebe.webui.client.data.IterationWeb;
import ucalgary.ebe.webui.client.data.ProjectWeb;
import ucalgary.ebe.webui.client.data.StoryCardWeb;
import ucalgary.ebe.webui.server.service.AgilePlannerWebUIService;
import ucalgary.ebe.webui.server.service.PersisterException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
public class AgilePlannerWebUIServiceImpl extends RemoteServiceServlet implements AgilePlannerWebUIService {
private static final String ONLY_DATE_TIMESTAMP_PATTERN = "(\\d){4}-(\\d){2}-(\\d){2}";
private static final String COMPLETE_TIMESTAMP_PATTERN = "(\\d){4}-(\\d){2}-(\\d){2}\\s(\\d){2}:(\\d){2}:(\\d){2}\\.\\d{1,9}";
private static final long serialVersionUID = -721448177047087267L;
private Hashtable<Long, AbstractRoot> lookup = new Hashtable<Long, AbstractRoot>();
private SynchronousPersister sp;
public AgilePlannerWebUIServiceImpl()
{
}
//****************************************************************************************
//* LOAD *
//****************************************************************************************
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#loadProject(java.lang.String)
*/
public ProjectWeb loadProject(String name) throws PersisterException, ConnectionFailedException, CouldNotLoadProjectException {
System.out.println("Looking for project file to load in "+System.getProperty("user.dir"));
if(System.getProperty("os.name").equals("Linux"))
{
sp = new PersisterToXML("/opt/projects/default.xml", name);
}
else if(System.getProperty("user.dir").contains("apache"))
{
sp = new PersisterToXML("../webapps/AgilePlannerWebUI/default.xml", name);
}
else
{
sp = new PersisterToXML("default.xml", name);
}
return this.convertProject(sp.getProject());
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#getProjectNames()
*/
public Vector getProjectNames() throws PersisterException {
Vector names = new Vector();
List<String> prjs = new LinkedList<String>();
prjs = sp.getProjectNames();
for(String name : prjs) {
names.add(name);
}
return names;
}
//****************************************************************************************
//* CREATE *
//****************************************************************************************
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#createBacklog()
*/
public BacklogWeb createBacklog() throws PersisterException {
try {
return convertBacklog(sp.createBacklog(Backlog.DEFAULT_WIDTH, Backlog.DEFAULT_HEIGHT,
Backlog.DEFAULT_LOCATION_X, Backlog.DEFAULT_LOCATION_Y));
} catch (ForbiddenOperationException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#createIteration(java.lang.String, java.lang.String, float, java.lang.String, java.lang.String)
*/
public IterationWeb createIteration(String name, String description,
float availableEffort, String startDate, String endDate) throws PersisterException {
return this.convertIteration(sp.createIteration(name, description,
Iteration.DEFAULT_WIDTH, Iteration.DEFAULT_HEIGHT,
Iteration.DEFAULT_LOCATION_X, Iteration.DEFAULT_LOCATION_Y,
availableEffort, convertToTimestamp(startDate), convertToTimestamp(endDate)));
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#createProject(java.lang.String)
*/
public ProjectWeb createProject(String name) throws PersisterException {
return this.convertProject(sp.createProject(name));
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#createStoryCard(java.lang.String, java.lang.String, long, float, float, float, float)
*/
public StoryCardWeb createStoryCard(String name, String description, long parentid, float bestCaseEstimate,
float mostlikelyEstimate, float worstCaseEstimate, float actualEffort) throws PersisterException {
int locationX = ((IndexCard)this.lookup.get(parentid)).getLocationX() + 50;
int locationY = ((IndexCard)this.lookup.get(parentid)).getLocationY() + 50;
try {
return this.convertStoryCard(sp.createStoryCard(name, description,
StoryCard.DEFAULT_WIDTH, StoryCard.DEFAULT_HEIGHT,
locationX, locationY, parentid, bestCaseEstimate, mostlikelyEstimate,
worstCaseEstimate, actualEffort, StoryCard.STATUS_DEFINED));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
//****************************************************************************************
//* DELETE *
//****************************************************************************************
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#deleteIteration(long)
*/
public IterationWeb deleteIteration(long id) throws PersisterException, ForbiddenOperationException {
try {
return this.convertIteration((Iteration) sp.deleteCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#deleteProject(long)
*/
public ProjectWeb deleteProject(long id) throws PersisterException, ForbiddenOperationException {
try {
return this.convertProject((Project) sp.deleteCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#deleteStoryCard(long)
*/
public StoryCardWeb deleteStoryCard(long id) throws PersisterException, ForbiddenOperationException {
try {
return this.convertStoryCard((StoryCard) sp.deleteCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
//****************************************************************************************
//* UPDATE STORYCARD *
//****************************************************************************************
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateStoryCardActualEffort(long, float)
*/
public StoryCardWeb updateStoryCardActualEffort(long id, float actualEffort) throws PersisterException {
try {
((StoryCard) sp.findCard(id)).setActualEffort(actualEffort);
return this.convertStoryCard((StoryCard) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateStoryCardBestCaseEstimate(long, float)
*/
public StoryCardWeb updateStoryCardBestCaseEstimate(long id, float bestCaseEstimate) throws PersisterException {
try {
((StoryCard) sp.findCard(id)).setBestCaseEstimate(bestCaseEstimate);
return this.convertStoryCard((StoryCard) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateStoryCardStatus(long, java.lang.String)
*/
public StoryCardWeb updateStoryCardStatus(long id, String status) throws PersisterException {
try {
sp.findCard(id).setStatus(status);
return this.convertStoryCard((StoryCard) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateStoryCardDescription(long, java.lang.String)
*/
public StoryCardWeb updateStoryCardDescription(long id, String description) throws PersisterException {
try {
sp.findCard(id).setDescription(description);
return this.convertStoryCard((StoryCard) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateStoryCardMostLikelyEstimate(long, float)
*/
public StoryCardWeb updateStoryCardMostLikelyEstimate(long id, float mostlikelyEstimate) throws PersisterException {
try {
((StoryCard) sp.findCard(id)).setMostlikelyEstimate(mostlikelyEstimate);
return this.convertStoryCard((StoryCard) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateStoryCardName(long, java.lang.String)
*/
public StoryCardWeb updateStoryCardName(long id, String name) throws PersisterException {
try {
sp.findCard(id).setName(name);
return this.convertStoryCard((StoryCard) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateStoryCardWorstCaseEstimate(long, float)
*/
public StoryCardWeb updateStoryCardWorstCaseEstimate(long id, float worstCaseEstimate) throws PersisterException {
try {
((StoryCard) sp.findCard(id)).setWorstCaseEstimate(worstCaseEstimate);
return this.convertStoryCard((StoryCard) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
//****************************************************************************************
//* MOVE STORYCARD BETWEEN PARENTS *
//****************************************************************************************/
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#moveStoryCardToNewParent(long, long, long)
*/
public StoryCardWeb moveStoryCardToNewParent(long id, long newparentid) throws PersisterException {
try {
sp.findCard(id).setParent(newparentid);
return this.convertStoryCard((StoryCard) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
//****************************************************************************************
//* UPDATE ITERATION *
//****************************************************************************************
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateIterationAvailableEffort(long, float)
*/
public IterationWeb updateIterationAvailableEffort(long id, float availableEffort) throws PersisterException {
try {
((Iteration) sp.findCard(id)).setAvailableEffort(availableEffort);
return this.convertIteration((Iteration) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateIterationStatus(long, java.lang.String)
*/
public IterationWeb updateIterationStatus(long id, String status) throws PersisterException {
try {
((Iteration) sp.findCard(id)).setStatus(status);
return this.convertIteration((Iteration) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateIterationDescription(long, java.lang.String)
*/
public IterationWeb updateIterationDescription(long id, String description) throws PersisterException {
try {
((Iteration) sp.findCard(id)).setDescription(description);
return this.convertIteration((Iteration) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateIterationEndDate(long, java.lang.String)
*/
public IterationWeb updateIterationEndDate(long id, String endDate) throws PersisterException {
try {
((Iteration) sp.findCard(id)).setEndDate(convertToTimestamp(endDate));
return this.convertIteration((Iteration) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateIterationName(long, java.lang.String)
*/
public IterationWeb updateIterationName(long id, String name) throws PersisterException {
try {
((Iteration) sp.findCard(id)).setName(name);
return this.convertIteration((Iteration) sp.findCard(id));
} catch (IndexCardNotFoundException e) {
PersisterException pe = new PersisterException(e.getMessage(), e.getId());
pe.setStackTrace(e.getStackTrace());
throw pe;
}
}
//****************************************************************************************
//* UPDATE PROJECT *
//****************************************************************************************
/* (non-Javadoc)
* @see ucalgary.ebe.webui.server.service.AgilePlannerWebUIService#updateProjectName(long, java.lang.String)
*/
public ProjectWeb updateProjectName(long id, String name) {
System.out.println("Update Project "+id+" to name "+ name);
return null;
}
//****************************************************************************************
//* CONVERSION PERSISTER FORMAT --> WEBUI FORMAT *
//****************************************************************************************
/**
* @param ts
* @return
*/
private Timestamp convertToTimestamp(String ts) {
if(ts.matches(ONLY_DATE_TIMESTAMP_PATTERN)) {
return Timestamp.valueOf(ts+" 00:00:00.000000000");
} else if(ts.matches(COMPLETE_TIMESTAMP_PATTERN)) {
return Timestamp.valueOf(ts);
} else {
return new Timestamp(System.currentTimeMillis());
}
}
/**
* Converts a timestamp string to yyyy-mm-dd
*
* @param ts
* @return
*/
private String convertTimestampToString(Timestamp ts) {
return ts.toString().split(" ")[0];
}
/**
* Converts the project returned by the persister to a
* web transferable format that can be used by the frontend
*
* @param project
* @return
*/
private ProjectWeb convertProject(Project project) {
this.lookup.put(project.getId(), project);
ProjectWeb prj = new ProjectWeb();
prj.setBacklog(this.convertBacklog(project.getBacklog()));
for(Iteration iteration : project.getIterationChildren()) {
prj.addIteration(this.convertIteration(iteration));
}
return prj;
}
/**
* Converts an iteration from persister to web frontend format
*
* @param iteration
* @return
*/
private IterationWeb convertIteration(Iteration iteration) {
this.lookup.put(iteration.getId(), iteration);
IterationWeb iter = new IterationWeb(iteration.getId(), iteration.getParent(),
iteration.getName(), iteration.getDescription(),
iteration.getAvailableEffort(),
convertTimestampToString(iteration.getStartDate()),
convertTimestampToString(iteration.getEndDate()), iteration.getStatus());
for(StoryCard storycard : iteration.getStoryCardChildren()) {
iter.addStoryCard(this.convertStoryCard(storycard));
}
return iter;
}
/**
* Converts a backlog from persister to web frontend format
*
* @param backlog
* @return
*/
private BacklogWeb convertBacklog(Backlog backlog) {
this.lookup.put(backlog.getId(), backlog);
BacklogWeb back = new BacklogWeb(backlog.getId(), backlog.getParent());
for(StoryCard storycard : backlog.getStoryCardChildren()) {
back.addStoryCard(this.convertStoryCard(storycard));
}
return back;
}
/**
* Converts a storycard from persister to web frontend format
*
* @param storycard
* @return
*/
private StoryCardWeb convertStoryCard(StoryCard storycard) {
this.lookup.put(storycard.getId(), storycard);
StoryCardWeb sc = new StoryCardWeb(storycard.getId(), storycard.getParent(),
storycard.getName(), storycard.getDescription(),
storycard.getBestCaseEstimate(), storycard.getMostlikelyEstimate(),
storycard.getWorstCaseEstimate(), storycard.getActualEffort(),
storycard.getStatus());;
return sc;
}
public BacklogWeb deleteBacklog(long id) throws PersisterException {
// TODO Auto-generated method stub
return null;
}
public StoryCardWeb moveStoryCardToNewParent(long id, long oldparentid, long newparentid) throws PersisterException {
// TODO Auto-generated method stub
return null;
}
}
See more files for this project here