// ============================================================================
//
// 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.core.runtime.Path;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.ui.runtime.image.EImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.core.CorePlugin;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.repository.model.repositoryObject.MetadataTableRepositoryObject;
import org.talend.core.repository.ui.actions.metadata.CopyToGenericSchemaHelper;
import org.talend.repository.ProjectManager;
import org.talend.repository.model.ERepositoryStatus;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.IRepositoryNode.EProperties;
import org.talend.repository.model.RepositoryNode;
import org.talend.repository.ui.actions.AContextualAction;
/**
* Administrator class global comment. Detailed comment <br/>
*
*/
public class CopyToGenericSchemaAction extends AContextualAction {
protected static final String LABEL = "Copy to Generic schema"; //$NON-NLS-1$
private boolean isAllowedRepositoryElement = false;
private RepositoryNode sourceNode;
private TreeViewer viewer;
public CopyToGenericSchemaAction() {
super();
this.setText(LABEL);
this.setToolTipText(LABEL);
this.setImageDescriptor(ImageProvider.getImageDesc(EImage.COPY_ICON));
}
public void init(final TreeViewer viewer, final IStructuredSelection selection) {
this.viewer = viewer;
setEnabled(false);
Object o = selection.getFirstElement();
if (selection.isEmpty() || selection.size() != 1 || o == null || !(o instanceof RepositoryNode)) {
return;
}
init((RepositoryNode) o);
if (ProxyRepositoryFactory.getInstance().isUserReadOnlyOnCurrentProject()) {
// setEnabled(false);
}
if (!ProjectManager.getInstance().isInCurrentMainProject((RepositoryNode) o)) {
setEnabled(false);
}
}
/**
* Administrator Comment method "init".
*
* @param node
*/
protected void init(RepositoryNode node) {
ERepositoryObjectType nodeType = (ERepositoryObjectType) node.getProperties(EProperties.CONTENT_TYPE);
if (nodeType == null || !(node.getObject() instanceof MetadataTableRepositoryObject)) {
return;
}
if (nodeType == ERepositoryObjectType.METADATA_CON_TABLE || nodeType == ERepositoryObjectType.METADATA_CON_VIEW
|| nodeType == ERepositoryObjectType.METADATA_CON_SYNONYM
|| nodeType == ERepositoryObjectType.METADATA_FILE_DELIMITED
|| nodeType == ERepositoryObjectType.METADATA_FILE_POSITIONAL
|| nodeType == ERepositoryObjectType.METADATA_FILE_REGEXP || nodeType == ERepositoryObjectType.METADATA_FILE_XML
|| nodeType == ERepositoryObjectType.METADATA_FILE_EXCEL
|| nodeType == ERepositoryObjectType.METADATA_LDAP_SCHEMA
|| nodeType == ERepositoryObjectType.METADATA_SALESFORCE_SCHEMA
|| nodeType == ERepositoryObjectType.METADATA_FILE_LDIF) {
} else {
return;
}
RepositoryNode genericNode = (RepositoryNode) CorePlugin.getDefault().getRepositoryService()
.getRootRepositoryNode(ERepositoryObjectType.METADATA_GENERIC_SCHEMA);
if (genericNode == null) {
return;
}
if (ProxyRepositoryFactory.getInstance().getStatus(node.getObject()) == ERepositoryStatus.DELETED) {
return;
}
switch (node.getType()) {
case REPOSITORY_ELEMENT:
isAllowedRepositoryElement = true;
this.sourceNode = node;
break;
default:
return;
}
setEnabled(true);
}
@Override
protected void doRun() {
if (isAllowedRepositoryElement) {
IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
try {
CopyToGenericSchemaHelper.copyToGenericSchema(factory, this.sourceNode.getObject(), new Path("")); //$NON-NLS-1$
} catch (PersistenceException e) {
// e.printStackTrace();
ExceptionHandler.process(e);
}
}
}
}