/* * Copyright (c) 2004-2011 Marco Maccaferri 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: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.ui.internal.navigator; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.internal.runtime.AdapterManager; import org.eclipse.core.runtime.IAdaptable; import org.eclipsetrader.core.views.IViewItem; import org.eclipsetrader.core.views.IViewItemVisitor; @SuppressWarnings("restriction") public class NavigatorViewItem implements IViewItem { private Object reference; private NavigatorViewItem parent; private List<NavigatorViewItem> childs = new ArrayList<NavigatorViewItem>(); public NavigatorViewItem() { } public NavigatorViewItem(NavigatorViewItem parent, Object reference) { this.parent = parent; this.reference = reference; } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IViewItem#getItemCount() */ @Override public int getItemCount() { return childs != null ? childs.size() : 0; } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IViewItem#getItems() */ @Override public IViewItem[] getItems() { return childs.toArray(new IViewItem[childs.size()]); } protected void setItems(NavigatorViewItem[] items) { childs.clear(); for (NavigatorViewItem viewItem : items) { childs.add(viewItem); viewItem.parent = this; } } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IViewItem#getParent() */ @Override public IViewItem getParent() { return parent; } /** * Checks if the given reference object is a child of the receiver. * * @param reference the reference object. * @return <code>true</code> if it is a child. */ public boolean hasChild(Object reference) { for (NavigatorViewItem viewItem : childs) { if (viewItem.getReference().equals(reference)) { return true; } } return false; } /** * Returns the <code>WatchListViewItem</code> that holds the given reference object. * * @param reference the reference object. * @return the <code>WatchListViewItem</code> that holds the object, or <code>null</code>. */ public NavigatorViewItem getChild(Object reference) { for (NavigatorViewItem viewItem : childs) { if (viewItem.getReference().equals(reference)) { return viewItem; } } return null; } /** * Creates a <code>WatchListViewItem</code> that is a child of the receiver. * * @param reference the object to associate to the new item. * @return the new <code>WatchListViewItem</code>. */ public NavigatorViewItem createChild(Object reference) { NavigatorViewItem viewItem = new NavigatorViewItem(this, reference); childs.add(viewItem); return viewItem; } protected void addChild(NavigatorViewItem viewItem) { childs.add(viewItem); viewItem.parent = this; } public void removeChild(Object reference) { for (NavigatorViewItem viewItem : childs) { if (viewItem.getReference().equals(reference)) { childs.remove(viewItem); break; } } } public Iterator<NavigatorViewItem> iterator() { return childs.iterator(); } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IViewItem#getValues() */ @Override public IAdaptable[] getValues() { return new IAdaptable[0]; } public Object getReference() { return reference; } /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ @Override @SuppressWarnings("unchecked") public Object getAdapter(Class adapter) { if (reference != null && adapter.isAssignableFrom(reference.getClass())) { return reference; } if (reference instanceof IAdaptable) { Object obj = ((IAdaptable) reference).getAdapter(adapter); if (obj != null) { return obj; } } if (adapter.isAssignableFrom(getClass())) { return this; } if (reference instanceof IAdaptable) { return AdapterManager.getDefault().getAdapter(reference, adapter); } return null; } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IViewItem#accept(org.eclipsetrader.core.views.IViewItemVisitor) */ @Override public void accept(IViewItemVisitor visitor) { if (visitor.visit(this)) { for (IViewItem viewItem : getItems()) { viewItem.accept(visitor); } } } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return 7 * (reference != null ? reference.hashCode() : 0) + 11 * (parent != null ? parent.hashCode() : 0); } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return reference != null ? reference.toString() : super.toString(); } }