/* * 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.Collections; import java.util.List; import org.eclipse.wst.server.core.IServer; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.runtime.DqpPlugin; import org.teiid.designer.runtime.spi.ITeiidDataSource; import org.teiid.designer.runtime.spi.ITeiidServer; import org.teiid.designer.runtime.spi.ITeiidServerManager; import org.teiid.designer.runtime.spi.ITeiidTranslator; import org.teiid.designer.runtime.spi.ITeiidVdb; import org.teiid.designer.runtime.ui.DqpUiConstants; import org.teiid.designer.runtime.ui.views.TeiidServerContentProvider; /** * @param <T> * @since 8.0 */ public class TeiidServerContainerNode<T extends ITeiidResourceNode> extends TeiidContentNode<T> implements ITeiidContainerNode<T> { private List<ITeiidContentNode<TeiidServerContainerNode>> children; private ITeiidServer teiidServer; private TeiidServerContentProvider provider; private TeiidErrorNode error; private ITeiidServerManager serverManager; /** * @param server */ protected TeiidServerContainerNode(T parent, TeiidServerContentProvider provider) { super(parent, parent.getTeiidServer().getDisplayName()); this.teiidServer = parent.getTeiidServer(); this.provider = provider; this.serverManager = DqpPlugin.getInstance().getServerManager(); } private void clearError() { if (error != null) { error.dispose(); error = null; } } @Override public T getContainer() { return super.getContainer(); } @Override public boolean hasChildren() { return children != null && ! children.isEmpty(); } @Override public final List<? extends ITeiidContentNode<?>> getChildren() { if (error != null) { return Collections.singletonList(error); } return children; } private void clearChildren() { clearError(); if (children != null) { for (ITeiidContentNode<TeiidServerContainerNode> child : children) { child.dispose(); } children.clear(); children = null; } } protected void setError(TeiidErrorNode error) { clearError(); this.error = error; } @Override public void dispose() { clearChildren(); super.dispose(); } @Override public final void load() { clearChildren(); if (getServer().getServerState() != IServer.STATE_STARTED) { setError(new TeiidErrorNode(this, teiidServer, DqpUiConstants.UTIL.getString(TeiidServerContainerNode.class.getSimpleName() + ".ServerContentLabelNotConnected"))); //$NON-NLS-1$ return; } if (!teiidServer.isConnected()) { return; } children = new ArrayList<ITeiidContentNode<TeiidServerContainerNode>>(); try { // hide Data Sources related variables from other local variables DATA_SOURCES: { Collection<ITeiidDataSource> dataSources = teiidServer.getDataSources(); if (provider.isShowDataSources() && ! dataSources.isEmpty()) { List<ITeiidDataSource> filteredDataSources = new ArrayList<ITeiidDataSource>(dataSources.size()); for (ITeiidDataSource dataSource : dataSources) { // Either we are showing preview data source or dataSource is not a preview // Check if preview data source name contains this workspace UUID if( dataSource.isPreview()) { if( dataSource.getName().contains(ModelerCore.workspaceUuid().toString())) { filteredDataSources.add(dataSource); } } else { filteredDataSources.add(dataSource); } } if (!filteredDataSources.isEmpty()) { children.add(new DataSourcesFolder(this, filteredDataSources)); } } break DATA_SOURCES; } // hide VDBs related variables from other local variables VDBS: { Collection<ITeiidVdb> vdbs = teiidServer.getVdbs(); if (provider.isShowVDBs() && ! vdbs.isEmpty()) { List<ITeiidVdb> filteredVdbs = new ArrayList<ITeiidVdb>(vdbs.size()); for (ITeiidVdb vdb : vdbs) { // Either we are showing preview vdb or VDB is not a preview // Check if preview VDB's name contains this workspace UUID if( vdb.isPreviewVdb() ) { if( vdb.getName().contains(ModelerCore.workspaceUuid().toString())) { filteredVdbs.add(vdb); } } else { filteredVdbs.add(vdb); } } if (!filteredVdbs.isEmpty()) { children.add(new VdbsFolder(this, filteredVdbs)); } } break VDBS; } // hide translators related variables from other local variables TRANSLATORS: { Collection<ITeiidTranslator> translators; if (provider.isShowTranslators()) { translators = new ArrayList<ITeiidTranslator>(teiidServer.getTranslators()); if (!translators.isEmpty()) { children.add(new TranslatorsFolder(this, translators)); } } else { translators = Collections.emptyList(); } break TRANSLATORS; } clearError(); } catch (Exception e) { setError(new TeiidErrorNode(this, teiidServer, DqpUiConstants.UTIL.getString(TeiidServerContainerNode.class.getSimpleName() + ".ServerContentLabelNotConnected"))); //$NON-NLS-1$ DqpPlugin.Util.log(e); } } /** * Get this container's Teiid Instance * * @return {@link ITeiidServer} */ public ITeiidServer getTeiidServer() { return teiidServer; } @Override public String getName() { ITeiidServer defaultServer = serverManager.getDefaultServer(); int serverCount = serverManager.getServers().size(); String name = super.getName(); if (getTeiidServer() != null && serverCount > 1 && getTeiidServer() == defaultServer) { name = name + " " + DqpUiConstants.UTIL.getString(TeiidServerContainerNode.class.getSimpleName() + ".ServerContentLabelDefault"); //$NON-NLS-1$ //$NON-NLS-2$ } return name; } @Override public String toString() { if (teiidServer == null) return DqpUiConstants.UTIL.getString(TeiidResourceNode.class.getSimpleName() + ".labelNotConnected"); //$NON-NLS-1$ String ttip = teiidServer.toString(); if( teiidServer.getConnectionError() != null ) { ttip = ttip + "\n\n" + teiidServer.getConnectionError(); //$NON-NLS-1$ } return ttip; } }