package scrum.client.release; import ilarkesto.gwt.client.Date; import scrum.client.collaboration.EmoticonsWidget; import scrum.client.common.ABlockWidget; import scrum.client.common.AScrumAction; import scrum.client.common.BlockHeaderWidget; import scrum.client.common.BlockWidgetFactory; import scrum.client.dnd.TrashSupport; import scrum.client.img.Img; import scrum.client.journal.ActivateChangeHistoryAction; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; public class ReleaseBlock extends ABlockWidget<Release> implements TrashSupport { private SimplePanel typeIcon; private Label dateLabel; private Label parentLabel; @Override protected void onInitializationHeader(BlockHeaderWidget header) { Release release = getObject(); typeIcon = header.insertPrefixIcon(); dateLabel = header.insertPrefixLabel("160px", true); parentLabel = header.appendCenterSuffix(""); header.appendCell(new EmoticonsWidget(release), null, true, true, null); header.addMenuAction(new CreateBugfixReleaseAction(release)); header.addMenuAction(new ReleaseReleaseAction(release)); header.addMenuAction(new UnreleaseReleaseAction(release)); header.addMenuAction(new CreateBlogEntryAction(release)); header.addMenuAction(new ActivateChangeHistoryAction(release)); header.addMenuAction(new DeleteReleaseAction(release)); } @Override protected void onUpdateHeader(BlockHeaderWidget header) { Release release = getObject(); typeIcon.setWidget(createTypeIcon()); dateLabel.setText(getDateSuffix()); parentLabel.setText(release.isBugfix() ? "Bugfix for " + release.getParentRelease().getLabel() : ""); header.setDragHandle(release.getReference()); header.setCenter(release.getLabel()); } private Image createTypeIcon() { Release release = getObject(); Image image; if (release.isBugfix()) { image = Img.bundle.bugfixRelease().createImage(); image.setTitle("Bugfix Release"); } else { image = Img.bundle.majorRelease().createImage(); image.setTitle("Major Release"); } return image; } private String getDateSuffix() { Release release = getObject(); String dateSuffix = null; Date date = release.getReleaseDate(); if (date != null) { dateSuffix = date.toString(); Date today = Date.today(); if (date.isAfter(today)) { dateSuffix += " (in " + today.getPeriodTo(date).toDays() + " days)"; } else if (date.isBefore(today)) { dateSuffix += " (" + date.getPeriodTo(today).toShortestString() + " ago)"; } else { dateSuffix += " (today)"; } } else { dateSuffix = "unscheduled"; } return dateSuffix; } @Override protected Widget onExtendedInitialization() { return new ReleaseWidget(getObject()); } public AScrumAction getTrashAction() { return new DeleteReleaseAction(getObject()); } public static final BlockWidgetFactory<Release> FACTORY = new BlockWidgetFactory<Release>() { public ReleaseBlock createBlock() { return new ReleaseBlock(); } }; }