blob: dc6387adeaecca9e4434e6e10191d356323f6241 [file] [log] [blame]
/*
* Copyright (c) 2007, 2008, 2010-2012 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.net4j.buddies.internal.ui;
import org.eclipse.net4j.buddies.common.ICollaboration;
import org.eclipse.net4j.buddies.common.IMembership;
import org.eclipse.net4j.internal.buddies.Self;
import org.eclipse.net4j.util.event.IEvent;
import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
import org.eclipse.net4j.util.ui.views.IElementFilter;
import org.eclipse.swt.graphics.Image;
import java.util.Collection;
/**
* @author Eike Stepper
*/
public class CollaborationsItemProvider extends AbstractItemProvider
{
public CollaborationsItemProvider()
{
}
public CollaborationsItemProvider(IElementFilter rootElementFilter)
{
super(rootElementFilter);
}
@Override
protected Node createNode(Node parent, Object element)
{
if (element instanceof Self)
{
return new SelfNode((Self)element);
}
if (element instanceof IMembership)
{
IMembership membership = (IMembership)element;
if (membership.getBuddy() instanceof Self)
{
return null;
}
}
return super.createNode(parent, element);
}
@Override
protected Node createMembershipNode(Node parent, IMembership membership)
{
return createLeafNode(parent, membership);
}
@Override
protected String getText(IMembership membership)
{
return getText(membership.getBuddy());
}
@Override
protected Image getImage(IMembership membership)
{
return getImage(membership.getBuddy());
}
/**
* @since 4.0
*/
@Override
public void refreshElement(Object element, boolean updateLabels)
{
super.refreshElement(null, updateLabels);
}
/**
* @author Eike Stepper
*/
private class SelfNode extends AbstractContainerNode implements IListener
{
private Self self;
public SelfNode(Self self)
{
super(null);
this.self = self;
}
@Override
public void dispose()
{
if (!isDisposed())
{
self.removeListener(containerListener);
super.dispose();
}
}
public Self getElement()
{
return self;
}
public void notifyEvent(IEvent event)
{
IMembership membership = (IMembership)event.getSource();
if (event instanceof ILifecycleEvent)
{
ILifecycleEvent e = (ILifecycleEvent)event;
if (e.getKind() == ILifecycleEvent.Kind.DEACTIVATED)
{
membership.removeListener(this);
ICollaboration collaboration = membership.getCollaboration();
Node node = getNode(collaboration);
if (node != null)
{
node.dispose();
}
}
}
}
@Override
protected Node addChild(Collection<Node> children, Object element)
{
IMembership membership = (IMembership)element;
membership.addListener(this);
return super.addChild(children, membership.getCollaboration());
}
}
}