// ============================================================================ // // Copyright (C) 2006-2012 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.core.repository.model.repositoryObject; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Set; import org.eclipse.emf.common.util.EList; import org.talend.core.model.metadata.MetadataTable; import org.talend.core.model.metadata.builder.connection.AbstractMetadataObject; import org.talend.core.model.metadata.builder.connection.Concept; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.MDMConnection; import org.talend.core.model.metadata.builder.connection.SAPFunctionUnit; import org.talend.core.model.metadata.builder.connection.SalesforceModuleUnit; import org.talend.core.model.properties.ConnectionItem; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.Property; import org.talend.core.model.properties.User; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.repository.model.ISubRepositoryObject; import org.talend.cwm.helper.ConnectionHelper; import org.talend.cwm.helper.SubItemHelper; import org.talend.cwm.helper.SwitchHelpers; import org.talend.cwm.relational.TdTable; import org.talend.repository.model.ERepositoryStatus; import org.talend.repository.model.IRepositoryNode; import orgomg.cwm.objectmodel.core.ModelElement; import orgomg.cwm.objectmodel.core.Package; /** * DOC nrousseau class global comment. Detailled comment */ public class MetadataTableRepositoryObject extends MetadataTable implements ISubRepositoryObject { protected final IRepositoryViewObject viewObject; private IRepositoryNode repositoryNode; public IRepositoryViewObject getViewObject() { return this.viewObject; } protected org.talend.core.model.metadata.builder.connection.MetadataTable table; public MetadataTableRepositoryObject(IRepositoryViewObject repObj, org.talend.core.model.metadata.builder.connection.MetadataTable table) { this.viewObject = repObj; this.table = table; } public Property getProperty() { Property property = viewObject.getProperty(); // update table updateTable(property); return property; } // @Override public String getVersion() { return viewObject.getVersion(); } @Override public String getLabel() { return table.getLabel(); } @Override public String getId() { return table.getId(); } public String getTableType() { return table.getTableType(); } public org.talend.core.model.metadata.builder.connection.MetadataTable getTable() { return this.table; } public AbstractMetadataObject getAbstractMetadataObject() { return getTable(); } public void removeFromParent() { if (table.eContainer() instanceof SAPFunctionUnit) { SAPFunctionUnit funUnit = (SAPFunctionUnit) table.eContainer(); funUnit.getTables().remove(table); return; } if (table.eContainer() instanceof SalesforceModuleUnit) { SalesforceModuleUnit moduleUnit = (SalesforceModuleUnit) table.eContainer(); moduleUnit.getTables().remove(table); return; } if (table.getNamespace() instanceof Package) { Package pkg = (Package) table.getNamespace(); if (pkg.getOwnedElement().contains(table)) { pkg.getOwnedElement().remove(table); } } Property property = getProperty(); // remove mdm schema if (property == null) { return; } Connection connection = null; Item item = property.getItem(); if (item instanceof ConnectionItem) { ConnectionItem cItem = (ConnectionItem) item; connection = cItem.getConnection(); } if (connection instanceof MDMConnection) { EList schemas = ((MDMConnection) connection).getSchemas(); Iterator iterator2 = schemas.iterator(); while (iterator2.hasNext()) { Object object = iterator2.next(); if (object instanceof Concept) { Concept concept = (Concept) object; if (concept.getLabel() != null && concept.getLabel().equals(table.getLabel())) { iterator2.remove(); break; } } } } return; } private void updateTable(Property property) { if (property == null) { return; } Connection connection = null; Item item = property.getItem(); if (item instanceof ConnectionItem) { ConnectionItem cItem = (ConnectionItem) item; connection = cItem.getConnection(); } if (connection == null) { return; } Set tables = null; if (table.eContainer() instanceof SAPFunctionUnit) { SAPFunctionUnit funUnit = (SAPFunctionUnit) table.eContainer(); tables = ConnectionHelper.getTables(connection, funUnit); } else { tables = ConnectionHelper.getTables(connection); } if (tables != null) { Iterator iterator = tables.iterator(); while (iterator.hasNext()) { Object obj = iterator.next(); if (obj instanceof org.talend.core.model.metadata.builder.connection.MetadataTable) { org.talend.core.model.metadata.builder.connection.MetadataTable repObj = (org.talend.core.model.metadata.builder.connection.MetadataTable) obj; // MOD qiongli 2012-1-13 TDQ-4269. if (repObj == null || table.getLabel() == null || repObj.getLabel() == null || !table.getLabel().equals(repObj.getLabel())) { continue; } // if table name is same,should compare its parent name for TdTable TdTable doSwitch = SwitchHelpers.TABLE_SWITCH.doSwitch(table); if (doSwitch != null) { if (table.eContainer() instanceof ModelElement && repObj.eContainer() instanceof ModelElement) { ModelElement tableP = (ModelElement) table.eContainer(); ModelElement repObjP = (ModelElement) repObj.eContainer(); if (tableP.getName() != null && tableP.getName().equals(repObjP.getName())) { table = repObj; break; } } } else { table = repObj; break; } }// ~ } } } public User getAuthor() { return viewObject.getAuthor(); } public List<IRepositoryViewObject> getChildren() { return viewObject.getChildren(); } public Date getCreationDate() { return viewObject.getCreationDate(); } public String getDescription() { return viewObject.getDescription(); } public ERepositoryStatus getInformationStatus() { return viewObject.getInformationStatus(); } public Date getModificationDate() { return viewObject.getModificationDate(); } public String getPath() { return viewObject.getPath(); } public String getProjectLabel() { return viewObject.getProjectLabel(); } public String getPurpose() { return viewObject.getPurpose(); } public IRepositoryNode getRepositoryNode() { return this.repositoryNode; } public ERepositoryStatus getRepositoryStatus() { return viewObject.getRepositoryStatus(); } public String getStatusCode() { return viewObject.getStatusCode(); } public ERepositoryObjectType getRepositoryObjectType() { return ERepositoryObjectType.METADATA_CON_TABLE; } public boolean isDeleted() { return SubItemHelper.isDeleted(table); } public void setRepositoryNode(IRepositoryNode node) { this.repositoryNode = node; } public ModelElement getModelElement() { return this.table; } }