/****************************************************************************** * 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; } }