/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.java.sip.communicator.impl.protocol.jabber.extensions.mailnotification;
import java.util.*;
import net.java.sip.communicator.util.*;
import org.jivesoftware.smack.packet.*;
/**
* A straightforward extension of the IQ. A Mailbox object is created via the
* MailboxProvider. It contains all the information we need to notify the user
* about a new E-Mail message.
*
* @author Matthieu Helleringer
* @author Alain Knaebel
* @author Emil Ivov
*/
public class MailboxIQ extends IQ
{
/**
* Logger for this class
*/
private static final Logger logger =
Logger.getLogger(MailboxIQ.class);
/**
* A list of threads that this mailbox IQ refers to.
*/
private List<MailThreadInfo> threads = null;
/**
* The time these results were generated, in milliseconds since the
* UNIX epoch. This value should be cached and sent as the newer-than-time
* attribute in the next email query.
* not used for the moment
*/
private long resultTime;
/**
* Number of unread messages.
*/
private int totalMatched;
/**
* A number indicating whether total-matched is just an estimate:
* 1 indicates it is; 0 or omitted indicates that it is not.
*/
private boolean totalEstimate;
/**
* Indicates the URL of the email server
*/
private String url;
/**
* Indicates the date of the most recent email message.
*/
private long date;
/**
* The name space for new mail notification packets.
*/
public static final String NAMESPACE = "google:mail:notify";
/**
* The name of the element that Google use to transport new mail
* notifications.
*/
public static final String ELEMENT_NAME = "mailbox";
/**
* Sets the date of the most recent unread mail content on the mail server,
* in milliseconds since the UNIX epoch.
*
* @param date the date long
*/
public void setDate(long date)
{
this.date = date;
}
/**
* Returns the date of the most recent unread mail content on the mail
* server, in milliseconds since the UNIX epoch.
*
* @return the date of the most recent unread mail content on the mail
* server, in milliseconds since the UNIX epoch.
*/
public long getDate()
{
return this.date;
}
/**
* Returns the time when these results were generated, in milliseconds
* since the UNIX epoch.
*
* @return the time when these results were generated, in milliseconds
* since the UNIX epoch.
*/
public long getResultTime()
{
return resultTime;
}
/**
* Sets the time these results were generated, in milliseconds since the
* UNIX epoch.
*
* @param l the resultTime long
*/
public void setResultTime(long l)
{
this.resultTime = l;
}
/**
* Returns the number of unread mail messages
*
* @return the total number of matched (unread) mail messages
*/
public int getTotalMatched()
{
return totalMatched;
}
/**
* Specifies the number of unread mail messages.
*
* @param totalMatched the number of matched mail messages
*/
public void setTotalMatched(int totalMatched)
{
this.totalMatched = totalMatched;
}
/**
* Determines whether the total of unread mail messages is an estimate or
* not.
*
* @return <tt>true</tt> if the total number of mail messages is an estimate
* and <tt>false</tt> otherwise.
*/
public boolean isTotalEstimate()
{
return totalEstimate;
}
/**
* Specifies whether the total number of unread mail messages contained in
* this object is an estimate or a precise count.
*
* @param totalEstimate <tt>true</tt> if the number of total messages here
* is an estimate and <tt>false</tt> otherwise.
*/
public void setTotalEstimate(boolean totalEstimate)
{
this.totalEstimate = totalEstimate;
}
/**
* Returns the sub-element XML section of the IQ packet, or null if
* there isn't one. Packet extensions must be included, if any are defined.
*
* @return the child element section of the IQ XML.
*/
@Override
public String getChildElementXML()
{
if (logger.isDebugEnabled())
logger.debug("Mailbox.getChildElementXML usage");
String totalString = totalEstimate ? " total-estimate='1' " : "";
return "<mailbox result-time='" + resultTime + "' total-matched='"
+ totalMatched + "'" + totalString + "/>";
}
/**
* Specifies an HTTP URL of the mail server that contains the messages
* indicated in this Mailbox IQ.
*
* @param url the http URL where users could check the messages that this
* IQ refers to.
*/
public void setUrl(String url)
{
this.url = url;
}
/**
* Returns the http URL of the mail server containing the messages that
* this IQ refers to.
*
* @return the http URL of the mail server containing the messages that
* this IQ refers to.
*/
public String getUrl()
{
return url;
}
/**
* Adds a thread info element to the list of threads that this
* <tt>MailboxIQ</tt> is referring to.
*
* @param threadInfo the new thread info instance that we should add to the
* thread list.
*/
public void addThread(MailThreadInfo threadInfo)
{
if(threads == null)
threads = new LinkedList<MailThreadInfo>();
threads.add(threadInfo);
}
/**
* Returns the number of threads that are currently in this
* <tt>MailboxIQ</tt>.
*
* @return the number of threads currently in this <tt>MailboxIQ</tt>.
*/
public int getThreadCount()
{
return threads.size();
}
/**
* Returns the list of threads that this <tt>MailboxIQ</tt> refers to.
*
* @return the list of threads that this <tt>MailboxIQ</tt> refers to.
*/
public Iterator<MailThreadInfo> threads()
{
return threads.iterator();
}
}