/* * 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.msghistory; import net.java.sip.communicator.service.contactsource.*; import net.java.sip.communicator.service.protocol.*; import java.util.*; import java.util.regex.*; /** * The query which creates source contacts and uses the values stored in * <tt>MessageSourceService</tt>. * * @author Damian Minkov */ public class MessageSourceContactQuery extends AsyncContactQuery<MessageSourceService> { /** * Constructs. * * @param messageSourceService */ MessageSourceContactQuery(MessageSourceService messageSourceService) { super(messageSourceService, Pattern.compile("", Pattern.CASE_INSENSITIVE | Pattern.LITERAL), false); } /** * Creates <tt>MessageSourceContact</tt> for all currently cached * recent messages in the <tt>MessageSourceService</tt>. */ @Override public void run() { getContactSource().updateRecentMessages(); } /** * Updates capabilities from <tt>EventObject</tt> for the found * <tt>MessageSourceContact</tt> equals to the <tt>Object</tt> supplied. * Note that Object may not be <tt>MessageSourceContact</tt>, but its * equals method can return true for message source contact instances. * @param srcObj used to search for <tt>MessageSourceContact</tt> * @param eventObj the values used for the update */ public void updateCapabilities(Object srcObj, EventObject eventObj) { for(SourceContact msc : getQueryResults()) { if(srcObj.equals(msc) && msc instanceof MessageSourceContact) { ((MessageSourceContact)msc).initDetails(eventObj); break; } } } /** * Updates capabilities from <tt>Contact</tt> for the found * <tt>MessageSourceContact</tt> equals to the <tt>Object</tt> supplied. * Note that Object may not be <tt>MessageSourceContact</tt>, but its * equals method can return true for message source contact instances. * @param srcObj used to search for <tt>MessageSourceContact</tt> * @param contact the values used for the update */ public void updateCapabilities(Object srcObj, Contact contact) { for(SourceContact msc : getQueryResults()) { if(srcObj.equals(msc) && msc instanceof MessageSourceContact) { ((MessageSourceContact)msc).initDetails(false, contact); break; } } } /** * Notifies the <tt>ContactQueryListener</tt>s registered with this * <tt>ContactQuery</tt> that a <tt>SourceContact</tt> has been * changed. * Note that Object may not be <tt>MessageSourceContact</tt>, but its * equals method can return true for message source contact instances. * * @param srcObj the <tt>Object</tt> representing a recent message * which has been changed and corresponding <tt>SourceContact</tt> * which the registered <tt>ContactQueryListener</tt>s are to be * notified about */ public void updateContact(Object srcObj, EventObject eventObject) { for(SourceContact msc : getQueryResults()) { if(srcObj.equals(msc) && msc instanceof MessageSourceContact) { ((MessageSourceContact)msc).update(eventObject); super.fireContactChanged(msc); break; } } } /** * Notifies the <tt>ContactQueryListener</tt>s registered with this * <tt>ContactQuery</tt> that a <tt>SourceContact</tt> has been * changed. * Note that Object may not be <tt>MessageSourceContact</tt>, but its * equals method can return true for message source contact instances. * * @param srcObj the <tt>Object</tt> representing a recent message * which has been changed and corresponding <tt>SourceContact</tt> * which the registered <tt>ContactQueryListener</tt>s are to be * notified about */ public void fireContactChanged(Object srcObj) { for(SourceContact msc : getQueryResults()) { if(srcObj.equals(msc) && msc instanceof MessageSourceContact) { super.fireContactChanged(msc); break; } } } /** * Notifies the <tt>ContactQueryListener</tt>s registered with this * <tt>ContactQuery</tt> that a <tt>SourceContact</tt> has been * changed. * Note that Object may not be <tt>MessageSourceContact</tt>, but its * equals method can return true for message source contact instances. * * @param srcObj the <tt>Object</tt> representing a recent message * which has been changed and corresponding <tt>SourceContact</tt> * which the registered <tt>ContactQueryListener</tt>s are to be * notified about */ public void updateContactStatus(Object srcObj, PresenceStatus status) { for(SourceContact msc : getQueryResults()) { if(srcObj.equals(msc) && msc instanceof MessageSourceContact) { ((MessageSourceContact)msc).setStatus(status); super.fireContactChanged(msc); break; } } } /** * Notifies the <tt>ContactQueryListener</tt>s registered with this * <tt>ContactQuery</tt> that a <tt>SourceContact</tt> has been * changed. * Note that Object may not be <tt>MessageSourceContact</tt>, but its * equals method can return true for message source contact instances. * * @param srcObj the <tt>Object</tt> representing a recent message * which has been changed and corresponding <tt>SourceContact</tt> * which the registered <tt>ContactQueryListener</tt>s are to be * notified about */ public void updateContactDisplayName(Object srcObj, String newName) { for(SourceContact msc : getQueryResults()) { if(srcObj.equals(msc) && msc instanceof MessageSourceContact) { ((MessageSourceContact)msc).setDisplayName(newName); super.fireContactChanged(msc); break; } } } /** * Notifies the <tt>ContactQueryListener</tt>s registered with this * <tt>ContactQuery</tt> that a <tt>SourceContact</tt> has been * removed. * Note that Object may not be <tt>MessageSourceContact</tt>, but its * equals method can return true for message source contact instances. * * @param srcObj representing the message and its corresponding * <tt>SourceContact</tt> which has been removed and which the registered * <tt>ContactQueryListener</tt>s are to be notified about */ public void fireContactRemoved(Object srcObj) { for(SourceContact msc : getQueryResults()) { if(srcObj.equals(msc)) { super.fireContactRemoved(msc); break; } } } /** * Adds a specific <tt>SourceContact</tt> to the list of * <tt>SourceContact</tt>s to be returned by this <tt>ContactQuery</tt> in * response to {@link #getQueryResults()}. * * @param sourceContact the <tt>SourceContact</tt> to be added to the * <tt>queryResults</tt> of this <tt>ContactQuery</tt> * @return <tt>true</tt> if the <tt>queryResults</tt> of this * <tt>ContactQuery</tt> has changed in response to the call */ public boolean addQueryResult(SourceContact sourceContact) { return super.addQueryResult(sourceContact, false); } }