/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.runtime.ui.views.content; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.wst.server.core.IServer; import org.teiid.designer.runtime.spi.ITeiidServer; /** * @param <V> actual business objects this folder has as children * * @since 8.0 */ public abstract class AbstractTeiidFolder<V> implements ITeiidContainerNode<TeiidServerContainerNode> { private TeiidServerContainerNode parentNode; private Collection<V> theValues; private ITeiidServer teiidServer; private List<ITeiidContentNode<? extends ITeiidContainerNode<?>>> children; /** * Create new instance * * @param parentNode * @param theValues */ public AbstractTeiidFolder(TeiidServerContainerNode parentNode, Collection<V> theValues) { this.parentNode = parentNode; this.teiidServer = parentNode.getTeiidServer(); this.theValues = theValues; } @Override public IServer getServer() { return teiidServer != null ? teiidServer.getParent() : null; } /** * Get the {@link ITeiidServer} that this folder belongs to * * @return teiidServer */ public ITeiidServer getTeiidServer() { return teiidServer; } @Override public ITeiidResourceNode getParent() { return parentNode != null ? parentNode.getParent() : null; } @Override public TeiidServerContainerNode getContainer() { return parentNode; } @Override public void load() { clearChildren(); if (getTeiidServer() == null || !getTeiidServer().isConnected()) { return; } children = new ArrayList<ITeiidContentNode<? extends ITeiidContainerNode<?>>>(); for (V value : theValues) { TeiidDataNode dataNode = new TeiidDataNode(this, value); children.add(dataNode); } } @Override public List<? extends ITeiidContentNode<?>> getChildren() { return children; } @Override public boolean hasChildren() { return children != null && ! children.isEmpty(); } private void clearChildren() { if (children != null) { for (ITeiidContentNode<? extends ITeiidContainerNode<?>> child : children) { child.dispose(); } children.clear(); children = null; } } @Override public String toString() { return getName(); } @Override public void dispose() { this.parentNode = null; this.teiidServer = null; this.theValues = null; } }