/******************************************************************************
* Copyright (c) 2010-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.ebmwebsoucing.petals.repositories.explorer.wizards;
import java.net.URI;
import org.eclipse.bpel.common.wsdl.helpers.UriAndUrlHelper;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.ebmwebsoucing.petals.repositories.explorer.model.QueryApiBean;
import com.ebmwebsoucing.petals.repositories.explorer.model.RepositoryQueryApi;
import com.ebmwebsourcing.petals.common.internal.provisional.utils.StringUtils;
/**
* A dialog to ask for a query API and a query URL.
* @author Vincent Zurczak - EBM WebSourcing
*/
public class QueryApiBeanDefinitionDialog extends TitleAreaDialog {
private QueryApiBean queryApiBean;
private String uriAsString;
private RepositoryQueryApi api;
/**
* Constructor.
* @param parentShell
* @param queryApiBean
*/
public QueryApiBeanDefinitionDialog( Shell parentShell, QueryApiBean queryApiBean ) {
super( parentShell );
if( queryApiBean != null )
this.queryApiBean = queryApiBean;
else
this.queryApiBean = new QueryApiBean();
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.TitleAreaDialog
* #createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea( Composite parent ) {
Composite bigContainer = new Composite((Composite) super.createDialogArea( parent ), SWT.NONE );
GridLayout layout = new GridLayout( 2, false );
layout.marginWidth = 10;
bigContainer.setLayout( layout );
bigContainer.setLayoutData( new GridData( GridData.FILL_BOTH ));
// Add the API field
new Label( bigContainer, SWT.NONE ).setText( "Query API:" );
ComboViewer viewer = new ComboViewer( bigContainer, SWT.BORDER | SWT.READ_ONLY | SWT.DROP_DOWN );
viewer.getCombo().setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
viewer.setContentProvider( new ArrayContentProvider());
viewer.setLabelProvider( new LabelProvider() {
@Override
public String getText( Object element ) {
String result = "";
if( element instanceof RepositoryQueryApi )
result = ((RepositoryQueryApi) element).toString();
return result;
}
});
viewer.setInput( RepositoryQueryApi.values());
viewer.addSelectionChangedListener( new ISelectionChangedListener() {
public void selectionChanged( SelectionChangedEvent event ) {
if( ! event.getSelection().isEmpty()) {
QueryApiBeanDefinitionDialog.this.api =
(RepositoryQueryApi) ((IStructuredSelection) event.getSelection()).getFirstElement();
validate();
}
}
});
// Add the URL field
new Label( bigContainer, SWT.NONE ).setText( "Query URI:" );
Text urlText = new Text( bigContainer, SWT.SINGLE | SWT.BORDER );
urlText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
urlText.addModifyListener( new ModifyListener() {
public void modifyText( ModifyEvent e ) {
QueryApiBeanDefinitionDialog.this.uriAsString = ((Text) e.widget).getText();
validate();
}
});
getShell().setText( "New Query API" );
setTitle( "Query API" );
setMessage( "Associate a new Query API with this repository." );
return bigContainer;
}
/**
* Validates the dialog fields.
*/
private void validate() {
URI uri = null;
boolean complete = false;
if( StringUtils.isEmpty( this.uriAsString )) {
setErrorMessage( "You must specify the Query URI." );
} else {
try {
uri = UriAndUrlHelper.urlToUri( this.uriAsString );
complete = true;
} catch( Exception e ) {
setErrorMessage( "The Query URI is not a valid URI." );
}
}
if( complete ) {
setErrorMessage( null );
this.queryApiBean.setQueryUri( uri );
this.queryApiBean.setQueryApi( this.api );
}
}
/**
* @return the queryApiBean
*/
public QueryApiBean getQueryApiBean() {
return this.queryApiBean;
}
}