// ============================================================================ // // 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.dq.nodes; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.repository.model.repositoryObject.MetadataCatalogRepositoryObject; import org.talend.core.repository.model.repositoryObject.MetadataSchemaRepositoryObject; import org.talend.cwm.helper.CatalogHelper; import org.talend.dataquality.PluginConstant; import org.talend.repository.model.IRepositoryNode; import org.talend.repository.model.RepositoryNode; import orgomg.cwm.resource.relational.Catalog; import orgomg.cwm.resource.relational.Schema; /** * DOC klliu Database catalog repository node displayed on repository view (UI). */ public class DBCatalogRepNode extends DQRepositoryNode { private MetadataCatalogRepositoryObject metadataCatalogObject; private List<IRepositoryNode> schemaChildren; public Catalog getCatalog() { return this.metadataCatalogObject.getCatalog(); } /** * DOC klliu DBCatalogRepNode constructor comment. * * @param viewObject * @param parent if parent is null will try to create new one to insert of old parent. * @param type */ public DBCatalogRepNode(IRepositoryViewObject viewObject, RepositoryNode parent, ENodeType type, org.talend.core.model.general.Project inWhichProject) { super(viewObject, parent, type, inWhichProject); schemaChildren = new ArrayList<IRepositoryNode>(); if (viewObject instanceof MetadataCatalogRepositoryObject) { metadataCatalogObject = (MetadataCatalogRepositoryObject) viewObject; if (parent == null) { RepositoryNode createParentNode = createParentNode(); this.setParent(createParentNode); } } } /** * create the node of parent. * * @param object * @return */ private RepositoryNode createParentNode() { RepositoryNode dbParentRepNode = new DBConnectionRepNode(metadataCatalogObject.getViewObject(), null, ENodeType.TDQ_REPOSITORY_ELEMENT, getProject()); return dbParentRepNode; } /* * (non-Javadoc) * * @see org.talend.repository.model.RepositoryNode#getObject() */ @Override public IRepositoryViewObject getObject() { return metadataCatalogObject; } /* * (non-Jsdoc) * * @see org.talend.repository.model.RepositoryNode#getChildren() */ @Override public List<IRepositoryNode> getChildren() { MetadataCatalogRepositoryObject metadataCatalog = (MetadataCatalogRepositoryObject) getObject(); List<Schema> schemas = CatalogHelper.getSchemas(metadataCatalog.getCatalog()); // MOD gdbu 2011-7-1 bug : 22204 if (schemas != null && schemas.size() > 0) { return filterResultsIfAny(createRepositoryNodeSchema(schemas)); } else { // feature 22206 2011-7-12 msjian: fixed its note 91852 issue2 if (DQRepositoryNode.isUntilSchema()) { return createTableViewFolder(metadataCatalog); } return filterResultsIfAny(createTableViewFolder(metadataCatalog)); } // ~22204 } /** * DOC klliu Comment method "createTableViewFolder". * * @param metadataCatalog * @return */ private List<IRepositoryNode> createTableViewFolder(MetadataCatalogRepositoryObject metadataCatalog) { // IRepositoryViewObject viewObject = metadataCatalog.getViewObject(); List<IRepositoryNode> repsNodes = new ArrayList<IRepositoryNode>(); // table folder node under catalog DBTableFolderRepNode tableFloderNode = new DBTableFolderRepNode(null, this, ENodeType.TDQ_REPOSITORY_ELEMENT, getProject()); repsNodes.add(tableFloderNode); // view folder node under catalog DBViewFolderRepNode viewFolderNode = new DBViewFolderRepNode(null, this, ENodeType.TDQ_REPOSITORY_ELEMENT, getProject()); repsNodes.add(viewFolderNode); return repsNodes; } /** * Create SchemaRepositoryNode under CatalogRepositoryNode. * * @param node parent CatalogRepositoryNode * @param metadataCatalog parent CatalogViewObject * @param schema the schema should to be added under the catalog */ private List<IRepositoryNode> createRepositoryNodeSchema(List<Schema> schemas) { if (!schemaChildren.isEmpty()) { return schemaChildren; } for (Schema schema : schemas) { MetadataSchemaRepositoryObject metadataSchema = new MetadataSchemaRepositoryObject( ((MetadataCatalogRepositoryObject) getObject()).getViewObject(), schema); metadataSchema.setParentCatalogObject(metadataCatalogObject); RepositoryNode schemaNode = new DBSchemaRepNode(metadataSchema, this, ENodeType.TDQ_REPOSITORY_ELEMENT, getProject()); schemaNode.setProperties(EProperties.LABEL, ERepositoryObjectType.METADATA_CON_SCHEMA); schemaNode.setProperties(EProperties.CONTENT_TYPE, ERepositoryObjectType.METADATA_CON_SCHEMA); metadataSchema.setRepositoryNode(schemaNode); schemaChildren.add(schemaNode); } return schemaChildren; } /* * (non-Javadoc) * * @see org.talend.repository.model.RepositoryNode#getLabel() */ @Override public String getLabel() { if (getObject() == null) { return this.getProperties(EProperties.LABEL).toString(); } return this.getObject().getLabel(); } /* * (non-Javadoc) * * @see org.talend.repository.model.RepositoryNode#getDisplayText() */ @Override public String getDisplayText() { // MOD zshen to modify catalog name when connection is ODBC String catalogName = getObject().getLabel(); // MOD qiongli,vertica database is empty string when don't fill Database parameter in the creation wizard. if (PluginConstant.EMPTY_STRING.endsWith(catalogName)) { catalogName = PluginConstant.DEFAULT_STRING; } IPath catalogPath = new Path(catalogName); catalogName = catalogPath.removeFileExtension().lastSegment(); return catalogName; } }