package scrum.client.admin;
import ilarkesto.gwt.client.AMultiSelectionViewEditWidget;
import ilarkesto.gwt.client.Gwt;
import ilarkesto.gwt.client.TableBuilder;
import ilarkesto.gwt.client.editor.TextEditorWidget;
import java.util.List;
import scrum.client.Dao;
import scrum.client.ScrumGwt;
import scrum.client.common.ABlockWidget;
import scrum.client.common.BlockHeaderWidget;
import scrum.client.common.BlockWidgetFactory;
import scrum.client.project.DeleteProjectAction;
import scrum.client.project.OpenProjectAction;
import scrum.client.project.Project;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
public class ProjectBlock extends ABlockWidget<Project> {
private Label lastOpenedLabel;
@Override
protected void onInitializationHeader(BlockHeaderWidget header) {
Project project = getObject();
lastOpenedLabel = header.appendCenterSuffix("");
header.addToolbarAction(new OpenProjectAction(project));
header.addMenuAction(new DeleteProjectAction(project));
}
@Override
protected void onUpdateHeader(BlockHeaderWidget header) {
Project project = getObject();
header.setDragHandle("prj");
header.setCenter(project.getLabel());
lastOpenedLabel.setText(ScrumGwt.getPeriodToAsShortestString("last opened ",
project.getLastOpenedDateAndTime(), " ago"));
}
@Override
protected Widget onExtendedInitialization() {
final Project project = getObject();
TableBuilder tb = ScrumGwt.createFieldTable();
tb.addFieldRow("Name", new TextEditorWidget(project.getLabelModel()));
tb.addFieldRow("Support Email", project.getSupportEmailModel());
tb.addFieldRow("Vision", new TextEditorWidget(project.getVisionModel()));
tb.addFieldRow("Participants", new AMultiSelectionViewEditWidget<User>() {
@Override
protected void onViewerUpdate() {
setViewerItems(project.getParticipants());
}
@Override
protected void onEditorUpdate() {
List<User> users = Dao.get().getUsersByDisabled(false);
users.addAll(project.getParticipants());
setEditorItems(users);
setEditorSelectedItems(project.getParticipants());
}
@Override
protected void onEditorSubmit() {
project.setParticipantsConfigured(getEditorSelectedItems());
}
@Override
public boolean isEditable() {
return project.isEditable();
}
});
tb.addFieldRow("Admins", new AMultiSelectionViewEditWidget<User>() {
@Override
protected void onViewerUpdate() {
setViewerItems(project.getAdmins());
}
@Override
protected void onEditorUpdate() {
setEditorItems(project.getParticipants());
setEditorSelectedItems(project.getAdmins());
}
@Override
protected void onEditorSubmit() {
project.setAdmins(getEditorSelectedItems());
}
@Override
public boolean isEditable() {
return project.isEditable();
}
});
addRolesFieldRows(project, tb);
if (project.isAdmin(getCurrentUser())) {
tb.addFieldRow("",
Gwt.createServletDownloadLink("backupDownload.zip?projectId=" + project.getId(), "Download Backup ZIP"));
}
return tb.createTable();
}
public static void addRolesFieldRows(final Project project, TableBuilder tb) {
tb.addFieldRow("Product Owner", new AMultiSelectionViewEditWidget<User>() {
@Override
protected void onViewerUpdate() {
setViewerItems(project.getProductOwners());
}
@Override
protected void onEditorUpdate() {
setEditorItems(project.getParticipants());
setEditorSelectedItems(project.getProductOwners());
}
@Override
protected void onEditorSubmit() {
project.setProductOwners(getEditorSelectedItems());
}
@Override
public boolean isEditable() {
return project.isEditable();
}
});
tb.addFieldRow("Scrum Master", new AMultiSelectionViewEditWidget<User>() {
@Override
protected void onViewerUpdate() {
setViewerItems(project.getScrumMasters());
}
@Override
protected void onEditorUpdate() {
setEditorItems(project.getParticipants());
setEditorSelectedItems(project.getScrumMasters());
}
@Override
protected void onEditorSubmit() {
project.setScrumMasters(getEditorSelectedItems());
}
@Override
public boolean isEditable() {
return project.isEditable();
}
});
tb.addFieldRow("Development Team", new AMultiSelectionViewEditWidget<User>() {
@Override
protected void onViewerUpdate() {
setViewerItems(project.getTeamMembers());
}
@Override
protected void onEditorUpdate() {
setEditorItems(project.getParticipants());
setEditorSelectedItems(project.getTeamMembers());
}
@Override
protected void onEditorSubmit() {
project.setTeamMembers(getEditorSelectedItems());
}
@Override
public boolean isEditable() {
return project.isEditable();
}
});
}
public static final BlockWidgetFactory<Project> FACTORY = new BlockWidgetFactory<Project>() {
@Override
public ProjectBlock createBlock() {
return new ProjectBlock();
}
};
}