001 /* 002 * Copyright 2010 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package com.hs.mail.imap; 017 018 import java.util.Random; 019 020 import com.hs.mail.imap.mailbox.SelectedMailbox; 021 022 /** 023 * 024 * @author Won Chul Doh 025 * @since Feb 1, 2010 026 * 027 */ 028 public class ImapSession { 029 030 /** 031 * Enumerates RFC3501 session states. 032 */ 033 public enum State { 034 /** 035 * RFC3501 <code>3.1 Not Authenticated State</code> 036 */ 037 NON_AUTHENTICATED("NON_AUTHENTICATED"), 038 039 /** 040 * RFC3501 <code>3.2 Authenticated State</code> 041 */ 042 AUTHENTICATED("AUTHENTICATED"), 043 044 /** 045 * RFC3501 <code>3.3 Selected State</code> 046 */ 047 SELECTED("SELECTED"), 048 049 /** 050 * RFC3501 <code>3.4 Logout State</code> 051 */ 052 LOGOUT("LOGOUT"); 053 054 /** To aid debugging */ 055 private final String name; 056 057 private State(String name) { 058 this.name = name; 059 } 060 061 public String toString() { 062 return name; 063 } 064 } 065 066 private final static Random random = new Random(); 067 068 private long sessionID; 069 private State state = State.NON_AUTHENTICATED; 070 private long userID = -1; 071 private SelectedMailbox selectedMailbox = null; 072 073 public ImapSession() { 074 this.sessionID = random.nextLong(); 075 } 076 077 public long getSessionID() { 078 return sessionID; 079 } 080 081 public State getState() { 082 return state; 083 } 084 085 public long getUserID() { 086 return userID; 087 } 088 089 public SelectedMailbox getSelectedMailbox() { 090 return selectedMailbox; 091 } 092 093 public void authenticated() { 094 this.state = State.AUTHENTICATED; 095 } 096 097 public void authenticated(long userid) { 098 this.state = State.AUTHENTICATED; 099 this.userID = userid; 100 } 101 102 public void selected(SelectedMailbox mailbox) { 103 this.state = State.SELECTED; 104 close(); 105 this.selectedMailbox = mailbox; 106 } 107 108 public void deselect() { 109 this.state = State.AUTHENTICATED; 110 close(); 111 } 112 113 public void logout() { 114 this.state = State.LOGOUT; 115 close(); 116 } 117 118 private void close() { 119 if (this.selectedMailbox != null) { 120 this.selectedMailbox = null; 121 } 122 } 123 124 }