Code Search for Developers
 
 
  

AgilePlannerWebUIServiceImpl.java from MASE: Agile Software Engineering at Krugle


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

MASE: Agile Software Engineering

The MASE project investigates methods to support the coordination and executable acceptance testing of software projects. Keywords: Agile methods, distributed teams, Extreme Programming. See http://ebe.cpsc.ucalgary.ca/ebe for more information.

Project homepage: http://sourceforge.net/projects/mase
Programming language(s): Java,XML
License: other

  service/
    AgilePlannerWebUIService.java
    AgilePlannerWebUIServiceAsync.java
    PersisterException.java
  AgilePlannerWebUIServiceImpl.java