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