/*
* 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.repositories;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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 RepositoryViewItem implements IViewItem {
private Object object;
private IAdaptable[] values = new IAdaptable[0];
private RepositoryViewItem parent;
private Map<Object, RepositoryViewItem> childs = new HashMap<Object, RepositoryViewItem>();
public RepositoryViewItem() {
}
protected RepositoryViewItem(RepositoryViewItem parent, Object object) {
this.parent = parent;
this.object = object;
this.values = new IAdaptable[] {
new IAdaptable() {
@Override
@SuppressWarnings("unchecked")
public Object getAdapter(Class adapter) {
if (RepositoryViewItem.this.object != null) {
if (adapter.isAssignableFrom(RepositoryViewItem.this.object.getClass())) {
return RepositoryViewItem.this.object;
}
if (adapter.isAssignableFrom(String.class)) {
return RepositoryViewItem.this.object.toString();
}
}
return null;
}
},
};
}
/* (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() {
Collection<RepositoryViewItem> c = childs.values();
return c.toArray(new IViewItem[c.size()]);
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.views.IViewItem#getParent()
*/
@Override
public IViewItem getParent() {
return parent;
}
public boolean hasChild(Object object) {
return childs.containsKey(object);
}
public RepositoryViewItem getChild(Object object) {
return childs.get(object);
}
public RepositoryViewItem createChild(Object object) {
RepositoryViewItem viewItem = new RepositoryViewItem(this, object);
childs.put(object, viewItem);
return viewItem;
}
public void removeChild(Object object) {
childs.remove(object);
}
public Iterator<RepositoryViewItem> iterator() {
return childs.values().iterator();
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.views.IViewItem#getValues()
*/
@Override
public IAdaptable[] getValues() {
return values;
}
public void setValues(IAdaptable[] values) {
this.values = values;
}
public Object getObject() {
return object;
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
*/
@Override
@SuppressWarnings("unchecked")
public Object getAdapter(Class adapter) {
if (object != null && adapter.isAssignableFrom(object.getClass())) {
return object;
}
if (object instanceof IAdaptable) {
Object obj = ((IAdaptable) object).getAdapter(adapter);
if (obj != null) {
return obj;
}
}
if (adapter.isAssignableFrom(getClass())) {
return this;
}
if (object instanceof IAdaptable) {
return AdapterManager.getDefault().getAdapter(object, 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 * (object != null ? object.hashCode() : 0) + 11 * (parent != null ? parent.hashCode() : 0);
}
}