Author: dongxu Date: Thu Sep 12 03:32:28 2013 New Revision: 1522217 URL: http://svn.apache.org/r1522217 Log: Fix issue #15. Just replace the west tree by using CellTree, resulting in issue #16 & #17
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTree.java - copied, changed from r1522216, james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTreeViewModel.java Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/FetchFoldersRequest.java james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java james/hupa/trunk/server/src/main/java/org/apache/hupa/server/ioc/GuiceServerModule.java james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersServiceImpl.java james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderServiceImpl.java james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/ImapFolderImpl.java james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/domain/ImapFolder.java Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java (original) +++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java Thu Sep 12 03:32:28 2013 @@ -164,6 +164,7 @@ import org.apache.hupa.client.place.Defa import org.apache.hupa.client.rf.HupaRequestFactory; import org.apache.hupa.client.ui.AppLayout; import org.apache.hupa.client.ui.AppLayoutImpl; +import org.apache.hupa.client.ui.FolderTreeViewModel; import org.apache.hupa.client.ui.IMAPMessageListView; <<<<<<< HEAD <<<<<<< HEAD @@ -432,6 +433,7 @@ public class AppGinModule extends Abstra bind(IMAPMessageActivity.class).in(Singleton.class); bind(MessagesCellTable.class).in(Singleton.class); + bind(FolderTreeViewModel.class).in(Singleton.class); // Places bind(PlaceHistoryMapper.class).to(AppPlaceHistoryMapper.class).in(Singleton.class); Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/FetchFoldersRequest.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/FetchFoldersRequest.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/FetchFoldersRequest.java (original) +++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/FetchFoldersRequest.java Thu Sep 12 03:32:28 2013 @@ -31,5 +31,9 @@ import com.google.web.bindery.requestfac @Service(value = FetchFoldersService.class, locator = IocRfServiceLocator.class) public interface FetchFoldersRequest extends RequestContext { +<<<<<<< HEAD Request<List<ImapFolder>> fetch(ImapFolder imapFolder, Boolean recursive); +======= + Request<List<ImapFolder>> fetch(ImapFolder imapFolder); +>>>>>>> Fix issue #15. } Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java (original) +++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java Thu Sep 12 03:32:28 2013 @@ -96,6 +96,7 @@ public interface HupaRequestFactory exte ======= ======= LogoutUserRequest logoutRequest(); + FetchFoldersRequest fetchFoldersRequest(); FetchMessagesRequest messagesRequest(); MoveMessageRequest moveMessageRequest(); >>>>>>> other RFs Copied: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTree.java (from r1522216, james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java) URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTree.java?p2=james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTree.java&p1=james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java&r1=1522216&r2=1522217&rev=1522217&view=diff ============================================================================== --- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java (original) +++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTree.java Thu Sep 12 03:32:28 2013 @@ -17,15 +17,16 @@ * under the License. * ****************************************************************/ -package org.apache.hupa.server.service; +package org.apache.hupa.client.ui; -import java.util.List; +import com.google.gwt.user.cellview.client.CellTree; +import com.google.gwt.view.client.TreeViewModel; -import javax.mail.MessagingException; +public class FolderTree extends CellTree { -import org.apache.hupa.shared.domain.ImapFolder; -import org.apache.hupa.shared.exception.HupaException; + public <T> FolderTree(TreeViewModel viewModel, T rootValue, Resources resources) { + super(viewModel, rootValue, resources); + // TODO Auto-generated constructor stub + } -public interface FetchFoldersService { - List<ImapFolder> fetch(ImapFolder folder, Boolean recursive) throws MessagingException, HupaException; } Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTreeViewModel.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTreeViewModel.java?rev=1522217&view=auto ============================================================================== --- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTreeViewModel.java (added) +++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderTreeViewModel.java Thu Sep 12 03:32:28 2013 @@ -0,0 +1,104 @@ +/**************************************************************** + * 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.client.ui; + +import java.util.List; + +import org.apache.hupa.client.rf.FetchFoldersRequest; +import org.apache.hupa.client.rf.HupaRequestFactory; +import org.apache.hupa.shared.domain.ImapFolder; + +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.Cell; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.view.client.AsyncDataProvider; +import com.google.gwt.view.client.HasData; +import com.google.gwt.view.client.ListDataProvider; +import com.google.gwt.view.client.Range; +import com.google.gwt.view.client.TreeViewModel; +import com.google.inject.Inject; +import com.google.web.bindery.requestfactory.shared.Receiver; + +public class FolderTreeViewModel implements TreeViewModel { + + @Inject protected HupaRequestFactory rf; + + /** + * Get the {@link NodeInfo} that provides the children of the specified + * value. + */ + public <T> NodeInfo<?> getNodeInfo(T value) { + return new DefaultNodeInfo<ImapFolder>(new ImapFolderListDataProvider((ImapFolder) value), + new AbstractCell<ImapFolder>() { + @Override + public void render(Context context, ImapFolder value, SafeHtmlBuilder sb) { + if (value != null) { + sb.appendEscaped(value.getName()); + } + } + }); + } + + private class ImapFolderListDataProvider extends AsyncDataProvider<ImapFolder> { + + public ImapFolderListDataProvider(ImapFolder folder) { + this.folder = folder; + } + + ImapFolder folder; + + @Override + public void addDataDisplay(HasData<ImapFolder> display) { + super.addDataDisplay(display); + + } + + @Override + protected void onRangeChanged(HasData<ImapFolder> display) { + rf.fetchFoldersRequest().fetch(folder).fire(new Receiver<List<ImapFolder>>() { + @Override + public void onSuccess(List<ImapFolder> response) { + if (response == null || response.size() == 0) { + updateRowCount(-1, true); + } else + updateRowData(0, response); + } + }); + + } + + } + + /** + * Check if the specified value represents a leaf node. Leaf nodes cannot be + * opened. + */ + public boolean isLeaf(Object value) { + if (value == null) + return false; + if (value instanceof ImapFolder) { + ImapFolder folder = (ImapFolder) value; + if (!folder.getHasChildren()) + return true; + } + return false; + } + +} Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java (original) +++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java Thu Sep 12 03:32:28 2013 @@ -132,14 +132,20 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.logical.shared.HasSelectionHandlers; import com.google.gwt.event.shared.EventBus; +import com.google.gwt.user.cellview.client.CellTree; +import com.google.gwt.user.cellview.client.TreeNode; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.DockPanel; +import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.Tree; import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.view.client.ProvidesKey; +import com.google.gwt.view.client.SingleSelectionModel; +import com.google.gwt.view.client.TreeViewModel; import com.google.inject.Inject; /** * MainView acts like a container of other widgets which will get displayed after the user successfully logged in @@ -180,10 +186,11 @@ public class WestView extends Composite private EventBus bus; private PagingScrollTableRowDragController controller; protected User user; - + private TreeViewModel viewModel; @Inject - public WestView(EventBus bus, PagingScrollTableRowDragController controllerProvider, HupaConstants constants, HupaMessages messages) { + public WestView(FolderTreeViewModel viewModel, EventBus bus, PagingScrollTableRowDragController controllerProvider, HupaConstants constants, HupaMessages messages) { + this.viewModel = viewModel; this.constants = constants; this.messages = messages; this.controller = controllerProvider; @@ -230,6 +237,7 @@ public class WestView extends Composite >>>>>>> Change to new mvp framework - first step ======= west.setWidth("100%"); +<<<<<<< HEAD >>>>>>> decorate the theme initWidget(west); } @@ -237,6 +245,36 @@ public class WestView extends Composite private void createWest() { <<<<<<< HEAD <<<<<<< HEAD +======= +// initWidget(west); + cellTree = new FolderTree(viewModel, null, res); + putCellTree(); + + } + + public final ProvidesKey<ImapFolder> KEY_PROVIDER = new ProvidesKey<ImapFolder>() { + @Override + public Object getKey(ImapFolder item) { + return item == null ? null : item.getFullName(); + } + }; + CellTree.Resources res = GWT.create(CellTree.BasicResources.class); + final SingleSelectionModel<ImapFolder> selectionModel = + new SingleSelectionModel<ImapFolder>(KEY_PROVIDER); + CellTree cellTree; + FlowPanel panel = new FlowPanel(); + private void putCellTree() { + +// TreeNode rootNode = cellTree.getRootTreeNode(); +// TreeNode firstPlaylist = rootNode.setChildOpen(0, true); +// firstPlaylist.setChildOpen(0, true); + initWidget(cellTree); + cellTree.setAnimationEnabled(true); + + } + + private void createWest() { +>>>>>>> Fix issue #15. west = new VerticalPanel(); <<<<<<< HEAD ======= Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/ioc/GuiceServerModule.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/ioc/GuiceServerModule.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/ioc/GuiceServerModule.java (original) +++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/ioc/GuiceServerModule.java Thu Sep 12 03:32:28 2013 @@ -60,10 +60,15 @@ import org.apache.hupa.server.service.De import org.apache.hupa.server.service.DeleteMessageByUidService; import org.apache.hupa.server.service.DeleteMessageByUidServiceImpl; <<<<<<< HEAD +<<<<<<< HEAD import org.apache.hupa.server.service.FetchFoldersService; import org.apache.hupa.server.service.FetchFoldersServiceImpl; ======= >>>>>>> delete messages, make WestActivity Singleton +======= +import org.apache.hupa.server.service.FetchFoldersService; +import org.apache.hupa.server.service.FetchFoldersServiceImpl; +>>>>>>> Fix issue #15. import org.apache.hupa.server.service.FetchMessagesService; import org.apache.hupa.server.service.FetchMessagesServiceImpl; import org.apache.hupa.server.service.GetMessageDetailsService; @@ -430,6 +435,7 @@ public class GuiceServerModule extends A bind(ImapFolderService.class).to(ImapFolderServiceImpl.class); <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD bind(FetchFoldersService.class).to(FetchFoldersServiceImpl.class); bind(FetchMessagesService.class).to(FetchMessagesServiceImpl.class); bind(CreateFolderService.class).to(CreateFolderServiceImpl.class); @@ -458,6 +464,9 @@ public class GuiceServerModule extends A bind(UserPreferencesStorage.class).to(InImapUserPreferencesStorage.class); ======= ======= +======= + bind(FetchFoldersService.class).to(FetchFoldersServiceImpl.class); +>>>>>>> Fix issue #15. bind(FetchMessagesService.class).to(FetchMessagesServiceImpl.class); <<<<<<< HEAD >>>>>>> try to fetch messages, yet can not fire the login event in ModelTable >>>>>>> such that just get a NullPointerException in it. Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java (original) +++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersService.java Thu Sep 12 03:32:28 2013 @@ -24,8 +24,14 @@ import java.util.List; import javax.mail.MessagingException; import org.apache.hupa.shared.domain.ImapFolder; +<<<<<<< HEAD import org.apache.hupa.shared.exception.HupaException; public interface FetchFoldersService { List<ImapFolder> fetch(ImapFolder folder, Boolean recursive) throws MessagingException, HupaException; +======= + +public interface FetchFoldersService { + List<ImapFolder> fetch(ImapFolder folder) throws MessagingException; +>>>>>>> Fix issue #15. } Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersServiceImpl.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersServiceImpl.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersServiceImpl.java (original) +++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/FetchFoldersServiceImpl.java Thu Sep 12 03:32:28 2013 @@ -27,18 +27,25 @@ import javax.mail.MessagingException; import org.apache.hupa.shared.data.ImapFolderImpl; import org.apache.hupa.shared.domain.ImapFolder; +<<<<<<< HEAD import org.apache.hupa.shared.domain.User; import org.apache.hupa.shared.exception.HupaException; +======= +>>>>>>> Fix issue #15. import com.sun.mail.imap.IMAPStore; public class FetchFoldersServiceImpl extends AbstractService implements FetchFoldersService { @Override +<<<<<<< HEAD public List<ImapFolder> fetch(ImapFolder imapFolder, Boolean recursive) throws MessagingException, HupaException { if(recursive){ return this.pullAll(); } +======= + public List<ImapFolder> fetch(ImapFolder imapFolder) throws MessagingException { +>>>>>>> Fix issue #15. try { Folder folder = null; IMAPStore store = cache.get(getUser()); @@ -58,6 +65,7 @@ public class FetchFoldersServiceImpl ext throw new MessagingException(); } } +<<<<<<< HEAD public List<ImapFolder> pullAll() throws MessagingException, HupaException { User user = getUser(); @@ -131,10 +139,13 @@ public class FetchFoldersServiceImpl ext return iFolder; } +======= +>>>>>>> Fix issue #15. /** * Create a new IMAPFolder from the given Folder * +<<<<<<< HEAD * @param folder * Current folder * @return imapFolder Created IMAPFolder @@ -145,11 +156,23 @@ public class FetchFoldersServiceImpl ext * If an error occurs */ private ImapFolder createImapFolder(Folder folder) throws HupaException { +======= + * @param folder Current folder + * @return imapFolder Created IMAPFolder + * @throws Exception If an error occurs + * @throws MessagingException If an error occurs + */ + private ImapFolder createImapFolder(Folder folder) { +>>>>>>> Fix issue #15. String fullName = folder.getFullName(); String delimiter; ImapFolder iFolder = null; try { +<<<<<<< HEAD System.out.println("Creating folder2: " + fullName + " for user: " + this.getUser()); +======= + System.out.println("Creating folder: " + fullName + " for user: "); +>>>>>>> Fix issue #15. delimiter = String.valueOf(folder.getSeparator()); iFolder = new ImapFolderImpl(fullName); iFolder.setDelimiter(delimiter); @@ -158,7 +181,11 @@ public class FetchFoldersServiceImpl ext iFolder.setMessageCount(folder.getMessageCount()); iFolder.setSubscribed(folder.isSubscribed()); iFolder.setUnseenMessageCount(folder.getUnreadMessageCount()); +<<<<<<< HEAD if (folder.list().length != 0) { +======= + if(folder.list().length != 0){ +>>>>>>> Fix issue #15. iFolder.setHasChildren(true); } } catch (MessagingException e) { Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderServiceImpl.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderServiceImpl.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderServiceImpl.java (original) +++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderServiceImpl.java Thu Sep 12 03:32:28 2013 @@ -133,8 +133,8 @@ public class ImapFolderServiceImpl exten try { IMAPStore store = cache.get(user); com.sun.mail.imap.IMAPFolder folder = (com.sun.mail.imap.IMAPFolder) store.getDefaultFolder(); - - // List of mail 'root' imap folders TODO can not make this as a field of the class, or the client will get more and more appended folders. + + // List of mail 'root' imap folders List<ImapFolder> imapFolders = new ArrayList<ImapFolder>(); // Create IMAPFolder tree list for (Folder f : folder.list()) { Modified: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/ImapFolderImpl.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/ImapFolderImpl.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/ImapFolderImpl.java (original) +++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/ImapFolderImpl.java Thu Sep 12 03:32:28 2013 @@ -158,6 +158,7 @@ public class ImapFolderImpl implements I private int messageCount; private int unseenMessageCount; private boolean subscribed = false; + private boolean hasChildren = false; public ImapFolderImpl() { } @@ -374,6 +375,19 @@ public class ImapFolderImpl implements I folder.setUnseenMessageCount(this.unseenMessageCount); } +<<<<<<< HEAD >>>>>>> fix AllDelete feature in issue 11. and scrub some code +======= + @Override + public boolean getHasChildren() { + return hasChildren; + } + + @Override + public void setHasChildren(boolean hasChildren){ + this.hasChildren = hasChildren; + } + +>>>>>>> Fix issue #15. } Modified: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/domain/ImapFolder.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/domain/ImapFolder.java?rev=1522217&r1=1522216&r2=1522217&view=diff ============================================================================== --- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/domain/ImapFolder.java (original) +++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/domain/ImapFolder.java Thu Sep 12 03:32:28 2013 @@ -40,6 +40,9 @@ public interface ImapFolder extends Valu void setDelimiter(String delimiter); void setSubscribed(boolean subscribed); boolean getSubscribed(); + + boolean getHasChildren(); + void setHasChildren(boolean hasChildren); /** * use this to proxy the dumping method, or an alternative to clone, for the ValueProxy's must be set/get-ter --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org