// ============================================================================
//
// Copyright (C) 2006-2016 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.mdm.repository.core.service;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.AbstractGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.CallJobGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.CallTransformerGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.DumpToConsoleGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.ItemDispatcherGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.JdbcGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.LoggingGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.WorkflowContextGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.servicedoc.WorkflowGetDocument;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.AbstractPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.CodeProjectPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.DumpAndGoPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.GroovyPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.RegexpPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.ReplacePluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.RoutePluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.TISCallJobPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.WorkflowContextTriggerPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.WorkflowTriggerPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.XPathPluginDetail;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.XSLTPluginDetail;
import org.talend.mdm.repository.i18n.Messages;
import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef;
import org.talend.mdm.workbench.serverexplorer.ui.dialogs.SelectServerDefDialog;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.models.TreeParent;
import com.amalto.workbench.utils.UserInfo;
import com.amalto.workbench.utils.Util;
import com.amalto.workbench.utils.XtentisException;
import com.amalto.workbench.webservices.TMDMService;
import com.amalto.workbench.webservices.WSServiceGetDocument;
import com.amalto.workbench.webservices.WSTransformerPluginV2Details;
/**
* DOC hbhong class global comment. Detailled comment
*/
public class RepositoryWebServiceAdapter {
private static Logger log = Logger.getLogger(RepositoryWebServiceAdapter.class);
private static Map<String, AbstractPluginDetail> transformerPluginMap;
private static Map<String, AbstractGetDocument> documentServiceMap;
public static TMDMService getMDMService(MDMServerDef serverDef) throws XtentisException {
return getMDMService(serverDef, true);
}
/**
* Warning: the param ServerDef must a decrypted serverDef
*
* @param serverDef
* @return
* @throws XtentisException
*/
public static TMDMService getMDMService(MDMServerDef serverDef, boolean showMissingJarDialog) throws XtentisException {
try {
if (serverDef == null) {
return null;
}
TMDMService service = Util.getMDMService(new URL(serverDef.getUrl()), serverDef.getUser(),
serverDef.getPasswd(), showMissingJarDialog);
return service;
} catch (MalformedURLException e) {
throw new XtentisException(Messages.bind(Messages.RepositoryWebServiceAdapter_InvalidEndpointAddress,
serverDef.getUrl()));
}
}
public static TMDMService getMDMService(Shell shell) {
SelectServerDefDialog dialog = new SelectServerDefDialog(shell);
try {
if (dialog.open() == IDialogConstants.OK_ID) {
MDMServerDef serverDef = dialog.getSelectedServerDef();
return RepositoryWebServiceAdapter.getMDMService(serverDef);
}
} catch (XtentisException e) {
log.error(e.getMessage(), e);
}
return null;
}
public static TMDMService getMDMService(Shell shell, MDMServerDef lastserverDef) {
if (lastserverDef == null) {
MessageDialog.openWarning(null, Messages.Warning_text, Messages.RepositoryWebServiceAdapter_DeployFirst);
return null;
}
SelectServerDefDialog dialog = new SelectServerDefDialog(shell);
dialog.create();
dialog.setSelectServer(lastserverDef);
try {
if (dialog.open() == IDialogConstants.OK_ID) {
MDMServerDef serverDef = dialog.getSelectedServerDef();
TMDMService port = RepositoryWebServiceAdapter.getMDMService(serverDef);
return port;
}
} catch (XtentisException e) {
log.error(e.getMessage(), e);
}
return null;
}
public static WSTransformerPluginV2Details findTransformerPluginV2Detail(String jndiName) {
if (jndiName == null) {
return null;
}
initTransformerPluginDetails();
return transformerPluginMap.get(jndiName);
}
public static Collection<AbstractPluginDetail> findAllTransformerPluginV2Details() {
initTransformerPluginDetails();
return transformerPluginMap.values();
}
public static WSServiceGetDocument getServiceDocument(String jndiName) {
if (jndiName == null) {
return null;
}
initGetDocumentServices();
return documentServiceMap.get(jndiName);
}
private static void initGetDocumentServices() {
if (documentServiceMap == null) {
documentServiceMap = new LinkedHashMap<String, AbstractGetDocument>();
String twoLettersLanguageCode = "en"; //$NON-NLS-1$
addGetDoc(documentServiceMap, new CallJobGetDocument(twoLettersLanguageCode));
addGetDoc(documentServiceMap, new CallTransformerGetDocument(twoLettersLanguageCode));
addGetDoc(documentServiceMap, new DumpToConsoleGetDocument(twoLettersLanguageCode));
addGetDoc(documentServiceMap, new ItemDispatcherGetDocument(twoLettersLanguageCode));
addGetDoc(documentServiceMap, new JdbcGetDocument(twoLettersLanguageCode));
addGetDoc(documentServiceMap, new LoggingGetDocument(twoLettersLanguageCode));
addGetDoc(documentServiceMap, new WorkflowGetDocument(twoLettersLanguageCode));
addGetDoc(documentServiceMap, new WorkflowContextGetDocument(twoLettersLanguageCode));
}
}
private static void initTransformerPluginDetails() {
if (transformerPluginMap == null) {
transformerPluginMap = new LinkedHashMap<String, AbstractPluginDetail>();
String twoLettersLanguageCode = "en"; //$NON-NLS-1$
addDetail(transformerPluginMap, new CodeProjectPluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new DumpAndGoPluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new GroovyPluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new RegexpPluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new ReplacePluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new RoutePluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new TISCallJobPluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new WorkflowTriggerPluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new WorkflowContextTriggerPluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new XPathPluginDetail(twoLettersLanguageCode));
addDetail(transformerPluginMap, new XSLTPluginDetail(twoLettersLanguageCode));
}
}
public static String[] getTheObjectsForRole() {
String[] objects = new String[] { "Routing Engine V2", "Service", "Routing Rule", //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
"Background Job", "Menu", "Transformer V2", "Stored Procedure", "View", //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
"Routing Order V2 Failed", "Item", "Data Model", "Routing Order V2 Completed", //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$
"Transformer Plugin V2", "Role", "Data Cluster", "Configuration Info", "Custom Layout" };//$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
return objects;
}
public static String[] getComboListForServiceConfig() {
String[] comblist = new String[] { "smtp", "svn", "workflow" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
return comblist;
}
private static void addDetail(Map<String, AbstractPluginDetail> map, AbstractPluginDetail detail) {
map.put(detail.getJNDIName(), detail);
}
private static void addGetDoc(Map<String, AbstractGetDocument> map, AbstractGetDocument doc) {
map.put(doc.getJNDIName(), doc);
}
public static String[] getServiceNames() {
initGetDocumentServices();
return documentServiceMap.keySet().toArray(new String[0]);
}
public static void resetXObject(MDMServerDef serverDef, TreeObject xobject) {
String serverName = serverDef.getHost();
String username = serverDef.getUser();
String password = serverDef.getPasswd();
String endpointaddress = serverDef.getProtocol() + serverDef.getHost() + ":" + serverDef.getPort() //$NON-NLS-1$
+ serverDef.getPath();
TreeParent serverRoot = new TreeParent(serverName, null, TreeObject._SERVER_, endpointaddress, username
+ ":" + (password == null ? "" : password));//$NON-NLS-1$//$NON-NLS-2$
UserInfo user = new UserInfo();
user.setUsername(username);
user.setPassword(password);
user.setServerUrl(endpointaddress);
serverRoot.setUser(user);
xobject.setServerRoot(serverRoot);
}
}