Code Search for Developers
 
 
  

ProjectWhiteBoard.java from MASE: Agile Software Engineering at Krugle


Show ProjectWhiteBoard.java syntax highlighted

package ucalgary.ebe.webui.client.ui;

import java.util.HashMap;
import java.util.Vector;

import ucalgary.ebe.webui.client.WebUI2ServiceConnection;
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 com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FocusListener;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTMLTable;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.Widget;

public class ProjectWhiteBoard extends Tree {
	
	private static final String FLOAT_PATTERN = "\\d+(\\.{1}\\d+)?";
	private static final String TIMESTAMP_PATTERN = "(\\d){4}-(\\d){2}-(\\d){2}(\\s(\\d){2}:(\\d){2}:(\\d){2}(\\.\\d{1,9})?)?";
	
	private WebUI2ServiceConnection con;
	private HashMap lookup = new HashMap();
	
	public ProjectWhiteBoard(WebUI2ServiceConnection con, ProjectWeb project) {
		super();
		this.con = con;
		this.createProjectTree(project);
	}
	

	/**
	 * Creates a tree with the project data received from the webservice
	 * 
	 * @param project
	 * @return
	 */
	private void createProjectTree(ProjectWeb project) {
		
		Grid prjgrid = new Grid(1, 2);
		
		prjgrid.setBorderWidth(1);
		
		//ADD PROJECT ICON
		Image prj_image = new Image("images/icon_new_project.gif");
		prj_image.addClickListener(new ClickListener() {

			public void onClick(Widget sender) {
				// TODO Auto-generated method stub
				System.out.println("Edit project");
			}
			
		});
		prjgrid.setWidget(0, 0, prj_image);
		
		
		//ADD PROJECT NAME TEXTBOX
		TextBoxWithID prj_name_textbox = new TextBoxWithID(project.getId());
		prj_name_textbox.setText(project.getName());
		prj_name_textbox.addFocusListener(new FocusListener() {

			public void onChange(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				getConnection().updateProjectName(tb.getId(), tb.getText());
			}

			public void onFocus(Widget sender) {
				// TODO Auto-generated method stub
				
			}

			public void onLostFocus(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				getConnection().updateProjectName(tb.getId(), tb.getText());				
			}
			
		});
		prjgrid.setWidget(0, 1, prj_name_textbox);

		TreeItem prj = new TreeItem(prjgrid);

		this.addItem(prj);

		// CREATE ITEM FOR BACKLOG
		prj.addItem(this.createBacklogItem(project.getBacklog()));

		Vector iterations = project.getIterationChildren();

		// CREATE ITEMS FOR ALL ITERATIONS
		for (int i = 0; i < project.getIterationChildren().size(); i++) {
			prj.addItem(this.createIterationItem((IterationWeb)iterations.get(i)));
		}

	}
	

	/**
	 * Creates treeitems for every iteration and the storycards in that
	 * iteration
	 * 
	 * @param iteration
	 * @param prj
	 * @return
	 */
	private TreeItem createIterationItem(IterationWeb iteration) {
		Grid itergrid = new Grid(2, 7);
		itergrid.setBorderWidth(1);
		
		itergrid.setText(0, 1, "Name");
		itergrid.setText(0, 2, "Description");
		itergrid.setText(0, 3, "End");
		itergrid.setText(0, 4, "Available");
		
		
		//ADD ITERATION ICON
		Image iter_image = new Image("images/icon_iteration.gif");
		iter_image.addClickListener(new ClickListener() {

			public void onClick(Widget sender) {
				System.out.println("Edit iteration");
			}
			
		});
		itergrid.setWidget(1, 0, iter_image);
		

		//ADD ITERATION NAME TEXTBOX
		TextBoxWithID itername_textbox = new TextBoxWithID(iteration.getId());
		itername_textbox.setText(iteration.getName());
		itername_textbox.addFocusListener(new FocusListener() {

			public void onChange(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				getConnection().updateIterationName(tb.getId(), tb.getText());
			}

			public void onFocus(Widget sender) {
				// TODO Auto-generated method stub
				
			}

			public void onLostFocus(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				getConnection().updateIterationName(tb.getId(), tb.getText());				
			}
			
		});
		itergrid.setWidget(1, 1, itername_textbox);
		
		
		//ADD ITERATION DESCRIPTION TEXTBOX
		TextBoxWithID iterdesc_textbox = new TextBoxWithID(iteration.getId());
		iterdesc_textbox.setText(iteration.getDescription());
		iterdesc_textbox.addFocusListener(new FocusListener() {

			public void onChange(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				getConnection().updateIterationDescription(tb.getId(), tb.getText());
			}

			public void onFocus(Widget sender) {
				// TODO Auto-generated method stub
				
			}

			public void onLostFocus(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				getConnection().updateIterationDescription(tb.getId(), tb.getText());
				
			}
			
		});
		itergrid.setWidget(1, 2, iterdesc_textbox);

		//TODO define regex for floats and timestamps to ensure proper input
		//ADD ITERATION ENDDATE TEXTBOX
		TextBoxWithID iterend_textbox = new TextBoxWithID(iteration.getId(), iteration.getEndDate());
		iterend_textbox.setText(iteration.getEndDate());
		iterend_textbox.addChangeListener(new ChangeListener() {

			public void onChange(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				
				if(!tb.getText().matches(TIMESTAMP_PATTERN)) {
					tb.setText(tb.getContent());
				} else {		
					tb.setContent(tb.getText());
					getConnection().updateIterationEndDate(tb.getId(), tb.getText());
				}
			}

			public void onFocus(Widget sender) {
				// TODO Auto-generated method stub
				
			}

			public void onLostFocus(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				
				if(!tb.getText().matches(TIMESTAMP_PATTERN)) {
					tb.setText(tb.getContent());
				} else {		
					tb.setContent(tb.getText());
					getConnection().updateIterationEndDate(tb.getId(), tb.getText());
				}
			}
			
		});
		itergrid.setWidget(1, 3, iterend_textbox);
		
		//TODO define regex for floats and timestamps to ensure proper input
		//ADD ITERATION AVAILABLE EFFORT TEXTBOX
		TextBoxWithID iteravail_textbox = new TextBoxWithID(iteration.getId(), String.valueOf(iteration.getAvailableEffort()));
		iteravail_textbox.setText(String.valueOf(iteration.getAvailableEffort()));
		iteravail_textbox.addChangeListener(new ChangeListener() {

			public void onChange(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				
				if(!tb.getText().matches(FLOAT_PATTERN)) {
					tb.setText(tb.getContent());
				} else {
					tb.setContent(tb.getText());
					getConnection().updateIterationAvailableEffort(tb.getId(), Float.valueOf(tb.getText()).floatValue());
				}
			}

			public void onFocus(Widget sender) {
				// TODO Auto-generated method stub
				
			}

			public void onLostFocus(Widget sender) {
				TextBoxWithID tb = (TextBoxWithID)sender;
				
				if(!tb.getText().matches(FLOAT_PATTERN)) {
					tb.setText(tb.getContent());
				} else {
					tb.setContent(tb.getText());
					getConnection().updateIterationAvailableEffort(tb.getId(), Float.valueOf(tb.getText()).floatValue());
				}
			}
			
		});
		itergrid.setWidget(1, 4, iteravail_textbox);
		
		
		//ADD COMPLETE ICON
		ImageWithID iter_complete_image = new ImageWithID("images/icon_complete.gif", iteration.getId());
		iter_complete_image.addClickListener(new ClickListener() {

			public void onClick(Widget sender) {
				ImageWithID img = (ImageWithID)sender;
				getConnection().updateIterationComplete(img.getId(), true);
			}
			
		});
		itergrid.setWidget(1, 5, iter_complete_image);
		
		
		//ADD DELETE ICON
		ImageWithID iter_delete_image = new ImageWithID("images/icon_delete.gif", iteration.getId());
		iter_delete_image.addClickListener(new ClickListener() {

			public void onClick(Widget sender) {
				ImageWithID img = (ImageWithID)sender;
				getConnection().deleteIteration(img.getId());
				((TreeItem)lookup.get(new Long(img.getId()))).remove();
			}
			
		});
		itergrid.setWidget(1, 6, iter_delete_image);
				
		
		TreeItem iter = new TreeItem(itergrid);

		this.lookup.put(new Long(iteration.getId()), iter);
		
		// CREATE ITEMS FOR ALL STORYCARDS IN ITERATION		
		iter.addItem(new StoryCardGrid(con, iteration.getStoryCardChildren()));

		return iter;
	}
	

	/**
	 * Creates treeitem for the backlog and every storycard in the backlog
	 * 
	 * @param backlog
	 * @param prj
	 * @return
	 */
	private TreeItem createBacklogItem(BacklogWeb backlog) {
		Grid backgrid = new Grid(1, 4);
		backgrid.setBorderWidth(1);
		
		
		//ADD BACKLOG ICON
		Image back_image = new Image("images/icon_product_backlog.gif");
		back_image.addClickListener(new ClickListener() {

			public void onClick(Widget sender) {
				// TODO Auto-generated method stub
				System.out.println("Edit Backlog");
			}
			
		});
		backgrid.setWidget(0, 0, back_image);
		
		
		backgrid.setText(0, 1, backlog.getName());
		backgrid.setText(0, 2, backlog.getDescription());

		
		//ADD DELETE ICON
		ImageWithID delete_back_image = new ImageWithID("images/icon_delete.gif", backlog.getId());
		delete_back_image.addClickListener(new ClickListener() {

			public void onClick(Widget sender) {
				ImageWithID img = (ImageWithID)sender;
//				getConnection().deleteBacklog(img.getId());
			}
			
		});
		backgrid.setWidget(0, 3, delete_back_image);
		TreeItem back = new TreeItem(backgrid);
		
		this.lookup.put(new Long(backlog.getId()), back);
		
		// CREATE ITEMS FOR ALL STORYCARDS IN BACKLOG
		back.addItem(new StoryCardGrid(con, backlog.getStoryCardChildren()));

		return back;
	}

	
	public WebUI2ServiceConnection getConnection() {
		return this.con;
	}
	
	public HashMap getLookUp() {
		return this.lookup;
	}
	
	public void addStoryCard(StoryCardWeb storycard) {
		try {
			Long parentid = new Long(storycard.getParent());
			TreeItem parent = (TreeItem) this.lookup.get(parentid);
			TreeItem item = parent.getChild(0);
			StoryCardGrid storycards = (StoryCardGrid)item.getWidget(); 
			storycards.addStoryCard(storycard);
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void addIteration(IterationWeb iteration) {
		this.getItem(0).addItem(createIterationItem(iteration));
	}
	
	public void addBacklog(BacklogWeb backlog) {
		this.getItem(0).addItem(createBacklogItem(backlog));
	}

}




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

  CreateIterationDialogBox.java
  CreateProjectDialogBox.java
  CreateStoryCardDialogBox.java
  FloatTextBoxWithID.java
  ImageWithID.java
  ProjectListBox.java
  ProjectWhiteBoard.java
  StoryCardGrid.java
  StoryCardParentListBox.java
  TextBoxWithID.java
  TimestampTextBoxWithID.java
  WebUIMenu.java