// ============================================================================ // // 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 com.amalto.workbench.editors; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.List; import javax.xml.ws.WebServiceException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.DocumentException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.widgets.FormToolkit; import com.amalto.workbench.dialogs.PluginDetailsDialog; import com.amalto.workbench.exadapter.ExAdapterManager; import com.amalto.workbench.i18n.Messages; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; import com.amalto.workbench.providers.XObjectEditorInput; import com.amalto.workbench.utils.Util; import com.amalto.workbench.utils.XmlUtil; import com.amalto.workbench.webservices.TMDMService; import com.amalto.workbench.webservices.WSCheckServiceConfigRequest; import com.amalto.workbench.webservices.WSCheckServiceConfigResponse; import com.amalto.workbench.webservices.WSGetServicesList; import com.amalto.workbench.webservices.WSServiceGetDocument; import com.amalto.workbench.webservices.WSServicePutConfiguration; import com.amalto.workbench.webservices.WSServicesList; import com.amalto.workbench.webservices.WSServicesListItem; import com.amalto.workbench.webservices.WSString; public class ServiceConfigrationMainPage extends AMainPageV2 { private static Log log = LogFactory.getLog(ServiceConfigrationMainPage.class); protected Combo serviceNameCombo; protected Text serviceConfigurationsText; private Button defultParameterBtn; private Button checkButton; protected TMDMService service; protected WSServiceGetDocument document; protected WSServicePutConfiguration ws = new WSServicePutConfiguration(); protected Text errorLabel; protected static final String CHECKMSG_NOSELECTION = ""; //$NON-NLS-1$ protected static final String CHECKMSG_SUCCESSFULCONN = Messages.ServiceConfigrationMainPage_1; protected static final String CHECKMSG_ERRORCONN = Messages.ServiceConfigrationMainPage_2; private IServiceConfigrationMainPageExAdapter exAdapter; public ServiceConfigrationMainPage(FormEditor editor) { super(editor, ServiceConfigrationMainPage.class.getName(), ((XObjectEditorInput) editor.getEditorInput()).getName()); this.exAdapter = ExAdapterManager.getAdapter(this, IServiceConfigrationMainPageExAdapter.class); } protected void setForConfigureContent(String serviceName) { if (serviceName != null && !"".equals(serviceName)) {//$NON-NLS-1$ document = service.getServiceDocument(new WSString(serviceName.trim())); String documentConfigure = ServiceConfigrationMainPage.formartXml(document.getConfigure()); serviceConfigurationsText.setText(documentConfigure); errorLabel.setText("");//$NON-NLS-1$ } } protected void setForServiceNameCombo() { try { service = Util.getMDMService(getXObject()); WSServicesList list = service.getServicesList(new WSGetServicesList(""));//$NON-NLS-1$ List<WSServicesListItem> items = list.getItem(); if (items != null) { String[] sortedList = new String[items.size()]; for (int i = 0; i < items.size(); i++) { sortedList[i] = items.get(i).getJndiName(); } Arrays.sort(sortedList); for (String element : sortedList) { WSServiceGetDocument doc = service.getServiceDocument(new WSString(element.trim())); if (doc.getConfigureSchema() == null || doc.getConfigureSchema().length() == 0) { continue; } serviceNameCombo.add(element); } } } catch (Exception e) { if (!Util.handleConnectionException(getSite().getShell(), e, Messages.EditXObjectAction_ErrorMsg2)) { MessageDialog.openError(getSite().getShell(), Messages._Error, Messages.bind(Messages.EditXObjectAction_ErrorMsg2, e.getLocalizedMessage())); } } } protected String getDoc() { try { WSServiceGetDocument doc = getServiceDocument(serviceNameCombo.getText()); return doc.getDefaultConfig(); } catch (WebServiceException e) { log.error(e.getMessage(), e); } return null; } protected String getDesc() { try { WSServiceGetDocument doc = getServiceDocument(serviceNameCombo.getText()); return doc.getDescription(); } catch (WebServiceException e) { log.error(e.getMessage(), e); } return null; } protected WSServiceGetDocument getServiceDocument(String jndiName) { // return port.getServiceDocument(new WSString(serviceNameCombo.getText().trim())); return service.getServiceDocument(new WSString(jndiName.trim())); } @Override protected void createCharacteristicsContent(FormToolkit toolkit, Composite charSection) { // Routing Expressions Composite serviceGroup = this.getNewSectionComposite(Messages.ServiceConfigrationMainPage_3); serviceGroup.setLayout(new GridLayout(2, false)); // Service Name Label serviceNameLabel = toolkit.createLabel(serviceGroup, Messages.ServiceConfigrationMainPage_4, SWT.NULL); serviceNameLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1)); Composite subPanel = toolkit.createComposite(serviceGroup); subPanel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, true, 1, 1)); subPanel.setLayout(new GridLayout(2, false)); serviceNameCombo = new Combo(subPanel, SWT.DROP_DOWN | SWT.SINGLE | SWT.READ_ONLY); serviceNameCombo.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, true, 1, 1)); ((GridData) serviceNameCombo.getLayoutData()).widthHint = 300; serviceNameCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String serviceName = serviceNameCombo.getText(); setRefreshing(true); setForConfigureContent(serviceName); setRefreshing(false); // markDirty(); } }); setForServiceNameCombo(); // default parameters button defultParameterBtn = toolkit.createButton(subPanel, "", SWT.PUSH);//$NON-NLS-1$ defultParameterBtn.setImage(ImageCache.getCreatedImage(EImage.HELP_CONTENTS.getPath())); defultParameterBtn.setToolTipText(Messages.ServiceConfigrationMainPage_5); defultParameterBtn.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1)); defultParameterBtn.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) { }; public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { if (serviceNameCombo.getText().trim().length() == 0) { return; } String doc = "";//$NON-NLS-1$ String desc = "";//$NON-NLS-1$ try { desc = getDesc(); doc = getDoc(); } catch (Exception e1) { doc = "N/A";//$NON-NLS-1$ } finally { showUpDialog(desc, doc); } }; private void showUpDialog(String desc, String doc) { final PluginDetailsDialog dialog = new PluginDetailsDialog(getSite().getShell(), desc, doc, null, Messages.ServiceConfigrationMainPage_6); dialog.addListener(new Listener() { public void handleEvent(Event event) { dialog.close(); } }); dialog.create(); dialog.getShell().setText(serviceNameCombo.getText() + Messages.ServiceConfigrationMainPage_7); dialog.setBlockOnOpen(true); dialog.open(); } }); // Service Parameters Label serviceConfigurationsLabel = toolkit.createLabel(serviceGroup, Messages.ServiceConfigrationMainPage_8, SWT.NULL); serviceConfigurationsLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 2, 1)); serviceConfigurationsText = toolkit.createText(serviceGroup, "", SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.WRAP);//$NON-NLS-1$ serviceConfigurationsText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1)); ((GridData) serviceConfigurationsText.getLayoutData()).widthHint = 200; ((GridData) serviceConfigurationsText.getLayoutData()).heightHint = 120; serviceConfigurationsText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (isRefreshing()) { return; } markDirtyWithoutCommit(); } }); checkButton = toolkit.createButton(serviceGroup, Messages.ServiceConfigrationMainPage_9, SWT.NONE); checkButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { String msg = getContentsCheckResult(); errorLabel.setForeground(CHECKMSG_SUCCESSFULCONN.equals(msg) ? errorLabel.getDisplay().getSystemColor( SWT.COLOR_BLUE) : errorLabel.getDisplay().getSystemColor(SWT.COLOR_RED)); errorLabel.setText(msg); } }); errorLabel = new Text(serviceGroup, SWT.WRAP); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2); gd.heightHint = 400; errorLabel.setLayoutData(gd); } public static String formartXml(String doc) { // format output if (doc != null && doc.length() > 0) { try { doc = XmlUtil.formatPretty(doc, "UTF-8");//$NON-NLS-1$ } catch (DocumentException e) { log.error(e.getMessage(), e); } } return doc; } protected void doSaveSVNChanges() { if (exAdapter != null) { exAdapter.doSaveSVNChange(service, ws, serviceNameCombo.getText(), serviceConfigurationsText.getText()); } } protected void saveChanges() { ws.setJndiName(serviceNameCombo.getText().contains("/") ? serviceNameCombo.getText() : "amalto/local/service/"//$NON-NLS-1$//$NON-NLS-2$ + serviceNameCombo.getText()); ws.setConfiguration(serviceConfigurationsText.getText()); doSaveSVNChanges(); } @Override protected void commit() { } @Override protected void createActions() { } @Override protected void refreshData() { } @Override public void doSave(IProgressMonitor monitor) { String msg = checkValidXML(); if (msg != null) { MessageDialog.openError(getSite().getShell(), Messages._Error, msg); return; } saveChanges(); super.doSave(monitor); } protected String getContentsCheckResult() { if (serviceNameCombo.getText().trim().length() == 0) { return CHECKMSG_NOSELECTION; } WSCheckServiceConfigResponse result; result = service.checkServiceConfiguration(new WSCheckServiceConfigRequest(serviceNameCombo.getText().trim(), serviceConfigurationsText.getText())); if (result.isCheckResult()) { return CHECKMSG_SUCCESSFULCONN; } else { return CHECKMSG_ERRORCONN; } } private String checkValidXML() { if (serviceConfigurationsText == null) { return null; } InputStream inStream = null; try { String xmlTxt = serviceConfigurationsText.getText(); inStream = new ByteArrayInputStream(xmlTxt.getBytes()); XmlUtil.parse(inStream); } catch (Exception e) { return e.getMessage(); } finally { if (inStream != null) { try { inStream.close(); } catch (IOException e) { } } } return null; } }