psmith      2003/08/28 16:55:43

  Modified:    src/java/org/apache/log4j/chainsaw ReceiversPanel.java
  Log:
  * Added support for creating SocketHubReceiver via GUI
  * Refactored the generic Receiver creation process slightly, added separators 
between Receivers with different first characters.
  * Updated some docs
  
  Revision  Changes    Path
  1.7       +85 -31    
jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java
  
  Index: ReceiversPanel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ReceiversPanel.java       29 Jun 2003 22:54:31 -0000      1.6
  +++ ReceiversPanel.java       28 Aug 2003 23:55:42 -0000      1.7
  @@ -54,6 +54,8 @@
   import org.apache.log4j.chainsaw.icons.ChainsawIcons;
   import org.apache.log4j.helpers.LogLog;
   import org.apache.log4j.net.SocketAppender;
  +import org.apache.log4j.net.SocketHubAppender;
  +import org.apache.log4j.net.SocketHubReceiver;
   import org.apache.log4j.net.SocketNodeEventListener;
   import org.apache.log4j.net.SocketReceiver;
   import org.apache.log4j.net.UDPAppender;
  @@ -87,11 +89,15 @@
   
   import java.net.URL;
   
  +import java.util.ArrayList;
   import java.util.Collection;
  +import java.util.Collections;
  +import java.util.Comparator;
   import java.util.HashMap;
   import java.util.Iterator;
   import java.util.List;
   import java.util.Map;
  +import java.util.Map.Entry;
   
   import javax.swing.AbstractAction;
   import javax.swing.Action;
  @@ -147,8 +153,9 @@
     private final Runnable updateReceiverTree;
   
     ReceiversPanel(final LogUI logui) {
  -    super(new BorderLayout());
  +    super();
       this.logui = logui;
  +    setLayout(new BorderLayout());
       setBorder(BorderFactory.createEtchedBorder());
   
       setPreferredSize(new Dimension(250, 400));
  @@ -480,7 +487,8 @@
     }
   
     /**
  -   *
  +   * Sets the state of actions depending on certain conditions (i.e what is 
  +   * currently selected etc.)
      */
     private void updateActions() {
       Object object = getCurrentlySelectedUserObject();
  @@ -573,44 +581,34 @@
     class NewReceiverPopupMenu extends JPopupMenu {
       NewReceiverPopupMenu() {
         try {
  -        Class[] receivers =
  -          new Class[] { SocketReceiver.class, UDPReceiver.class };
  -
  -        final Map dialogMap = new HashMap();
  -        dialogMap.put(
  -          SocketReceiver.class,
  -          new CreateReceiverDialog(
  -            SocketReceiver.class, "SocketReceiver", "Socket Receiver",
  -            new SimplePortBasedReceiverDialogPanel(
  -              SocketReceiver.class, "SocketReceiver",
  -              SocketAppender.DEFAULT_PORT)));
  -
  -        dialogMap.put(
  -          UDPReceiver.class,
  -          new CreateReceiverDialog(
  -            UDPReceiver.class, "UDPReceiver", "UDP Receiver",
  -            new SimplePortBasedReceiverDialogPanel(
  -              UDPReceiver.class, "UDPReceiver", UDPAppender.DEFAULT_PORT)));
   
  -        for (int i = 0; i < receivers.length; i++) {
  -          final Class toCreate = receivers[i];
  +        final List dialogMapEntryList = createSortedDialogMapEntryList();
  +        String separatorCheck = null;
  +        for (Iterator iter = dialogMapEntryList.iterator(); iter.hasNext();) {
  +          final Map.Entry entry = (Entry) iter.next();
  +          final Class toCreate = (Class) entry.getKey();
             Package thePackage = toCreate.getPackage();
             final String name =
               toCreate.getName().substring(thePackage.getName().length() + 1);
  +            
  +          if(separatorCheck==null)
  +          {
  +            separatorCheck = name.substring(0,1);
  +          }else{
  +            String current = name.substring(0,1);
  +            if(!current.equals(separatorCheck))
  +            {
  +              addSeparator();
  +              separatorCheck = current;
  +            }
  +          }
             add(
               new AbstractAction("New " + name + "...") {
                 public void actionPerformed(ActionEvent e) {
  -                if (dialogMap.containsKey(toCreate)) {
  -                  JDialog dialog = (JDialog) dialogMap.get(toCreate);
  +                  JDialog dialog = (JDialog) entry.getValue();
                     dialog.pack();
                     dialog.setLocationRelativeTo(logui);
                     dialog.show();
  -                } else {
  -                  JOptionPane.showMessageDialog(
  -                    logui,
  -                    "You wanted a " + name
  -                    + " but this is not finished yet, sorry.");
  -                }
                 }
               });
           }
  @@ -631,6 +629,63 @@
           throw new RuntimeException(e.getMessage());
         }
       }
  +
  +  /**
  +   * Creates a Map of Class->CreateReceiverDialog instances
  +   * which are all the Receivers that can be created via the GUI
  +   * @return
  +   * @throws IOException
  +   */
  +    private List createSortedDialogMapEntryList() throws IOException
  +    {
  +      final Map dialogMap = new HashMap();
  +      dialogMap.put(
  +        SocketReceiver.class,
  +        new CreateReceiverDialog(
  +          SocketReceiver.class, "SocketReceiver", "Socket Receiver",
  +          new SimplePortBasedReceiverDialogPanel(
  +            SocketReceiver.class, "SocketReceiver",
  +            SocketAppender.DEFAULT_PORT)));
  +
  +      dialogMap.put(
  +        SocketHubReceiver.class,
  +        new CreateReceiverDialog(
  +        SocketHubReceiver.class, "SocketHubReceiver", "Socket Hub Receiver",
  +          new SimplePortBasedReceiverDialogPanel(
  +      SocketHubReceiver.class, "SocketHubReceiver",
  +            SocketHubAppender.DEFAULT_PORT)));
  +      
  +      dialogMap.put(
  +        UDPReceiver.class,
  +        new CreateReceiverDialog(
  +          UDPReceiver.class, "UDPReceiver", "UDP Receiver",
  +          new SimplePortBasedReceiverDialogPanel(
  +            UDPReceiver.class, "UDPReceiver", UDPAppender.DEFAULT_PORT)));
  +      
  +      List dialogMapEntryList = new ArrayList();
  +      
  +      for (Iterator iter = dialogMap.entrySet().iterator(); iter.hasNext();)
  +      {
  +        dialogMapEntryList.add(iter.next());
  +      }
  +
  +      /**
  +       * Sort so it's in Alpha order by map.entry key
  +       */      
  +      Collections.sort(dialogMapEntryList, new Comparator(){
  +
  +        public int compare(Object o1, Object o2)
  +        {
  +          Comparable c1 = ((Class)((Entry) o1).getKey()).getName();
  +          Comparable c2 = ((Class)((Entry) o2).getKey()).getName();
  +          
  +          return c1.compareTo(c2);
  +
  +        }
  +        
  +      });
  +      return dialogMapEntryList;
  +    }
     }
   
     /**
  @@ -932,7 +987,6 @@
             }
           };
   
  -      okAction.setEnabled(false);
         okCancelPanel.setOkAction(okAction);
   
         entryPanel.addPropertyChangeListener(
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to