Skip to content
This repository has been archived by the owner on Jan 3, 2025. It is now read-only.

Commit

Permalink
Preparing for the next release
Browse files Browse the repository at this point in the history
  • Loading branch information
haiphucnguyen committed Apr 14, 2019
1 parent 3c6fdf1 commit 2549d08
Show file tree
Hide file tree
Showing 16 changed files with 150 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ public class OptionI18nEnum {
@BaseName("common-generic-status")
@LocaleData(value = {@Locale("en-US")}, defaultCharset = "UTF-8")
public enum StatusI18nEnum {
Open, Overdue, Archived, Pending, InProgress, Unresolved, Verified, Resolved, ReOpen, Closed
Open, Overdue, Archived, Pending, InProgress, Unresolved, Verified, Resolved, ReOpen, Closed;

public static boolean isClosedStatus(String status) {
return Verified.name().equals(status) || Closed.name().equals(status);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,21 @@ public enum BugResolution {
@BaseName("project-ticket-relation")
@LocaleData(value = {@Locale("en-US")}, defaultCharset = "UTF-8")
public enum TicketRel {
Related, Duplicated, Block, DependsOn, Duplicate, Relation;
Duplicated, Block, DependsOn, Duplicate, Relation;

public Enum getReverse() {
if (this == Duplicated) {
return Duplicate;
} else if (this == Related) {
return Relation;
} else if (this == Block) {
return DependsOn;
} else if (this == DependsOn) {
return Block;
} else if (this == Duplicate) {
return Duplicated;
} else if (this == Relation) {
return Relation;
} else {
throw new MyCollabException("Not support");
throw new MyCollabException("Not support relation type " + this);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
Related=Related
Duplicated=Duplicated
Block=Block
DependsOn=Depends On
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ class TicketRelationServiceTest : IntegrationServiceTest() {
fun testFindRelatedTickets() {
val ticketRelations = ticketRelationService.findRelatedTickets(1, ProjectTypeConstants.BUG)
assertThat(ticketRelations.size).isEqualTo(3)
assertThat(ticketRelations).extracting("ticketKey", "ticketid", "ticketName", "tickettype", "typeKey", "typeid", "typeName", "type", "rel", "ltr")
.contains(tuple(2, 1, "Bug 1", "Project-Bug", 1, 1, "Task 1", "Project-Task", "Duplicated", true),
tuple(4, 2, "Task 2", "Project-Task", 2, 1, "Bug 1", "Project-Bug", "Block", false),
tuple(2, 1, "Bug 1", "Project-Bug", 3, 2, "Bug 2", "Project-Bug", "Block", true))
assertThat(ticketRelations).extracting("ticketKey", "ticketid", "ticketName", "ticketStatus", "tickettype", "typeKey", "typeid", "typeName", "typeStatus", "type", "rel", "ltr")
.contains(tuple(2, 1, "Bug 1", "ReOpen","Project-Bug", 1, 1, "Task 1", "Open","Project-Task", "Duplicated", true),
tuple(4, 2, "Task 2", "Closed","Project-Task", 2, 1, "Bug 1", "ReOpen", "Project-Bug", "Block", false),
tuple(2, 1, "Bug 1", "ReOpen", "Project-Bug", 3, 2, "Bug 2", "Open", "Project-Bug", "Block", true))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@

<m_prj_project id="1" name="Project 1" sAccountId="1" shortName="aaa" status="Open"/>

<m_prj_bug id="1" name="Bug 1" priority="High" status="Open" projectId="1" sAccountId="1"/>
<m_prj_bug id="1" name="Bug 1" priority="High" status="ReOpen" projectId="1" sAccountId="1"/>
<m_prj_bug id="2" name="Bug 2" priority="High" status="Open" projectId="1" sAccountId="1"/>

<m_prj_task id="1" name="Task 1" percentagecomplete="10" priority="High" projectId="1" sAccountId="1"/>
<m_prj_task id="2" name="Task 2" percentagecomplete="10" priority="High" projectId="1" sAccountId="1"/>
<m_prj_task id="1" name="Task 1" percentagecomplete="10" status="Open" priority="High" projectId="1" sAccountId="1"/>
<m_prj_task id="2" name="Task 2" percentagecomplete="10" status="Closed" priority="High" projectId="1" sAccountId="1"/>

<m_prj_ticket_relation id="1" ticketId="1" ticketType="Project-Bug" type="Project-Task" typeId="1" rel="Duplicated"/>
<m_prj_ticket_relation id="2" ticketId="2" ticketType="Project-Task" type="Project-Bug" typeId="1" rel="Block"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ class ProjectTicket : ValuedBean(), Serializable {
}

val isClosed: Boolean
get() = StatusI18nEnum.Closed.name == status || StatusI18nEnum.Verified.name == status
get() = StatusI18nEnum.isClosedStatus(status)

val dueDatePlusOne: LocalDate?
get() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ package com.mycollab.module.project.domain
class SimpleTicketRelation : TicketRelation() {
var ticketKey: Int? = null
var ticketName: String? = null
var ticketStatus: String? = null
var typeKey: Int? = null
var typeName: String? = null
var typeStatus: String? = null
var ltr: Boolean = true
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
extends="com.mycollab.module.project.dao.TicketRelationMapper.ResultMapWithBLOBs" id="SimpleTicketRelationResult">
<result column="ticketKey" jdbcType="INTEGER" property="ticketKey" />
<result column="ticketName" jdbcType="VARCHAR" property="ticketName" />
<result column="ticketStatus" jdbcType="VARCHAR" property="ticketStatus" />
<result column="typeKey" jdbcType="INTEGER" property="typeKey" />
<result column="typeName" jdbcType="VARCHAR" property="typeName" />
<result column="typeStatus" jdbcType="VARCHAR" property="typeStatus" />
<result column="ltr" jdbcType="BOOLEAN" property="ltr" />
</resultMap>

Expand Down Expand Up @@ -39,7 +41,8 @@

(SELECT m_prj_ticket_relation.id, m_prj_ticket_relation.ticketId, m_prj_ticket_relation.ticketType,
m_prj_ticket_relation.type, m_prj_ticket_relation.typeId, m_prj_ticket_relation.rel, m_prj_ticket_relation.comment,
tempTbl1.name AS ticketName, tempTbl2.ticketKey, tempTbl3.name AS typeName, tempTbl4.ticketKey AS typeKey, TRUE AS ltr
tempTbl1.name AS ticketName, tempTbl1.status AS ticketStatus, tempTbl2.ticketKey, tempTbl3.name AS typeName, tempTbl3.status AS typeStatus,
tempTbl4.ticketKey AS typeKey, TRUE AS ltr
FROM m_prj_ticket_relation
<include refid = "selectTicketNameAndKeyLtr" />
INNER JOIN m_prj_bug AS tempTbl3 ON (tempTbl3.id = m_prj_ticket_relation.typeId AND m_prj_ticket_relation.type = 'Project-Bug')
Expand All @@ -48,7 +51,8 @@
UNION
(SELECT m_prj_ticket_relation.id, m_prj_ticket_relation.ticketId, m_prj_ticket_relation.ticketType,
m_prj_ticket_relation.type, m_prj_ticket_relation.typeId, m_prj_ticket_relation.rel, m_prj_ticket_relation.comment,
tempTbl1.name AS ticketName, tempTbl2.ticketKey, tempTbl3.name AS typeName, tempTbl4.ticketKey AS typeKey, TRUE AS ltr
tempTbl1.name AS ticketName, tempTbl1.status AS ticketStatus, tempTbl2.ticketKey, tempTbl3.name AS typeName, tempTbl3.status AS typeStatus,
tempTbl4.ticketKey AS typeKey, TRUE AS ltr
FROM m_prj_ticket_relation
<include refid = "selectTicketNameAndKeyLtr" />
INNER JOIN m_prj_task AS tempTbl3 ON (tempTbl3.id = m_prj_ticket_relation.typeId AND m_prj_ticket_relation.type = 'Project-Task')
Expand All @@ -57,7 +61,8 @@
UNION
(SELECT m_prj_ticket_relation.id, m_prj_ticket_relation.ticketId, m_prj_ticket_relation.ticketType,
m_prj_ticket_relation.type, m_prj_ticket_relation.typeId, m_prj_ticket_relation.rel, m_prj_ticket_relation.comment,
tempTbl1.name AS ticketName, tempTbl2.ticketKey, tempTbl3.name AS typeName, tempTbl4.ticketKey AS typeKey, FALSE AS ltr
tempTbl1.name AS ticketName, tempTbl1.status AS ticketStatus, tempTbl2.ticketKey, tempTbl3.name AS typeName, tempTbl3.status AS typeStatus,
tempTbl4.ticketKey AS typeKey, FALSE AS ltr
FROM m_prj_ticket_relation
INNER JOIN m_prj_bug AS tempTbl1 ON (tempTbl1.id = m_prj_ticket_relation.ticketId AND m_prj_ticket_relation.ticketType = 'Project-Bug')
INNER JOIN m_prj_ticket_key AS tempTbl2 ON (tempTbl2.ticketId = tempTbl1.id AND tempTbl2.ticketType = 'Project-Bug')
Expand All @@ -66,7 +71,8 @@
UNION
(SELECT m_prj_ticket_relation.id, m_prj_ticket_relation.ticketId, m_prj_ticket_relation.ticketType,
m_prj_ticket_relation.type, m_prj_ticket_relation.typeId, m_prj_ticket_relation.rel, m_prj_ticket_relation.comment,
tempTbl1.name AS ticketName, tempTbl2.ticketKey, tempTbl3.name AS typeName, tempTbl4.ticketKey AS typeKey, FALSE AS ltr
tempTbl1.name AS ticketName, tempTbl1.status AS ticketStatus, tempTbl2.ticketKey, tempTbl3.name AS typeName, tempTbl3.status AS typeStatus,
tempTbl4.ticketKey AS typeKey, FALSE AS ltr
FROM m_prj_ticket_relation
INNER JOIN m_prj_task AS tempTbl1 ON (tempTbl1.id = m_prj_ticket_relation.ticketId AND m_prj_ticket_relation.ticketType = 'Project-Task')
INNER JOIN m_prj_ticket_key AS tempTbl2 ON (tempTbl2.ticketId = tempTbl1.id AND tempTbl2.ticketType = 'Project-Task')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,6 @@ object TicketEvent {
class HasTicketPropertyChanged(source: Any, val data: String) : ApplicationEvent(source)

class GotoRead(source: Any, val projectId: Int, val ticketKey: Int) : ApplicationEvent(source)

class DependencyChange(source: Any, val ticketId: Int): ApplicationEvent(source)
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.mycollab.module.project.domain.SimpleBug;
import com.mycollab.module.project.domain.SimpleTicketRelation;
import com.mycollab.module.project.event.BugEvent;
import com.mycollab.module.project.event.TicketEvent;
import com.mycollab.module.project.i18n.BugI18nEnum;
import com.mycollab.module.project.i18n.OptionI18nEnum.TicketRel;
import com.mycollab.module.project.i18n.ProjectCommonI18nEnum;
Expand Down Expand Up @@ -66,7 +67,6 @@
* @author MyCollab Ltd.
* @since 1.0
*/
// TODO: Revise the ticket relation
@ViewComponent
public class BugReadViewImpl extends AbstractPreviewItemComp<SimpleBug> implements BugReadView {
private static final long serialVersionUID = 1L;
Expand All @@ -83,6 +83,18 @@ public void handle(BugEvent.BugChanged event) {
}
};

private ApplicationEventListener<TicketEvent.DependencyChange> ticketRelationChangeHandler = new
ApplicationEventListener<TicketEvent.DependencyChange>() {
@Override
@Subscribe
public void handle(TicketEvent.DependencyChange event) {
Integer bugChangeId = event.getTicketId();
BugService bugService = AppContextUtil.getSpringBean(BugService.class);
SimpleBug bugChange = bugService.findById(bugChangeId, AppUI.getAccountId());
previewItem(bugChange);
}
};

private TagViewComponent tagViewComponent;
private CssLayout bugWorkflowControl;
private ProjectFollowersComp<SimpleBug> bugFollowersList;
Expand All @@ -99,12 +111,14 @@ public BugReadViewImpl() {
@Override
public void attach() {
EventBusFactory.getInstance().register(bugChangedHandler);
EventBusFactory.getInstance().register(ticketRelationChangeHandler);
super.attach();
}

@Override
public void detach() {
EventBusFactory.getInstance().unregister(bugChangedHandler);
EventBusFactory.getInstance().unregister(ticketRelationChangeHandler);
super.detach();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,23 @@
*/
package com.mycollab.module.project.view.task;

import com.google.common.eventbus.Subscribe;
import com.mycollab.common.i18n.GenericI18Enum;
import com.mycollab.configuration.SiteConfiguration;
import com.mycollab.core.utils.HumanTime;
import com.mycollab.module.project.CurrentProjectVariables;
import com.mycollab.module.project.ProjectRolePermissionCollections;
import com.mycollab.module.project.ProjectTypeConstants;
import com.mycollab.module.project.domain.ProjectTicket;
import com.mycollab.module.project.domain.SimpleBug;
import com.mycollab.module.project.domain.SimpleTask;
import com.mycollab.module.project.domain.SimpleTicketRelation;
import com.mycollab.module.project.event.TicketEvent;
import com.mycollab.module.project.i18n.OptionI18nEnum;
import com.mycollab.module.project.i18n.ProjectCommonI18nEnum;
import com.mycollab.module.project.i18n.TaskI18nEnum;
import com.mycollab.module.project.i18n.TicketI18nEnum;
import com.mycollab.module.project.service.BugService;
import com.mycollab.module.project.service.TaskService;
import com.mycollab.module.project.service.TicketRelationService;
import com.mycollab.module.project.ui.ProjectAssetsManager;
Expand All @@ -38,6 +42,8 @@
import com.mycollab.module.project.view.ticket.TicketRelationWindow;
import com.mycollab.spring.AppContextUtil;
import com.mycollab.vaadin.AppUI;
import com.mycollab.vaadin.ApplicationEventListener;
import com.mycollab.vaadin.EventBusFactory;
import com.mycollab.vaadin.UserUIContext;
import com.mycollab.vaadin.event.HasPreviewFormHandlers;
import com.mycollab.vaadin.mvp.ViewComponent;
Expand Down Expand Up @@ -69,7 +75,6 @@
@ViewComponent
public class TaskReadViewImpl extends AbstractPreviewItemComp<SimpleTask> implements TaskReadView {
private static final long serialVersionUID = 1L;
private static final Logger LOG = LoggerFactory.getLogger(TaskReadViewImpl.class);

private ProjectActivityComponent activityComponent;
private TagViewComponent tagViewComponent;
Expand All @@ -79,11 +84,35 @@ public class TaskReadViewImpl extends AbstractPreviewItemComp<SimpleTask> implem
private PlanningInfoComp planningInfoComp;
private PeopleInfoComp peopleInfoComp;

private ApplicationEventListener<TicketEvent.DependencyChange> ticketRelationChangeHandler = new
ApplicationEventListener<TicketEvent.DependencyChange>() {
@Override
@Subscribe
public void handle(TicketEvent.DependencyChange event) {
Integer bugChangeId = event.getTicketId();
TaskService taskService = AppContextUtil.getSpringBean(TaskService.class);
SimpleTask taskChange = taskService.findById(bugChangeId, AppUI.getAccountId());
previewItem(taskChange);
}
};

public TaskReadViewImpl() {
super(UserUIContext.getMessage(TaskI18nEnum.DETAIL),
ProjectAssetsManager.getAsset(ProjectTypeConstants.TASK), new TaskPreviewFormLayout());
}

@Override
public void attach() {
EventBusFactory.getInstance().register(ticketRelationChangeHandler);
super.attach();
}

@Override
public void detach() {
EventBusFactory.getInstance().unregister(ticketRelationChangeHandler);
super.detach();
}

@Override
public SimpleTask getItem() {
return beanItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import com.hp.gagawa.java.elements.A;
import com.mycollab.common.i18n.GenericI18Enum;
import com.mycollab.common.i18n.OptionI18nEnum.StatusI18nEnum;
import com.mycollab.module.project.CurrentProjectVariables;
import com.mycollab.module.project.ProjectLinkGenerator;
import com.mycollab.module.project.dao.TicketRelationMapper;
Expand Down Expand Up @@ -48,9 +49,10 @@
public class TicketRelationComp extends AbstractToggleSummaryField {

public TicketRelationComp(SimpleTicketRelation ticketRelation) {
titleLinkLbl = ELabel.html(buildTicketLink(ticketRelation)).withStyleName(WebThemes.LABEL_WORD_WRAP).withUndefinedWidth();
buildTicketLink(ticketRelation);
this.addComponent(titleLinkLbl);
this.addStyleName("editable-field");
// TODO: may check the permission here?
buttonControls = new MHorizontalLayout().withStyleName("toggle").withSpacing(false);
MButton unlinkBtn = new MButton("", clickEvent -> {
ConfirmDialogExt.show(UI.getCurrent(), UserUIContext.getMessage(GenericI18Enum.DIALOG_DELETE_TITLE,
Expand All @@ -72,21 +74,28 @@ public TicketRelationComp(SimpleTicketRelation ticketRelation) {
this.addComponent(buttonControls);
}

private String buildTicketLink(SimpleTicketRelation ticketRelation) {
private void buildTicketLink(SimpleTicketRelation ticketRelation) {
titleLinkLbl = ELabel.html("").withStyleName(WebThemes.LABEL_WORD_WRAP).withUndefinedWidth();
if (ticketRelation.getLtr()) {
A ticketLink = new A(ProjectLinkGenerator.generateProjectItemLink(CurrentProjectVariables.getShortName(),
CurrentProjectVariables.getProjectId(), ticketRelation.getType(), ticketRelation.getTypeKey() + ""))
.appendText(ProjectAssetsManager.getAsset(ticketRelation.getType()).getHtml() + " " + ticketRelation.getTypeName()).setId("tag" + TooltipHelper.TOOLTIP_ID);
ticketLink.setAttribute("onmouseover", TooltipHelper.projectHoverJsFunction(ticketRelation.getType(), "" + ticketRelation.getTypeid()));
ticketLink.setAttribute("onmouseleave", TooltipHelper.itemMouseLeaveJsFunction());
return ticketLink.write();
titleLinkLbl.setValue(ticketLink.write());
if (StatusI18nEnum.isClosedStatus(ticketRelation.getTypeStatus())) {
titleLinkLbl.addStyleName(WebThemes.LINK_COMPLETED);
}
} else {
A ticketLink = new A(ProjectLinkGenerator.generateProjectItemLink(CurrentProjectVariables.getShortName(),
CurrentProjectVariables.getProjectId(), ticketRelation.getTickettype(), ticketRelation.getTicketKey() + ""))
.appendText(ProjectAssetsManager.getAsset(ticketRelation.getTickettype()).getHtml() + " " + ticketRelation.getTicketName()).setId("tag" + TooltipHelper.TOOLTIP_ID);
ticketLink.setAttribute("onmouseover", TooltipHelper.projectHoverJsFunction(ticketRelation.getTickettype(), "" + ticketRelation.getTicketid()));
ticketLink.setAttribute("onmouseleave", TooltipHelper.itemMouseLeaveJsFunction());
return ticketLink.write();
titleLinkLbl.setValue(ticketLink.write());
if (StatusI18nEnum.isClosedStatus(ticketRelation.getTicketStatus())) {
titleLinkLbl.addStyleName(WebThemes.LINK_COMPLETED);
}
}
}
}
Loading

0 comments on commit 2549d08

Please sign in to comment.