Java tutorial
/* * Copyright (C) 2015 Jan Tymel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.jboss.ci.tracker.client.widgets; import org.jboss.ci.tracker.client.widgets.bridges.ResultListTestDetailBridge; import org.jboss.ci.tracker.client.widgets.bridges.ParamBuildResultListBridge; import org.jboss.ci.tracker.client.widgets.bridges.JobListResultListBridge; import org.jboss.ci.tracker.client.widgets.bridges.JobListDetailBridge; import org.jboss.ci.tracker.client.widgets.bridges.JobListBuildListBridge; import org.jboss.ci.tracker.client.widgets.bridges.JobDetailLabelDetailBridge; import org.jboss.ci.tracker.client.widgets.bridges.JobDetailCategoriesBridge; import org.jboss.ci.tracker.client.widgets.bridges.CategorizationListBridge; import org.jboss.ci.tracker.client.widgets.bridges.BuildListResultListBridge; import org.jboss.ci.tracker.client.widgets.bridges.BuildListParamBuildListBridge; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TabLayoutPanel; import com.google.gwt.user.client.ui.Widget; import java.util.Collection; import org.jboss.ci.tracker.common.objects.BuildDto; import org.jboss.ci.tracker.common.objects.JobDto; import org.jboss.ci.tracker.common.objects.LabelDto; import org.jboss.ci.tracker.common.objects.ParameterizedBuildDto; import org.jboss.ci.tracker.common.objects.PossibleResultDto; import org.jboss.ci.tracker.common.objects.ResultDto; import java.util.List; /** * * @author jtymel */ public class MainPanel extends Composite implements JobListDetailBridge, CategorizationListBridge, JobDetailLabelDetailBridge, JobDetailCategoriesBridge, JobListBuildListBridge, BuildListParamBuildListBridge, ParamBuildResultListBridge, BuildListResultListBridge, JobListResultListBridge, ResultListTestDetailBridge { private static MainPanelUiBinder uiBinder = GWT.create(MainPanelUiBinder.class); interface MainPanelUiBinder extends UiBinder<Widget, MainPanel> { } @Override public void setJobAndDisplayDetail(JobDto jobDTO) { jobDetail.setJob(jobDTO); tabPanel.add(jobDetail, "Job detail"); tabPanel.selectTab(jobDetail); } @Override public void cancelJobDetailAndDisplayJobList() { tabPanel.remove(jobDetail); tabPanel.selectTab(jobList); } @Override public void cancelCategorizationList() { tabPanel.remove(categorizationList); } @Override public void setLabelAndDisplayDetail(LabelDto label, JobDto job) { labelDetail.setLabel(label, job); tabPanel.add(labelDetail, "Label detail"); tabPanel.selectTab(labelDetail); } @Override public void cancelLabelDetailAndDisplayJobDetail() { tabPanel.remove(labelDetail); tabPanel.selectTab(jobDetail); } @Override public void setJobAndDisplayCategories(JobDto job) { jobCategories.setJob(job); tabPanel.add(jobCategories, "Job categories"); tabPanel.selectTab(jobCategories); } @Override public void cancelJobCategoriesAndDisplayJobDetail() { tabPanel.remove(jobCategories); tabPanel.selectTab(jobDetail); } @Override public void setJobAndDisplayBuilds(JobDto job) { buildList.setJob(job); tabPanel.add(buildList, "List of builds"); tabPanel.selectTab(buildList); } @Override public void setBuildAndDisplayParamBuilds(BuildDto build) { paramBuildList.setBuild(build); tabPanel.add(paramBuildList, "List of parameterized builds"); tabPanel.selectTab(paramBuildList); } @Override public void setParamBuildAndDisplayResults(ParameterizedBuildDto paramBuild) { resultList.showParamBuildResults(paramBuild); tabPanel.add(resultList, "List of results"); tabPanel.selectTab(resultList); } @Override public void setBuildAndDisplayResults(Collection<BuildDto> builds) { resultList.showBuildResults(builds); tabPanel.add(resultList, "List of results"); tabPanel.selectTab(resultList); } @Override public void setJobAndDisplayResults(JobDto job) { resultList.showJobResults(job); tabPanel.add(resultList, "List of results"); tabPanel.selectTab(resultList); } @Override public void setTestAndDisplayHistory(ResultDto result, JobDto job, List<PossibleResultDto> possibleResults) { testDetail.showTestHistory(result, job, possibleResults); tabPanel.add(testDetail, "History of test"); tabPanel.selectTab(testDetail); } @Override public void setTestAndDisplayHistory(ResultDto result, Collection<BuildDto> builds, List<PossibleResultDto> possibleResults) { testDetail.showTestHistory(result, builds, possibleResults); tabPanel.add(testDetail, "History of test"); tabPanel.selectTab(testDetail); } @Override public void setTestAndDisplayHistory(ResultDto result, ParameterizedBuildDto paramBuild, List<PossibleResultDto> possibleResults) { testDetail.showTestHistory(result, paramBuild, possibleResults); tabPanel.add(testDetail, "History of test"); tabPanel.selectTab(testDetail); } @Override public void cancelTestDetailAndDisplayResultList() { tabPanel.remove(testDetail); tabPanel.selectTab(resultList); } @Override public void cancelResultListAndDisplayJobList() { tabPanel.remove(resultList); tabPanel.selectTab(jobList); } @Override public void cancelResultListAndDisplayParamBuildList() { tabPanel.remove(resultList); tabPanel.selectTab(paramBuildList); } @Override public void cancelResultListAndDisplayBuildList() { tabPanel.remove(resultList); tabPanel.selectTab(buildList); } @Override public void cancelParamBuildListAndDisplazBuildList() { tabPanel.remove(paramBuildList); tabPanel.selectTab(buildList); } @Override public void cancelBuildListAndDisplayJobList() { tabPanel.remove(buildList); tabPanel.selectTab(jobList); } @UiField JobDetail jobDetail; @UiField JobList jobList; @UiField CategorizationList categorizationList; @UiField LabelDetail labelDetail; @UiField JobCategories jobCategories; @UiField BuildList buildList; @UiField ParamBuildList paramBuildList; @UiField ResultList resultList; @UiField TabLayoutPanel tabPanel; @UiField TestDetail testDetail; private int selectedTab; public MainPanel() { initWidget(uiBinder.createAndBindUi(this)); setBridges(); removeUnnecessaryTabs(); addKeyHandler(); } public List<JobDto> getSelectedJobs() { return jobList.getSelectedJobs(); } public void showCategorizationList() { tabPanel.add(categorizationList, "List of categorizations"); tabPanel.selectTab(categorizationList); } /** * Calls methods of tabs when the tab is selected (and when needed). * * @param event Selection event */ @UiHandler("tabPanel") void onTabSelection(SelectionEvent<Integer> event) { selectedTab = event.getSelectedItem(); if (tabPanel.getWidget(selectedTab).equals(labelDetail)) { labelDetail.onTabShow(); } if (tabPanel.getWidget(selectedTab).equals(jobCategories)) { jobCategories.onTabShow(); } if (tabPanel.getWidget(selectedTab).equals(buildList)) { buildList.onTabShow(); } if (tabPanel.getWidget(selectedTab).equals(paramBuildList)) { paramBuildList.onTabShow(); } if (tabPanel.getWidget(selectedTab).equals(jobDetail)) { jobDetail.onTabShow(); } if (tabPanel.getWidget(selectedTab).equals(jobList)) { jobList.onTabShow(); } if (tabPanel.getWidget(selectedTab).equals(categorizationList)) { categorizationList.onTabShow(); } } /** * Sets bridges which permits collaboration between tabs. */ private void setBridges() { jobList.setJobListDetailBridge(MainPanel.this); jobDetail.setJobListDetailBridge(MainPanel.this); categorizationList.setCategorizationListBridge(MainPanel.this); jobDetail.setJobDetailLabelDetailBridge(MainPanel.this); labelDetail.setJobDetailLabelDetailBridge(MainPanel.this); jobDetail.setJobDetailCategoriesBridge(MainPanel.this); jobCategories.setJobDetailCategoriesBridge(MainPanel.this); jobList.setJobListBuildListBridge(MainPanel.this); buildList.setJobListBuildListBridge(MainPanel.this); buildList.setBuildListParamBuildListBridge(MainPanel.this); paramBuildList.setBuildListParamBuildListBridge(MainPanel.this); paramBuildList.setParamBuildResultListBridge(MainPanel.this); resultList.setParamBuildResultListBridge(MainPanel.this); buildList.setBuildListResultListBridge(MainPanel.this); resultList.setBuildListResultListBridge(MainPanel.this); jobList.setJobListResultListBridge(MainPanel.this); resultList.setJobListResultListBridge(MainPanel.this); resultList.setResultListTestDetailBridge(MainPanel.this); testDetail.setResultListTestDetailBridge(MainPanel.this); } /** * Removes unnecessary tabs when the application is starting. */ private void removeUnnecessaryTabs() { tabPanel.remove(testDetail); tabPanel.remove(jobCategories); tabPanel.remove(resultList); tabPanel.remove(labelDetail); tabPanel.remove(paramBuildList); tabPanel.remove(buildList); tabPanel.remove(jobDetail); tabPanel.remove(categorizationList); } /** * Adds key handler for closing tabs once the escape key is pressed with exception of JobList tab * {@link org.jboss.ci.tracker.client.widgets.JobList}. */ private void addKeyHandler() { RootPanel.get().addDomHandler(new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_ESCAPE && !tabPanel.getWidget(selectedTab).equals(jobList)) { final int removedTabIndex = selectedTab; tabPanel.remove(removedTabIndex); tabPanel.selectTab(removedTabIndex - 1); } } }, KeyDownEvent.getType()); } }