You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by no...@apache.org on 2009/09/01 09:36:11 UTC
svn commit: r809867 - in /labs/hupa:
client/src/main/java/org/apache/hupa/client/
client/src/main/java/org/apache/hupa/client/mvp/
shared/src/main/java/org/apache/hupa/shared/events/
Author: norman
Date: Tue Sep 1 07:36:10 2009
New Revision: 809867
URL: http://svn.apache.org/viewvc?rev=809867&view=rev
Log:
Add back button to go back to IMAPMessageListView without refetching the whole messages
Added:
labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEvent.java
labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEventHandler.java
Modified:
labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.java
labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.properties
labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java
labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java
labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java
labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java
Modified: labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.java
URL: http://svn.apache.org/viewvc/labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.java?rev=809867&r1=809866&r2=809867&view=diff
==============================================================================
--- labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.java (original)
+++ labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.java Tue Sep 1 07:36:10 2009
@@ -97,4 +97,6 @@
public String pageFirst();
public String loginAs();
+
+ public String backButton();
}
Modified: labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.properties
URL: http://svn.apache.org/viewvc/labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.properties?rev=809867&r1=809866&r2=809867&view=diff
==============================================================================
--- labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.properties (original)
+++ labs/hupa/client/src/main/java/org/apache/hupa/client/HupaConstants.properties Tue Sep 1 07:36:10 2009
@@ -38,3 +38,4 @@
pagePrev=Previous
pageFirst=First
loginAs=Login as
+backButton=Back
Modified: labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
URL: http://svn.apache.org/viewvc/labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java?rev=809867&r1=809866&r2=809867&view=diff
==============================================================================
--- labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java (original)
+++ labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java Tue Sep 1 07:36:10 2009
@@ -195,7 +195,8 @@
if (isBound == false) {
bind();
}
- refreshDisplay();
+
+ //refreshDisplay();
}
@Override
protected void onPlaceRequest(PlaceRequest request) {
@@ -206,14 +207,14 @@
@Override
protected void onUnbind() {
display.removeTableListener(tableListener);
- display.reset();
- display.deselectAllMessages();
isBound = false;
}
public void refreshDisplay() {
- display.reloadData(user, folder, searchValue);
+ display.reset();
display.deselectAllMessages();
+
+ display.reloadData(user, folder, searchValue);
}
public void revealDisplay() {
Modified: labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
URL: http://svn.apache.org/viewvc/labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java?rev=809867&r1=809866&r2=809867&view=diff
==============================================================================
--- labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java (original)
+++ labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java Tue Sep 1 07:36:10 2009
@@ -35,6 +35,7 @@
import org.apache.hupa.shared.data.MessageAttachment;
import org.apache.hupa.shared.data.User;
import org.apache.hupa.shared.data.Util;
+import org.apache.hupa.shared.events.BackEvent;
import org.apache.hupa.shared.events.ForwardMessageEvent;
import org.apache.hupa.shared.events.LoadMessagesEvent;
import org.apache.hupa.shared.events.ReplyMessageEvent;
@@ -65,7 +66,7 @@
public HasClickHandlers getReplyButtonClick();
public HasClickHandlers getReplyAllButtonClick();
public HasClickHandlers getForwardButtonClick();
-
+ public HasClickHandlers getBackButtonClick();
public void setAttachments(List<MessageAttachment> attachements, String sessionId, String folder, long uid);
}
@@ -152,6 +153,13 @@
}
}));
+ registerHandler(display.getBackButtonClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ eventBus.fireEvent(new BackEvent());
+ }
+
+ }));
isBound = true;
}
Modified: labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java
URL: http://svn.apache.org/viewvc/labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java?rev=809867&r1=809866&r2=809867&view=diff
==============================================================================
--- labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java (original)
+++ labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java Tue Sep 1 07:36:10 2009
@@ -51,6 +51,9 @@
import com.google.gwt.user.client.ui.Widget;
public class IMAPMessageView extends Composite implements Display{
+
+ private HupaImageBundle imageBundle = GWT.create(HupaImageBundle.class);
+ private HupaConstants constants = GWT.create(HupaConstants.class);
private Grid detailGrid = new Grid(5, 2);
private Label from = new Label();
private Label cc = new Label();
@@ -61,11 +64,9 @@
private Button replyMsgButton = new Button();
private Button replyAllMsgButton = new Button();
private Button forwardMsgButton = new Button();
-
+ private Hyperlink backButton = new Hyperlink(constants.backButton(),"");
private FlowPanel attachments = new FlowPanel();
-
- private HupaImageBundle imageBundle = GWT.create(HupaImageBundle.class);
- private HupaConstants constants = GWT.create(HupaConstants.class);
+
public final static int DELETE_BUTTON = 0;
public final static int REPLY_BUTTON = 1;
public final static int REPLY_ALL_BUTTON = 2;
@@ -129,16 +130,25 @@
deleteMsgButton.setText(constants.deleteMailButton());
replyMsgButton.setText(constants.replyMailButton());
replyAllMsgButton.setText(constants.replyAllMailButton());
- forwardMsgButton.setText(constants.forwardMailButton());
+ forwardMsgButton.setText(constants.forwardMailButton());
+
+ HorizontalPanel buttonPanel = new HorizontalPanel();
+ buttonPanel.setWidth("100%");
+ buttonPanel.setHorizontalAlignment(HorizontalPanel.ALIGN_LEFT);
+ buttonPanel.addStyleName("hupa-IMAPMessageWidget-ButtonBar");
+
+
+
ButtonBar buttonBar = new ButtonBar();
- buttonBar.addStyleName("hupa-IMAPMessageWidget-ButtonBar");
buttonBar.add(replyMsgButton);
buttonBar.add(replyAllMsgButton);
buttonBar.add(deleteMsgButton);
buttonBar.add(forwardMsgButton);
buttonBar.setWidth("100%");
-
- mPanel.add(buttonBar);
+ buttonPanel.add(buttonBar);
+ buttonPanel.add(backButton);
+ buttonPanel.setCellHorizontalAlignment(backButton, HorizontalPanel.ALIGN_RIGHT);
+ mPanel.add(buttonPanel);
msgArea.setWidth("100%");
ScrollPanel sPanel = new ScrollPanel();
sPanel.setAlwaysShowScrollBars(false);
@@ -225,5 +235,9 @@
public HasClickHandlers getReplyButtonClick() {
return replyMsgButton;
}
+
+ public HasClickHandlers getBackButtonClick() {
+ return backButton;
+ }
}
Modified: labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java
URL: http://svn.apache.org/viewvc/labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java?rev=809867&r1=809866&r2=809867&view=diff
==============================================================================
--- labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java (original)
+++ labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java Tue Sep 1 07:36:10 2009
@@ -34,6 +34,8 @@
import org.apache.hupa.shared.data.IMAPMessage;
import org.apache.hupa.shared.data.User;
import org.apache.hupa.shared.data.IMAPMessage.IMAPFlag;
+import org.apache.hupa.shared.events.BackEvent;
+import org.apache.hupa.shared.events.BackEventHandler;
import org.apache.hupa.shared.events.DecreaseUnseenEvent;
import org.apache.hupa.shared.events.ExpandMessageEvent;
import org.apache.hupa.shared.events.ExpandMessageEventHandler;
@@ -95,7 +97,7 @@
- private void showMessageTable(User user, IMAPFolder folder, String searchValue) {
+ private void showMessageTable(User user, IMAPFolder folder, String searchValue,boolean refresh) {
this.user = user;
this.folder = folder;
this.searchValue = searchValue;
@@ -104,6 +106,9 @@
sendPresenter.unbind();
messageListPresenter.bind(user, folder, searchValue);
+ if (refresh) {
+ messageListPresenter.refreshDisplay();
+ }
display.setCenter(messageListPresenter.getDisplay().asWidget());
}
@@ -175,7 +180,7 @@
registerHandler(eventBus.addHandler(LoadMessagesEvent.TYPE, new LoadMessagesEventHandler() {
public void onLoadMessagesEvent(LoadMessagesEvent loadMessagesEvent) {
- showMessageTable(loadMessagesEvent.getUser(), loadMessagesEvent.getFolder(), loadMessagesEvent.getSearchValue());
+ showMessageTable(loadMessagesEvent.getUser(), loadMessagesEvent.getFolder(), loadMessagesEvent.getSearchValue(), true);
}
}));
@@ -232,7 +237,7 @@
registerHandler(eventBus.addHandler(SentMessageEvent.TYPE, new SentMessageEventHandler() {
public void onSentMessageEvent(SentMessageEvent ev) {
- showMessageTable(user,folder,searchValue);
+ showMessageTable(user,folder,searchValue, false);
}
}));
@@ -254,7 +259,7 @@
registerHandler(eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {
public void onFolderSelectionEvent(FolderSelectionEvent event) {
- showMessageTable(user,event.getFolder(),searchValue);
+ showMessageTable(user,event.getFolder(),searchValue, true);
}
}));
@@ -271,6 +276,14 @@
}));
+ registerHandler(eventBus.addHandler(BackEvent.TYPE, new BackEventHandler() {
+
+ public void onBackEvent(BackEvent event) {
+ showMessageTable(user, folder, searchValue, false);
+ }
+
+ }));
+
}
@@ -290,7 +303,7 @@
public void refreshDisplay() {
showIMAPFolders(user);
- showMessageTable(user,folder,null);
+ showMessageTable(user,folder,null,true);
}
public void revealDisplay() {
Modified: labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java
URL: http://svn.apache.org/viewvc/labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java?rev=809867&r1=809866&r2=809867&view=diff
==============================================================================
--- labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java (original)
+++ labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java Tue Sep 1 07:36:10 2009
@@ -39,6 +39,7 @@
import org.apache.hupa.shared.data.MessageHeader;
import org.apache.hupa.shared.data.User;
import org.apache.hupa.shared.data.Util;
+import org.apache.hupa.shared.events.BackEvent;
import org.apache.hupa.shared.events.FolderSelectionEvent;
import org.apache.hupa.shared.events.FolderSelectionEventHandler;
import org.apache.hupa.shared.events.LoadMessagesEvent;
@@ -85,6 +86,23 @@
public MessageSendPresenter(Display display, EventBus eventBus, DispatchAsync dispatcher) {
super(display, eventBus);
this.dispatcher = dispatcher;
+
+ FocusAction fAction = new FocusAction();
+ validator.addValidators("cc", new EmailListValidator(display.getCcText())
+ .addActionForFailure(
+ new StyleAction("hupa-validationErrorBorder"))
+ .addActionForFailure(fAction));
+ validator.addValidators("bcc", new EmailListValidator(display.getBccText())
+ .addActionForFailure(
+ new StyleAction("hupa-validationErrorBorder"))
+ .addActionForFailure(fAction));
+ validator.addValidators("to", new EmailListValidator(display.getToText())
+ .addActionForFailure(
+ new StyleAction("hupa-validationErrorBorder"))
+ .addActionForFailure(fAction), new NotEmptyValidator(display.getToText())
+ .addActionForFailure(
+ new StyleAction("hupa-validationErrorBorder"))
+ .addActionForFailure(fAction));
}
public enum Type {
@@ -105,6 +123,7 @@
public HasEnable getSendEnable();
public IUploader getUploader();
public void resetUploader();
+ public HasClickHandlers getBackButtonClick();
}
@Override
@@ -208,22 +227,14 @@
}));
- FocusAction fAction = new FocusAction();
- validator.addValidators("cc", new EmailListValidator(display.getCcText())
- .addActionForFailure(
- new StyleAction("hupa-validationErrorBorder"))
- .addActionForFailure(fAction));
- validator.addValidators("bcc", new EmailListValidator(display.getBccText())
- .addActionForFailure(
- new StyleAction("hupa-validationErrorBorder"))
- .addActionForFailure(fAction));
- validator.addValidators("to", new EmailListValidator(display.getToText())
- .addActionForFailure(
- new StyleAction("hupa-validationErrorBorder"))
- .addActionForFailure(fAction), new NotEmptyValidator(display.getToText())
- .addActionForFailure(
- new StyleAction("hupa-validationErrorBorder"))
- .addActionForFailure(fAction));
+
+ registerHandler(display.getBackButtonClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ eventBus.fireEvent(new BackEvent());
+ }
+
+ }));
}
private void reset() {
Modified: labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java
URL: http://svn.apache.org/viewvc/labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java?rev=809867&r1=809866&r2=809867&view=diff
==============================================================================
--- labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java (original)
+++ labs/hupa/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java Tue Sep 1 07:36:10 2009
@@ -26,7 +26,6 @@
import org.apache.hupa.client.widgets.MyButton;
import org.apache.hupa.client.widgets.UploadProgress;
import org.apache.hupa.widgets.ui.HasEnable;
-import org.cobogw.gwt.user.client.ui.ButtonBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
@@ -39,6 +38,7 @@
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
@@ -57,7 +57,8 @@
private MultiUploader uploader = new MultiUploader(new UploadProgress());
private TextArea text = new TextArea();
private MyButton sendButton = new MyButton(constants.sendButton());
-
+ private Hyperlink backButton = new Hyperlink(constants.backButton(),"");
+
public MessageSendView() {
final VerticalPanel mPanel = new VerticalPanel();
@@ -172,10 +173,13 @@
uploader.avoidRepeatFiles(true);
mPanel.add(detailGrid);
- ButtonBar buttonBar = new ButtonBar();
+ HorizontalPanel buttonBar = new HorizontalPanel();
buttonBar.addStyleName("hupa-IMAPMessageWidget-ButtonBar");
- buttonBar.add(sendButton);
buttonBar.setWidth("100%");
+ buttonBar.setHorizontalAlignment(HorizontalPanel.ALIGN_LEFT);
+ buttonBar.add(sendButton);
+ buttonBar.add(backButton);
+ buttonBar.setCellHorizontalAlignment(backButton, HorizontalPanel.ALIGN_RIGHT);
mPanel.add(buttonBar);
@@ -184,54 +188,100 @@
}
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.widget.WidgetDisplay#asWidget()
+ */
public Widget asWidget() {
return this;
}
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.Display#startProcessing()
+ */
public void startProcessing() {
// TODO Auto-generated method stub
}
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.Display#stopProcessing()
+ */
public void stopProcessing() {
// TODO Auto-generated method stub
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getBccText()
+ */
public HasText getBccText() {
return bcc;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getCcText()
+ */
public HasText getCcText() {
return cc;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getFromText()
+ */
public HasText getFromText() {
return from;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getMessageText()
+ */
public HasText getMessageText() {
return text;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getSubjectText()
+ */
public HasText getSubjectText() {
return subject;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getToText()
+ */
public HasText getToText() {
return to;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getSendClick()
+ */
public HasClickHandlers getSendClick() {
return sendButton;
}
-
-
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getUploader()
+ */
public IUploader getUploader() {
return uploader;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#resetUploader()
+ */
public void resetUploader() {
uploader.removeFromParent();
uploader = new MultiUploader(new UploadProgress());
@@ -241,7 +291,19 @@
detailGrid.setWidget(5, 1, uploader);
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getSendEnable()
+ */
public HasEnable getSendEnable() {
return sendButton;
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getBackButtonClick()
+ */
+ public HasClickHandlers getBackButtonClick() {
+ return backButton;
+ }
}
Added: labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEvent.java
URL: http://svn.apache.org/viewvc/labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEvent.java?rev=809867&view=auto
==============================================================================
--- labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEvent.java (added)
+++ labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEvent.java Tue Sep 1 07:36:10 2009
@@ -0,0 +1,36 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.shared.events;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+public class BackEvent extends GwtEvent<BackEventHandler>{
+ public final static Type<BackEventHandler> TYPE = new Type<BackEventHandler>();
+ @Override
+ protected void dispatch(BackEventHandler handler) {
+ handler.onBackEvent(this);
+ }
+
+ @Override
+ public com.google.gwt.event.shared.GwtEvent.Type<BackEventHandler> getAssociatedType() {
+ return TYPE;
+ }
+
+}
Added: labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEventHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEventHandler.java?rev=809867&view=auto
==============================================================================
--- labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEventHandler.java (added)
+++ labs/hupa/shared/src/main/java/org/apache/hupa/shared/events/BackEventHandler.java Tue Sep 1 07:36:10 2009
@@ -0,0 +1,27 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.shared.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+public interface BackEventHandler extends EventHandler{
+
+ public void onBackEvent(BackEvent event);
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org