/******************************************************************************
* Copyright (c) 2008-2013, Linagora
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Linagora - initial API and implementation
*******************************************************************************/
package com.ebmwebsourcing.petals.services.su.wizards.pages;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import com.ebmwebsourcing.petals.common.internal.provisional.swt.QNameText;
import com.ebmwebsourcing.petals.common.internal.provisional.utils.StringUtils;
import com.ebmwebsourcing.petals.common.internal.provisional.utils.SwtFactory;
import com.ebmwebsourcing.petals.services.PetalsServicesPlugin;
import com.ebmwebsourcing.petals.services.su.extensions.SuWizardSettings;
import com.sun.java.xml.ns.jbi.AbstractEndpoint;
/**
* The abstract wizard page showing JBI standard fields.
* @author Vincent Zurczak - EBM WebSourcing
*/
public abstract class JbiAbstractPage extends AbstractSuWizardPage {
public static final String PAGE_NAME = "JbiPage";
protected QNameText itfQText, srvQText;
protected Text edptText;
protected Image tipImage;
/**
* Constructor.
* @param suType the component type used by the SU (e.g. FTP, XSLT...).
* @param suTypeVersion the version of the Petals component used by the SU.
*/
public JbiAbstractPage() {
super( PAGE_NAME );
this.tipImage = PetalsServicesPlugin.loadImage( "icons/obj16/smartmode_co.gif" );
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.DialogPage
* #dispose()
*/
@Override
public void dispose() {
if( this.tipImage != null && ! this.tipImage.isDisposed())
this.tipImage.dispose();
super.dispose();
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
@Override
public final void createControl( Composite parent ) {
// Container
final Composite container = SwtFactory.createComposite( parent );
setControl( container );
SwtFactory.applyNewGridLayout( container, 2, false, 20, 15, 0, 15 );
SwtFactory.applyHorizontalGridData( container );
// Set the page description
setDescription( getDescription());
// Create controls in the form.
createCustomControls( container );
}
/**
* This method defines the controls to add in the page.
* <p>
* It should use {@link JbiAbstractPage#createCommonControls(Composite)}
* </p>
*
* @param container the parent container with a two-column layout
*/
protected abstract void createCustomControls( Composite container );
/**
* Create JBI common controls (service, interface and end-point names).
* @param parent the parent
* @param marginTop the margin above the first widget.
*/
protected void createCommonControls( Composite container, int marginTop ) {
// Interface name
SuWizardSettings settings = getWizard().getSettings();
Label l = SwtFactory.createLabel( container, "Interface Name *:", "The qualified name of the service contract" );
SwtFactory.applyGridData( l, 1, marginTop );
this.itfQText = SwtFactory.createQNameTextField( container, false, "Interface", "http://Your.Interface.Namespace/" );
SwtFactory.applyHorizontalGridData( this.itfQText, 1, marginTop );
if( ! settings.activateInterfaceName )
this.itfQText.setEditable( false );
this.itfQText.addModifyListener( new ModifyListener() {
@Override
public void modifyText( ModifyEvent e ) {
getNewlyCreatedEndpoint().setInterfaceName( JbiAbstractPage.this.itfQText.getValue());
validate();
}
});
// Service name
SwtFactory.createLabel( container, "Service Name:", "The qualified name of the service implementation" );
this.srvQText = SwtFactory.createQNameTextField( container, true, "Service ", "http://Your.Service.Namespace/" );
if( settings.activateServiceNameOnly )
this.srvQText.setNamespacePartEditable( false );
else if( ! settings.activateServiceName )
this.srvQText.setEditable( false );
this.srvQText.addModifyListener( new ModifyListener() {
@Override
public void modifyText( ModifyEvent e ) {
if( ! ((StyledText) e.widget).isEnabled())
return;
getNewlyCreatedEndpoint().setServiceName( JbiAbstractPage.this.srvQText.getValue());
validate();
}
});
// End-point name
SwtFactory.createLabel( container, "End-point Name:", "The name of the service deployment point" );
this.edptText = SwtFactory.createSimpleTextField( container, true );
if( ! settings.activateEndpointName )
this.edptText.setEditable( false );
this.edptText.addModifyListener( new ModifyListener() {
@Override
public void modifyText( ModifyEvent e ) {
if( ! ((Text) e.widget).isEnabled())
return;
String edpt = JbiAbstractPage.this.edptText.getText();
if( StringUtils.isEmpty( edpt ))
edpt = null;
getNewlyCreatedEndpoint().setEndpointName( edpt );
validate();
}
});
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.DialogPage
* #setVisible(boolean)
*/
@Override
public void setVisible( boolean visible ) {
// Update the UI
if( visible ) {
AbstractEndpoint ae = getNewlyCreatedEndpoint();
this.itfQText.setValue( ae.getInterfaceName());
this.srvQText.setValue( ae.getServiceName());
String edpt = ae.getEndpointName();
if( ! getWizard().getComponentVersionDescription().getAutoGeneratedEndpointValue().equals( edpt ))
this.edptText.setText( edpt == null ? "" : edpt );
String errorMsg = getErrorMessage();
if( errorMsg != null ) {
setMessage( errorMsg, IMessageProvider.INFORMATION );
setErrorMessage( null );
}
setPageComplete( errorMsg == null );
}
// Call to super
super.setVisible( visible );
}
}