<p:growl id="growl" showDetail="true" />
<div style="margin-bottom:8px">
<p:outputLabel for="dragBoards" value="Board Dragging" styleClass="font-bold" style="margin-right:8px" />
<p:selectOneMenu id="dragBoards" value="#{kanbanBoardDragController.dragBoards}" style="width:120px">
<f:selectItem itemLabel="Enabled" itemValue="true" />
<f:selectItem itemLabel="Disabled" itemValue="false" />
<p:ajax update="kanban" process="@this" />
</p:selectOneMenu>
</div>
<pe:kanban id="kanban"
widgetVar="kanbanBoardDragWidget"
value="#{kanbanBoardDragController.columns}"
draggable="true"
dragBoards="#{kanbanBoardDragController.dragBoards}"
style="height:450px">
<p:ajax event="drop" listener="#{kanbanBoardDragController.onDrop}" update="growl" />
<p:ajax event="dragBoard" listener="#{kanbanBoardDragController.onDragBoard}" update="growl" />
<p:ajax event="dragendBoard" listener="#{kanbanBoardDragController.onDragendBoard}" update="growl" />
</pe:kanban>
@Named
@ViewScoped
public class KanbanBoardDragController implements Serializable {
private static final long serialVersionUID = 1L;
private List<KanbanColumn> columns;
private boolean dragBoards = true;
private List<String> boardOrder;
@PostConstruct
public void init() {
columns = new ArrayList<>();
KanbanColumn discoveryColumn = new KanbanColumn("discovery", "Discovery");
discoveryColumn.setCssClass("kanban-discovery");
discoveryColumn.addItem(new KanbanItem("item1", "User research",
"Conduct user interviews and surveys"));
discoveryColumn.addItem(new KanbanItem("item2", "Market analysis",
"Analyze competitors and market trends"));
KanbanColumn designColumn = new KanbanColumn("design", "Design");
designColumn.setCssClass("kanban-design");
designColumn.addItem(new KanbanItem("item3", "Wireframes",
"Create low-fidelity wireframes"));
designColumn.addItem(new KanbanItem("item4", "Prototype",
"Build interactive prototype"));
KanbanColumn developmentColumn = new KanbanColumn("development", "Development");
developmentColumn.setCssClass("kanban-development");
developmentColumn.addItem(new KanbanItem("item5", "Frontend",
"Implement UI components"));
developmentColumn.addItem(new KanbanItem("item6", "Backend",
"Build REST API endpoints"));
KanbanColumn testingColumn = new KanbanColumn("testing", "Testing");
testingColumn.setCssClass("kanban-testing");
testingColumn.addItem(new KanbanItem("item7", "Unit tests",
"Write unit tests for all modules"));
testingColumn.addItem(new KanbanItem("item8", "E2E tests",
"Run end-to-end test suite"));
columns.add(discoveryColumn);
columns.add(designColumn);
columns.add(developmentColumn);
columns.add(testingColumn);
boardOrder = new ArrayList<>();
for (KanbanColumn col : columns) {
boardOrder.add(col.getId());
}
}
public void onDragBoard(KanbanBoardDragEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Board Drag Started",
"Board \"" + event.getBoardId() + "\" is being dragged");
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void onDragendBoard(KanbanBoardDragEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Board Drag Ended",
"Board \"" + event.getBoardId() + "\" moved to position " + event.getNewPosition());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void onDrop(KanbanDragEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Item Moved",
"Item \"" + event.getItemId() + "\" moved from " + event.getSourceColumnId()
+ " to " + event.getTargetColumnId());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public List<KanbanColumn> getColumns() {
return columns;
}
public void setColumns(List<KanbanColumn> columns) {
this.columns = columns;
}
public List<String> getBoardOrder() {
return boardOrder;
}
public void setBoardOrder(List<String> boardOrder) {
this.boardOrder = boardOrder;
}
public boolean isDragBoards() {
return dragBoards;
}
public void setDragBoards(boolean dragBoards) {
this.dragBoards = dragBoards;
}
}