1   package com.atlassian.mail;
2   
3   import com.atlassian.mail.server.MailServerManager;
4   
5   import java.util.ArrayList;
6   import java.util.EnumSet;
7   import java.util.List;
8   
9   /**
10   * This enum represents common mail protocols
11   * It consists of the protocol, default port and the class of mail protocol
12   *
13   * @since v4.3
14   */
15  public enum MailProtocol
16  {
17      SMTP("smtp", "25", MailServerManager.SERVER_TYPES[1]),
18      SECURE_SMTP("smtps", "465", MailServerManager.SERVER_TYPES[1]),
19      POP("pop3", "110", MailServerManager.SERVER_TYPES[0]),
20      SECURE_POP("pop3s", "995", MailServerManager.SERVER_TYPES[0]),
21      IMAP("imap", "143", MailServerManager.SERVER_TYPES[0]),
22      SECURE_IMAP("imaps", "993", MailServerManager.SERVER_TYPES[0]);
23  
24      private final String protocol;
25      private final String defaultPort;
26      private final String mailServerType;
27  
28      MailProtocol(String protocol, String defaultPort, String serverType)
29      {
30          this.protocol = protocol;
31          this.defaultPort = defaultPort;
32          this.mailServerType = serverType;
33      }
34  
35      public String getProtocol()
36      {
37          return protocol;
38      }
39  
40      public String getDefaultPort()
41      {
42          return defaultPort;
43      }
44  
45      public String getMailServerType()
46      {
47          return mailServerType;     
48      }
49      
50      public static MailProtocol getMailProtocol(String protocol) {
51          MailProtocol mailProtocol  = null;
52          for (final  MailProtocol element: EnumSet.allOf(MailProtocol.class))
53          {
54              if(element.getProtocol().equals(protocol)) {
55                  mailProtocol = element;
56                  break;
57              }
58          }
59          return mailProtocol;
60      }
61  
62      public static MailProtocol[] getMailProtocolsForServerType(String serverType)
63      {
64          final List<MailProtocol> mailProtocols = new ArrayList<MailProtocol>();
65          for (final  MailProtocol element: EnumSet.allOf(MailProtocol.class))
66          {
67              if(element.getMailServerType().equals(serverType)) {
68                  mailProtocols.add(element);
69              }
70          }
71          return mailProtocols.toArray(new MailProtocol[mailProtocols.size()]);
72      }
73  }