// ============================================================================ // // 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.repository.ui.actions.metadata; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.talend.commons.ui.runtime.image.EImage; import org.talend.commons.ui.runtime.image.ImageProvider; import org.talend.core.model.metadata.builder.connection.AbstractMetadataObject; import org.talend.core.model.metadata.builder.connection.CDCConnection; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.metadata.builder.connection.MetadataTable; import org.talend.core.model.metadata.builder.connection.Query; import org.talend.core.model.metadata.builder.connection.SAPFunctionUnit; import org.talend.core.model.properties.ConnectionItem; import org.talend.core.model.properties.ContextItem; import org.talend.core.model.properties.DatabaseConnectionItem; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.JobletProcessItem; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryContentHandler; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.repository.RepositoryContentManager; import org.talend.core.model.update.RepositoryUpdateManager; import org.talend.core.repository.model.ISubRepositoryObject; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.repository.model.repositoryObject.MetadataTableRepositoryObject; import org.talend.repository.ProjectManager; import org.talend.repository.i18n.Messages; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.IRepositoryNode.ENodeType; import org.talend.repository.model.RepositoryConstants; import org.talend.repository.model.RepositoryNode; import org.talend.repository.ui.actions.AContextualAction; /** * ggu class global comment. Detailled comment */ public class DetecteViewImpactAction extends AContextualAction { private static final String LABEL = Messages.getString("DetecteViewImpactAction.Label"); //$NON-NLS-1$ private boolean onlySimpleShow; /** * ggu DetectedModificationAction constructor comment. */ public DetecteViewImpactAction() { setText(LABEL); setToolTipText(LABEL); setImageDescriptor(ImageProvider.getImageDesc(EImage.REFRESH_ICON)); } public boolean isOnlySimpleShow() { return onlySimpleShow; } /** * * cli Comment method "setOnlySimpleShow". * * only work for impact analysis */ public void setOnlySimpleShow(boolean onlySimpleShow) { this.onlySimpleShow = onlySimpleShow; } /* * (non-Javadoc) * * @see org.talend.commons.ui.swt.actions.ITreeContextualAction#init(org.eclipse.jface.viewers.TreeViewer, * org.eclipse.jface.viewers.IStructuredSelection) */ public void init(TreeViewer viewer, IStructuredSelection selection) { boolean canWork = !selection.isEmpty() && selection.size() == 1; if (canWork) { IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance(); if (factory.isUserReadOnlyOnCurrentProject()) { canWork = false; } else { Object o = selection.getFirstElement(); RepositoryNode node = (RepositoryNode) o; ENodeType nodeType = node.getType(); switch (nodeType) { case REPOSITORY_ELEMENT: ERepositoryObjectType objectType = node.getObjectType(); if (objectType == ERepositoryObjectType.METADATA_CON_TABLE) { IRepositoryViewObject repositoryObject = node.getObject(); if (repositoryObject != null) { Item item2 = repositoryObject.getProperty().getItem(); if (item2 instanceof DatabaseConnectionItem) { DatabaseConnectionItem item = (DatabaseConnectionItem) repositoryObject.getProperty().getItem(); DatabaseConnection connection = (DatabaseConnection) item.getConnection(); CDCConnection cdcConns = connection.getCdcConns(); if (cdcConns != null) { if (repositoryObject instanceof MetadataTableRepositoryObject) { MetadataTable table = ((MetadataTableRepositoryObject) repositoryObject).getTable(); String tableType = table.getTableType(); canWork = RepositoryConstants.TABLE.equals(tableType); break; } } } } canWork = true; } else if (objectType == ERepositoryObjectType.METADATA_CON_QUERY || objectType == ERepositoryObjectType.METADATA_CONNECTIONS || objectType == ERepositoryObjectType.METADATA_FILE_DELIMITED || objectType == ERepositoryObjectType.METADATA_FILE_POSITIONAL || objectType == ERepositoryObjectType.METADATA_FILE_REGEXP || objectType == ERepositoryObjectType.METADATA_FILE_XML || objectType == ERepositoryObjectType.METADATA_FILE_LDIF || objectType == ERepositoryObjectType.METADATA_FILE_EXCEL || objectType == ERepositoryObjectType.METADATA_SAPCONNECTIONS || objectType == ERepositoryObjectType.METADATA_FILE_EBCDIC || objectType == ERepositoryObjectType.METADATA_FILE_HL7 || objectType == ERepositoryObjectType.METADATA_VALIDATION_RULES || objectType == ERepositoryObjectType.METADATA_FILE_FTP || objectType == ERepositoryObjectType.METADATA_FILE_BRMS || objectType == ERepositoryObjectType.METADATA_MDMCONNECTION || objectType == ERepositoryObjectType.CONTEXT || objectType == ERepositoryObjectType.JOBLET) { canWork = true; } else { Object obj = selection.getFirstElement(); RepositoryNode nodeObj = (RepositoryNode) obj; Item item = nodeObj.getObject().getProperty().getItem(); for (IRepositoryContentHandler handler : RepositoryContentManager.getHandlers()) { ERepositoryObjectType stype = handler.getRepositoryObjectType(item); if (stype == objectType) { canWork = true; break; } } if (RepositoryContentManager.getHandlers().size() < 0) { canWork = false; } } break; default: canWork = false; } RepositoryNode parent = node.getParent(); if (canWork && parent != null && parent.isBin()) { canWork = false; } if (canWork && !ProjectManager.getInstance().isInCurrentMainProject(node)) { canWork = false; } } } setEnabled(canWork); } @Override protected void doRun() { RepositoryNode node = getCurrentRepositoryNode(); if (node == null) { return; } if (node.getObject() instanceof ISubRepositoryObject) { ISubRepositoryObject subObject = (ISubRepositoryObject) node.getObject(); if (subObject != null) { // schema AbstractMetadataObject metadataObject = subObject.getAbstractMetadataObject(); if (metadataObject instanceof MetadataTable) { RepositoryUpdateManager.updateSchema((MetadataTable) metadataObject, node, false, isOnlySimpleShow()); } else // query if (metadataObject instanceof Query) { RepositoryUpdateManager.updateQuery((Query) metadataObject, node, false, isOnlySimpleShow()); } else // sap function if (metadataObject instanceof SAPFunctionUnit) { RepositoryUpdateManager.updateSAPFunction((SAPFunctionUnit) metadataObject, false, isOnlySimpleShow()); } } } else if (node.getObject() instanceof IRepositoryViewObject) { IRepositoryViewObject object = (IRepositoryViewObject) node.getObject(); if (object != null) { Item item = object.getProperty().getItem(); if (item != null) { // context if (item instanceof ContextItem) { RepositoryUpdateManager.updateContext((ContextItem) item, false, isOnlySimpleShow()); } else // connection if (item instanceof ConnectionItem) { Connection connection = ((ConnectionItem) item).getConnection(); if (connection instanceof DatabaseConnection) { RepositoryUpdateManager.updateDBConnection((ConnectionItem) item, false, isOnlySimpleShow()); } else { RepositoryUpdateManager.updateFileConnection((ConnectionItem) item, false, isOnlySimpleShow()); } } else // joblet if (item instanceof JobletProcessItem) { RepositoryUpdateManager.updateJoblet((JobletProcessItem) item, false, isOnlySimpleShow()); } } } } } }