5 Replies Latest reply on Jan 10, 2007 2:51 AM by denpet

    A component that shows only the root conversations

    sguimont

      If we have theses conversations (with nested conversations (>)):
      A1 > A2 > A3
      B1 > B2
      C1

      With the conversationList component you will see every conversations.
      A1
      A2
      A3
      B1
      B2
      C1

      With the new component below you will see only the root conversations:
      A3
      B2
      C1

      My customer prefered to see only the root conversation and not the entire active conversations :-)

      @Scope(ScopeType.PAGE)
      @Name("rootConversationList")
      @Intercept(NEVER)
      public class RootConversationList implements Serializable {
      
       private List<ConversationEntry> conversationEntryList;
      
       @Create
       public void createConversationEntryList() {
       Map<String, ConversationEntry> map = Manager.instance().getConversationIdEntryMap();
       Set<ConversationEntry> orderedEntries = new TreeSet<ConversationEntry>();
      
       orderedEntries.addAll(map.values());
      
       // Accumulates nested conversations
       Set<String> nestedConversationEntrySet = new HashSet<String>();
       for (ConversationEntry entry : orderedEntries) {
       if (entry.isDisplayable() && !Seam.isSessionInvalid()) {
       boolean skip = true;
      
       for (String conversationId : entry.getConversationIdStack()) {
       // The first nested conversation is always itself so we skip this one
       if (!skip) {
       nestedConversationEntrySet.add(conversationId);
       }
      
       skip = false;
       }
       }
       }
      
       this.conversationEntryList = new ArrayList<ConversationEntry>(map.size());
       for (ConversationEntry entry : orderedEntries) {
       if (entry.isDisplayable() && !nestedConversationEntrySet.contains(entry.getId()) && !Seam.isSessionInvalid()) {
       this.conversationEntryList.add(entry);
       }
       }
       }
      
       @Unwrap
       public List<ConversationEntry> getConversationEntryList() {
       return this.conversationEntryList;
       }
      }