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.mailbox;
017
018 /**
019 * Mailbox is a class that represents a mailbox for mail messages.
020 *
021 * @author Won Chul Doh
022 * @since Feb 2, 2010
023 *
024 */
025 public class Mailbox {
026
027 /**
028 * Delimiter string that separates mailbox's pathname from the names of
029 * immediate sub-mailboxes.
030 */
031 public static String folderSeparator = ".";
032
033 private long mailboxID;
034
035 private String name;
036
037 private long ownerID;
038
039 private long nextUID;
040
041 private long uidValidity;
042
043 private boolean noInferiors = false;
044
045 private boolean noSelect = false;
046
047 private boolean readOnly = false;
048
049 private boolean marked = false;
050
051 private boolean hasChildren = false;
052
053 public Mailbox() {
054 super();
055 }
056
057 public Mailbox(String name) {
058 super();
059 this.name = name;
060 }
061
062 public long getMailboxID() {
063 return mailboxID;
064 }
065
066 public void setMailboxID(long mailboxID) {
067 this.mailboxID = mailboxID;
068 }
069
070 /**
071 * Returns the full name of this mailbox. If the mailbox resides under the
072 * root hierarchy, the returned name may contain the hierarchy delimiter.
073 *
074 * @return name of the mailbox
075 */
076 public String getName() {
077 return name;
078 }
079
080 public void setName(String name) {
081 this.name = name;
082 }
083
084 public long getOwnerID() {
085 return ownerID;
086 }
087
088 public void setOwnerID(long ownerID) {
089 this.ownerID = ownerID;
090 }
091
092 /**
093 * Returns the predicted UID that will be assigned to the next message that
094 * is appended to this mailbox.
095 *
096 * @return the UIDNEXT value
097 */
098 public long getNextUID() {
099 return nextUID;
100 }
101
102 public void setNextUID(long nextUid) {
103 this.nextUID = nextUid;
104 }
105
106 /**
107 * Returns the UIDValidity for this mailbox.
108 */
109 public long getUidValidity() {
110 return uidValidity;
111 }
112
113 public void setUidValidity(long uidValidity) {
114 this.uidValidity = uidValidity;
115 }
116
117 /**
118 * Check whether this mailbox can have child mailboxes.
119 */
120 public boolean isNoInferiors() {
121 return noInferiors;
122 }
123
124 public void setNoInferiors(boolean noInferiors) {
125 this.noInferiors = noInferiors;
126 }
127
128 /**
129 * Check whether this mailbox can be selected.
130 */
131 public boolean isNoSelect() {
132 return noSelect;
133 }
134
135 public void setNoSelect(boolean noSelect) {
136 this.noSelect = noSelect;
137 }
138
139 /**
140 * Check whether this mailbox is read-only.
141 */
142 public boolean isReadOnly() {
143 return readOnly;
144 }
145
146 public void setReadOnly(boolean readOnly) {
147 this.readOnly = readOnly;
148 }
149
150 public boolean isMarked() {
151 return marked;
152 }
153
154 public void setMarked(boolean marked) {
155 this.marked = marked;
156 }
157
158 /**
159 * Check whether this mailbox has child mailboxes.
160 */
161 public boolean hasChildren() {
162 return hasChildren;
163 }
164
165 public void setHasChildren(boolean hasChildren) {
166 this.hasChildren = hasChildren;
167 }
168
169 /**
170 * Check if this mailbox is subsequent child of the given mailbox.
171 *
172 * @param mailbox
173 * potential parent mailbox
174 * @return true if child, otherwise false
175 */
176 public boolean isChildOf(Mailbox mailbox) {
177 return (mailbox != null) ? mailbox.getName().equals(getParent(name))
178 : false;
179 }
180
181 public Mailbox rename(String base, String dest) {
182 if (base.equals(name)) {
183 name = dest;
184 } else {
185 name = dest + folderSeparator + name.substring(base.length());
186 }
187 return this;
188 }
189
190 public boolean equals(Object obj) {
191 if (obj instanceof Mailbox)
192 return name.equals(((Mailbox) obj).getName());
193 else if (obj instanceof String)
194 return name.equals((String) obj);
195 else
196 return false;
197 }
198
199 /**
200 * Get the full name of parent mailbox for given mailbox.
201 *
202 * @param mailboxName
203 * full name of the mailbox
204 * @return full name of parent mailbox
205 */
206 public static String getParent(String mailboxName) {
207 int i;
208 if ((i = mailboxName.lastIndexOf(Mailbox.folderSeparator)) != -1) {
209 return mailboxName.substring(0, i);
210 } else {
211 return "";
212 }
213 }
214
215 }