Refactor Test Planner GWT code. Factoring out common functionality in presenter, display, and tab classes for reuse with other Test Planner tabs.
Signed-off-by: James Ren <[email protected]> --- /dev/null 2009-12-17 12:29:38.000000000 -0800 +++ autotest/frontend/client/src/autotest/planner/TestPlannerDisplay.java 2010-04-30 13:21:36.000000000 -0700 @@ -0,0 +1,7 @@ +package autotest.planner; + +import com.google.gwt.user.client.ui.HTMLPanel; + +public interface TestPlannerDisplay { + public void initialize(HTMLPanel htmlPanel); +} --- /dev/null 2009-12-17 12:29:38.000000000 -0800 +++ autotest/frontend/client/src/autotest/planner/TestPlannerPresenter.java 2010-04-30 13:21:36.000000000 -0700 @@ -0,0 +1,32 @@ +package autotest.planner; + +import autotest.common.ui.HasTabVisible; + +public abstract class TestPlannerPresenter implements TestPlanSelector.Listener { + private TestPlanSelector selector; + private HasTabVisible tab; + + public void initialize(TestPlanSelector selector, HasTabVisible tab) { + this.selector = selector; + this.tab = tab; + selector.addListener(this); + } + + public void refresh() { + String planId = selector.getSelectedPlan(); + if (planId == null) { + return; + } + + refresh(planId); + } + + @Override + public void onPlanSelected() { + if (tab.isTabVisible()) { + refresh(); + } + } + + public abstract void refresh(String planId); +} --- /dev/null 2009-12-17 12:29:38.000000000 -0800 +++ autotest/frontend/client/src/autotest/planner/TestPlannerTab.java 2010-04-30 13:21:36.000000000 -0700 @@ -0,0 +1,32 @@ +package autotest.planner; + +import autotest.common.ui.TabView; + +import com.google.gwt.user.client.ui.HTMLPanel; + +public abstract class TestPlannerTab extends TabView { + + private TestPlanSelector selector; + + public TestPlannerTab(TestPlanSelector selector) { + this.selector = selector; + } + + @Override + public void initialize() { + super.initialize(); + getPresenter().initialize(selector, this); + getDisplay().initialize((HTMLPanel) getWidget()); + bindDisplay(); + } + + @Override + public void refresh() { + super.refresh(); + getPresenter().refresh(); + } + + protected abstract TestPlannerPresenter getPresenter(); + protected abstract TestPlannerDisplay getDisplay(); + protected abstract void bindDisplay(); +} --- autotest/frontend/client/src/autotest/planner/triage/TriageViewDisplay.java 2010-04-30 13:21:36.000000000 -0700 +++ autotest/frontend/client/src/autotest/planner/triage/TriageViewDisplay.java 2010-04-30 11:36:56.000000000 -0700 @@ -1,6 +1,7 @@ package autotest.planner.triage; import autotest.common.ui.NotifyManager; +import autotest.planner.TestPlannerDisplay; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.logical.shared.ResizeEvent; @@ -12,44 +13,46 @@ import com.google.gwt.user.client.ui.VerticalPanel; -public class TriageViewDisplay implements TriageViewPresenter.Display, ResizeHandler { - +public class TriageViewDisplay implements TestPlannerDisplay, + TriageViewPresenter.Display, ResizeHandler { + private static final int HEIGHT_FUDGE = 300; - + private VerticalPanel container = new VerticalPanel(); private ScrollPanel scroll = new ScrollPanel(container); private Button triage = new Button("Triage"); - + + @Override public void initialize(HTMLPanel htmlPanel) { container.setSpacing(25); container.setWidth("90%"); - + scroll.setSize("100%", getHeightParam(Window.getClientHeight())); scroll.setVisible(false); triage.setVisible(false); - + htmlPanel.add(scroll, "triage_failure_tables"); htmlPanel.add(triage, "triage_button"); - + Window.addResizeHandler(this); } - + @Override public void setLoading(boolean loading) { NotifyManager.getInstance().setLoading(loading); scroll.setVisible(!loading); - + scroll.setVisible(true); triage.setVisible(true); } - + @Override public FailureTable.Display generateFailureTable(String group, String[] columnNames) { FailureTableDisplay display = new FailureTableDisplay(group, columnNames); container.add(display); return display; } - + @Override public TriagePopup.Display generateTriagePopupDisplay() { return new TriagePopupDisplay(); @@ -69,7 +72,7 @@ public void onResize(ResizeEvent event) { scroll.setHeight(getHeightParam(event.getHeight())); } - + private String getHeightParam(int height) { return (height - HEIGHT_FUDGE) + "px"; } --- autotest/frontend/client/src/autotest/planner/triage/TriageViewPresenter.java 2010-04-30 13:21:36.000000000 -0700 +++ autotest/frontend/client/src/autotest/planner/triage/TriageViewPresenter.java 2010-04-30 13:21:36.000000000 -0700 @@ -2,8 +2,7 @@ import autotest.common.JsonRpcCallback; import autotest.common.JsonRpcProxy; -import autotest.common.ui.HasTabVisible; -import autotest.planner.TestPlanSelector; +import autotest.planner.TestPlannerPresenter; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -16,9 +15,9 @@ import java.util.ArrayList; import java.util.List; -public class TriageViewPresenter implements ClickHandler, TestPlanSelector.Listener, - TriagePopup.Listener { - +public class TriageViewPresenter extends TestPlannerPresenter + implements ClickHandler, TriagePopup.Listener { + public interface Display { public void setLoading(boolean loading); public void clearAllFailureTables(); @@ -26,34 +25,22 @@ public TriagePopup.Display generateTriagePopupDisplay(); public HasClickHandlers getTriageButton(); } - - private TestPlanSelector selector; + private Display display; - private HasTabVisible tab; private List<FailureTable> failureTables = new ArrayList<FailureTable>(); - - public TriageViewPresenter(TestPlanSelector selector, HasTabVisible tab) { - this.selector = selector; - this.tab = tab; - selector.addListener(this); - } - + public void bindDisplay(Display display) { this.display = display; display.getTriageButton().addClickHandler(this); } - - public void refresh() { - String planId = selector.getSelectedPlan(); - if (planId == null) { - return; - } - + + @Override + public void refresh(String planId) { display.setLoading(true); - + JSONObject params = new JSONObject(); params.put("plan_id", new JSONString(planId)); - + JsonRpcProxy.getProxy().rpcCall("get_failures", params, new JsonRpcCallback() { @Override public void onSuccess(JSONValue result) { @@ -61,7 +48,7 @@ display.setLoading(false); generateFailureTables(result.isObject()); } - + @Override public void onError(JSONObject errorObject) { super.onError(errorObject); @@ -69,42 +56,35 @@ } }); } - + private void generateFailureTables(JSONObject failures) { failureTables.clear(); - + for (String group : failures.keySet()) { FailureTable table = new FailureTable(); FailureTable.Display tableDisplay = display.generateFailureTable(group, FailureTable.COLUMN_NAMES); table.bindDisplay(tableDisplay); - + JSONArray groupFailures = failures.get(group).isArray(); - + for (int i = 0; i < groupFailures.size(); i++) { table.addFailure(groupFailures.get(i).isObject()); } - - failureTables.add(table); - } - } - @Override - public void onPlanSelected() { - if (tab.isTabVisible()) { - refresh(); + failureTables.add(table); } } @Override public void onClick(ClickEvent event) { assert event.getSource() == display.getTriageButton(); - + List<Integer> failureIds = new ArrayList<Integer>(); for (FailureTable failure : failureTables) { failureIds.addAll(failure.getSelectedFailureIds()); } - + TriagePopup popup = new TriagePopup(this, failureIds); popup.bindDisplay(display.generateTriagePopupDisplay()); popup.render(); --- autotest/frontend/client/src/autotest/planner/triage/TriageViewTab.java 2010-04-30 13:21:36.000000000 -0700 +++ autotest/frontend/client/src/autotest/planner/triage/TriageViewTab.java 2010-04-30 13:21:36.000000000 -0700 @@ -1,35 +1,37 @@ package autotest.planner.triage; -import autotest.common.ui.TabView; import autotest.planner.TestPlanSelector; +import autotest.planner.TestPlannerDisplay; +import autotest.planner.TestPlannerPresenter; +import autotest.planner.TestPlannerTab; -import com.google.gwt.user.client.ui.HTMLPanel; +public class TriageViewTab extends TestPlannerTab { -public class TriageViewTab extends TabView { - - private TriageViewPresenter presenter; + private TriageViewPresenter presenter = new TriageViewPresenter(); private TriageViewDisplay display = new TriageViewDisplay(); - + public TriageViewTab(TestPlanSelector selector) { - presenter = new TriageViewPresenter(selector, this); + super(selector); } - + @Override public String getElementId() { return "triage_view"; } - + @Override - public void initialize() { - super.initialize(); - display.initialize((HTMLPanel) getWidget()); - presenter.bindDisplay(display); + protected TestPlannerDisplay getDisplay() { + return display; } - + @Override - public void refresh() { - super.refresh(); - presenter.refresh(); + protected TestPlannerPresenter getPresenter() { + return presenter; + } + + @Override + protected void bindDisplay() { + presenter.bindDisplay(display); } } _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
