// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataprofiler.core.ui.wizard.analysis.table;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.talend.core.model.repository.Folder;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.cwm.helper.CatalogHelper;
import org.talend.cwm.helper.SchemaHelper;
import org.talend.dataprofiler.core.ui.views.provider.ResourceViewContentProvider;
import org.talend.dq.nodes.DBConnectionFolderRepNode;
import org.talend.dq.nodes.DBTableFolderRepNode;
import org.talend.dq.nodes.DBTableRepNode;
import org.talend.dq.nodes.DBViewFolderRepNode;
import org.talend.repository.model.IRepositoryNode;
import org.talend.repository.model.IRepositoryNode.ENodeType;
import org.talend.repository.model.RepositoryNode;
import org.talend.resource.ResourceManager;
import orgomg.cwm.resource.relational.ColumnSet;
/**
* DOC xqliu class global comment. Detailled comment
*/
public class TableContentProvider extends ResourceViewContentProvider {
// private static Logger log = Logger.getLogger(TableContentProvider.class);
public TableContentProvider() {
super();
}
@Override
public Object[] getChildren(Object parentElement) {
List<RepositoryNode> analyzeNode = new ArrayList<RepositoryNode>();
if (parentElement instanceof DBTableFolderRepNode || parentElement instanceof DBViewFolderRepNode) {
// return ((IRepositoryNode) parentElement).getChildren().toArray();
return super.getChildren(parentElement);
} else if (parentElement instanceof IContainer) {
IContainer container = (IContainer) parentElement;
if (ResourceManager.isMetadataFolder(container)) {
IRepositoryViewObject viewObject = new Folder(((IFolder) container).getName(), ((IFolder) container).getName());
IRepositoryNode node = new RepositoryNode(viewObject, null, ENodeType.SYSTEM_FOLDER);
viewObject.setRepositoryNode(node);
Object[] children = super.getChildren(node);
// if analyze Connection/Catalog/Schema,now only surpport DB type klliu 2011-01-28
for (Object object : children) {
if (object instanceof DBConnectionFolderRepNode) {
analyzeNode.add((RepositoryNode) object);
}
}
return analyzeNode.toArray();
}
}
return super.getChildren(parentElement);
}
@Override
public Object[] getElements(Object object) {
return this.getChildren(object);
}
@Override
public Object getParent(Object element) {
if (element instanceof IContainer) {
return ((IContainer) element).getParent();
}
return super.getParent(element);
}
@Override
public boolean hasChildren(Object element) {
return !(element instanceof DBTableRepNode);
}
/**
* This class will combine catlogName and columnSetName as a key.
*
* FIXME this inner class should be static. Confirm and fix the error.
*/
class CatalogSchemaKey {
private final String catalogName;
private final String schemaName;
public CatalogSchemaKey(ColumnSet columnSet) {
this.schemaName = SchemaHelper.getParentSchema(columnSet) == null ? "" //$NON-NLS-1$
: SchemaHelper.getParentSchema(columnSet).getName();
this.catalogName = CatalogHelper.getParentCatalog(columnSet) == null ? "" //$NON-NLS-1$
: CatalogHelper.getParentCatalog(columnSet).getName();
}
@Override
public int hashCode() {
final int prime = 22;
int result = 1;
result = prime * result + ((schemaName == null) ? 0 : schemaName.hashCode());
result = prime * result + ((catalogName == null) ? 0 : catalogName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final CatalogSchemaKey other = (CatalogSchemaKey) obj;
if (catalogName == null) {
if (other.catalogName != null) {
return false;
}
} else if (!catalogName.equals(other.catalogName)) {
return false;
}
if (schemaName == null) {
if (other.schemaName != null) {
return false;
}
} else if (!schemaName.equals(other.schemaName)) {
return false;
}
return true;
}
}
}