/* * Copyright 2008-2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.eclipse.datatools.enablement.simpledb.internal.ui.explorer; import java.util.Iterator; import java.util.Set; import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual.ColumnNode; import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.providers.content.virtual.VirtualNodeServiceFactory; import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode; import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.SQLModelContentProviderExtension; import org.eclipse.datatools.modelbase.sql.schema.Catalog; import org.eclipse.datatools.modelbase.sql.schema.Database; import org.eclipse.datatools.modelbase.sql.schema.Schema; import org.eclipse.datatools.modelbase.sql.tables.Column; import org.eclipse.datatools.modelbase.sql.tables.Table; import org.eclipse.ui.navigator.IPipelinedTreeContentProvider; import org.eclipse.ui.navigator.PipelinedShapeModification; import org.eclipse.ui.navigator.PipelinedViewerUpdate; /** * This class is a content provider implementation for navigatorContent extensions. This class provides SQL model * content to the navigator. */ public class SimpleDBContentProviderExtension extends SQLModelContentProviderExtension implements IPipelinedTreeContentProvider { public static final String DOMAINS = "Domains"; //$NON-NLS-1$ public static final String DB_DEFINITION_VENDOR = "SimpleDB"; //$NON-NLS-1$ public SimpleDBContentProviderExtension() { super(); } public Object[] getChildren(final Object parentElement) { return new Object[0]; } public boolean hasChildren(final Object element) { return false; } public void getPipelinedChildren(final Object parent, final Set theCurrentChildren) { } public void getPipelinedElements(final Object anInput, final Set theCurrentElements) { } public Object getPipelinedParent(final Object anObject, final Object suggestedParent) { return suggestedParent; } public boolean interceptRefresh(final PipelinedViewerUpdate refreshSynchronization) { return false; } public PipelinedShapeModification interceptRemove(final PipelinedShapeModification removeModification) { return removeModification; } public boolean interceptUpdate(final PipelinedViewerUpdate anUpdateSynchronization) { return false; } public PipelinedShapeModification interceptAdd(final PipelinedShapeModification anAddModification) { //anAddModification.getChildren().clear(); if (anAddModification.getParent() instanceof Database && DB_DEFINITION_VENDOR.equals(((Database) anAddModification.getParent()).getVendor())) { try { Database db = (Database) anAddModification.getParent(); Schema schema = ((Schema) ((Catalog) db.getCatalogs().get(0)).getSchemas().get(0)); anAddModification.getChildren().clear(); IVirtualNode domains = VirtualNodeServiceFactory.INSTANCE.makeTableNode(DOMAINS, DOMAINS, db); domains.addChildren(schema.getTables()); anAddModification.getChildren().add(domains); } catch (Exception e) { // strange broken tree, nothing to mangle } } if (anAddModification.getParent() instanceof Table) { Iterator it = anAddModification.getChildren().iterator(); while (it.hasNext()) { Object o = it.next(); if (!(o instanceof ColumnNode)) { it.remove(); } } } if (anAddModification.getParent() instanceof Column) { anAddModification.getChildren().clear(); } return anAddModification; } }