Package jetbrains.communicator.core.impl.dispatcher

Source Code of jetbrains.communicator.core.impl.dispatcher.LocalMessageDispatcherImpl$MyEventsListener

/*
* Copyright 2000-2006 JetBrains s.r.o.
*
* 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 jetbrains.communicator.core.impl.dispatcher;

import jetbrains.communicator.core.EventBroadcaster;
import jetbrains.communicator.core.EventVisitor;
import jetbrains.communicator.core.IDEtalkAdapter;
import jetbrains.communicator.core.IDEtalkEvent;
import jetbrains.communicator.core.dispatcher.LocalMessage;
import jetbrains.communicator.core.dispatcher.LocalMessageDispatcher;
import jetbrains.communicator.core.dispatcher.Message;
import jetbrains.communicator.core.transport.TransportEvent;
import jetbrains.communicator.core.users.User;
import jetbrains.communicator.core.users.UserModel;
import jetbrains.communicator.ide.IDEFacade;
import jetbrains.communicator.ide.OwnMessageEvent;
import org.jetbrains.annotations.NonNls;
import org.picocontainer.Disposable;

import javax.swing.*;
import java.util.Date;

/**
* @author Kir
*/
public class LocalMessageDispatcherImpl extends AbstractMessageDispatcher implements LocalMessageDispatcher, Disposable {
  @NonNls
  private static final String FILE_NAME = "pendingLocalMessages.xml";

  private final MyEventsListener myListener;
  private final IDEFacade myFacade;
  private final UserModel myUserModel;
  private final MessageHistory myHistory;

  public LocalMessageDispatcherImpl(EventBroadcaster eventBroadcaster, IDEFacade facade, UserModel userModel) {
    super(eventBroadcaster, facade.getCacheDir());

    myFacade = facade;
    myUserModel = userModel;
    myListener = new MyEventsListener(eventBroadcaster);
    myHistory = new MessageHistory(facade, userModel);
    load();
  }

  @Override
  public void dispose() {
    myHistory.dispose();
    myListener.dispose();
    super.dispose();
  }

  @Override
  protected String getEventsFileName() {
    return FILE_NAME;
  }


  @Override
  public void addPendingMessage(User user, LocalMessage message) {
    super.addPendingMessage(user, message);
  }

  @Override
  public Icon getBlinkingIcon() {
    LocalMessage localMessage = getMessageWhichRequireIconBlinking();
    if (localMessage != null) {
      return localMessage.getMessageIcon(0);
    }
    return null;
  }

  @Override
  public int countPendingMessages() {
    int result = 0;
    for (User usersWithMessage : getUsersWithMessages()) {
      result += getPendingMessages(usersWithMessage).length;
    }
    return result;
  }

  private LocalMessage getMessageWhichRequireIconBlinking() {
    User[] usersWithMessages = getUsersWithMessages();
    if (usersWithMessages.length > 0) {
      return (LocalMessage)getPendingMessages(usersWithMessages[0])[0];
    }
    return null;
  }


  @Override
  protected boolean performDispatch(User user, Message message) {
    boolean result = super.performDispatch(user, message);
    if (result) {
      myHistory.addMessage(user, (LocalMessage)message);
    }
    return result;
  }

  @Override
  public LocalMessage[] getHistory(User user, Date since) {
    return myHistory.getHistory(user, since);
  }

  @Override
  public void clearHistory() {
    myHistory.clear();
  }

  @Override
  public boolean isHistoryEmpty() {
    return myHistory.isEmpty();
  }

  private class MyEventsListener extends IDEtalkAdapter {
    private final EventBroadcaster myEventBroadcaster;

    MyEventsListener(EventBroadcaster eventBroadcaster) {
      myEventBroadcaster = eventBroadcaster;
      myEventBroadcaster.addListener(this);
    }

    public void dispose() {
      myEventBroadcaster.removeListener(this);
    }

    @Override
    public void afterChange(IDEtalkEvent event) {
      //noinspection RefusedBequest
      event.accept(new EventVisitor() {
        @Override
        public void visitTransportEvent(TransportEvent event) {
          User user = event.createUser(myUserModel);
          addPendingMessage(user, myFacade.createLocalMessageForIncomingEvent(event));
        }

        @Override
        public void visitOwnMessageEvent(OwnMessageEvent event) {
          sendNow(event.getTargetUser(), myFacade.createLocalMessageForOutgoingEvent(event));
        }
      });
    }
  }
}
TOP

Related Classes of jetbrains.communicator.core.impl.dispatcher.LocalMessageDispatcherImpl$MyEventsListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.