/**
* Copyright (C) 2011, Starschema Ltd. <info at starschema.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
package org.talend.repository.sapwizard;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.util.Map;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.talend.core.model.metadata.ISAPConstant;
import org.talend.core.model.metadata.MetadataToolHelper;
import org.talend.core.model.process.EParameterFieldType;
import org.talend.core.model.process.IElementParameter;
import org.talend.core.model.process.INode;
import org.talend.core.model.properties.ConnectionItem;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.LinkRulesItem;
import org.talend.core.model.properties.Property;
import org.talend.core.model.properties.RulesItem;
import org.talend.core.model.properties.SAPConnectionItem;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.ui.ISAPProviderService;
import org.talend.core.ui.metadata.celleditor.EProcessTypeForRule;
import org.talend.core.ui.rule.AbstractRlueOperationChoice;
import org.talend.repository.UpdateRepositoryUtils;
import org.talend.repository.model.IMetadataService;
import org.talend.repository.model.IRepositoryNode;
import org.talend.repository.model.RepositoryNode;
import org.talend.repository.sapwizard.actions.CreateSAPTableAction;
import org.talend.repository.sapwizard.ui.wizard.SapWizard;
import org.talend.repository.ui.actions.metadata.AbstractCreateTableAction;
/**
* @author Ammu
*
*/
public class SAPProviderService implements ISAPProviderService, IMetadataService {
/*
* (non-Javadoc)
*
* @see org.talend.core.ui.ISAPProviderService#getRepositoryItem(org.talend.core .model.process.INode)
*/
public SAPConnectionItem getRepositoryItem(INode node) {
if (node != null) {
if (isSAPNode(node)) {
IElementParameter param = node.getElementParameter(ISAPConstant.PROPERTY);
IElementParameter typeParam = param.getChildParameters().get(ISAPConstant.PROPERTY_TYPE);
if (typeParam != null && ISAPConstant.REF_ATTR_REPOSITORY.equals(typeParam.getValue())) {
IElementParameter repositoryParam = param.getChildParameters().get(ISAPConstant.REPOSITORY_PROPERTY_TYPE);
final String value = (String) repositoryParam.getValue();
Item item = UpdateRepositoryUtils.getConnectionItemByItemId(value);
if (item != null && item instanceof SAPConnectionItem) {
return (SAPConnectionItem) item;
}
}
}
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.talend.core.ui.ISAPProviderService#isRepositorySchemaLine(org.talend .core.model.process.INode, java.util.Map)
*/
public boolean isRepositorySchemaLine(INode node, Map<String, Object> lineValue) {
if (lineValue != null && node != null) {
Object type = lineValue.get(ISAPConstant.FIELD_SCHEMA + ISAPConstant.REF_TYPE);
if (type != null && ISAPConstant.REF_ATTR_REPOSITORY.equals(type)) {
String value = (String) lineValue.get(ISAPConstant.FIELD_SCHEMA);
if (value != null && !value.isEmpty()) { //$NON-NLS-1$
if (MetadataToolHelper.getMetadataTableFromNodeLabel(node, value) != null) {
return true;
}
}
}
}
return false;
}
/*
* (non-Javadoc)
*
* @see org.talend.core.ui.ISAPProviderService#isSAPNode(org.talend.core.model .process.INode)
*/
public boolean isSAPNode(INode node) {
if (node != null) {
IElementParameter param = node.getElementParameter(ISAPConstant.PROPERTY);
if (param != null && param.getFieldType() == EParameterFieldType.PROPERTY_TYPE && ISAPConstant.REPOSITORY_VALUE.equals(param.getRepositoryValue())) {
return true;
}
}
return false;
}
@Override
public IWizard newWizard(IWorkbench workbench, boolean creation, RepositoryNode node, String[] existingNames) {
if (node == null) {
return null;
}
if (workbench == null) {
workbench = PlatformUI.getWorkbench();
}
return new SapWizard(workbench, creation, node, existingNames);
}
@Override
public WizardDialog getGenericSchemaWizardDialog(Shell shell, IWorkbench workbench, boolean creation, ISelection selection, String[] existingNames, boolean isSinglePageOnly) {
return null;
}
@Override
public Property getPropertyFromWizardDialog() {
return null;
}
@Override
public IPath getPathForSaveAsGenericSchema() {
// TODO Auto-generated method stub
return null;
}
@Override
public ConnectionItem openMetadataConnection(boolean creation, IRepositoryNode repoNode, INode node) {
return null;
}
@Override
public void openMetadataConnection(IRepositoryViewObject o, INode node) {
}
@Override
public void openEditSchemaWizard(String value) {
}
@Override
public void runCreateTableAction(RepositoryNode metadataNode) {
AbstractCreateTableAction action = new CreateSAPTableAction(metadataNode);
action.setAvoidUnloadResources(true);
action.run();
}
@Override
public AbstractRlueOperationChoice getOperationChoice(Shell shell, INode node, RulesItem[] repositoryRuleItems, LinkRulesItem[] linkRuleItems, EProcessTypeForRule rule, String ruleToEdit, boolean readOnly) {
return null;
}
@Override
public DatabaseMetaData findCustomizedJTDSDBMetadata(Connection conn) {
return null;
}
}