// ============================================================================
//
// 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());
}
}
}
}
}
}