/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.service.ui.wizard; import com.liferay.ide.core.util.StringPool; import com.liferay.ide.project.core.util.ProjectUtil; import com.liferay.ide.project.ui.wizard.LiferayDataModelWizardPage; import com.liferay.ide.sdk.core.SDKUtil; import com.liferay.ide.service.core.operation.INewServiceBuilderDataModelProperties; import com.liferay.ide.service.ui.ServiceUI; import com.liferay.ide.ui.util.SWTUtil; import java.net.URL; import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ui.JavaElementLabelProvider; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.window.Window; import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; @SuppressWarnings( "restriction" ) public class NewServiceBuilderWizardPage extends LiferayDataModelWizardPage implements INewServiceBuilderDataModelProperties { protected Text author; protected Text namespace; protected Button packageButton; protected Label packageLabel; protected Text packageText; protected String projectName; protected Combo projectNameCombo; protected Label projectNameLabel; protected Text serviceFile; protected Button useSampleTemplate; public NewServiceBuilderWizardPage( IDataModel dataModel, String pageName, String title, String description ) { super( dataModel, pageName, title, ServiceUI.imageDescriptorFromPlugin( ServiceUI.PLUGIN_ID, "/icons/wizban/service_wiz.png" ) ); //$NON-NLS-1$ setDescription( description ); } protected void createPackageNamespaceAuthorGroup( Composite parent ) { Composite group = SWTUtil.createTopComposite( parent, 3 ); group.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 2, 1 ) ); // package packageLabel = new Label( group, SWT.LEFT ); packageLabel.setText( Msgs.packagePath ); packageLabel.setLayoutData( new GridData( GridData.HORIZONTAL_ALIGN_FILL ) ); packageText = new Text( group, SWT.SINGLE | SWT.BORDER ); packageText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); synchHelper.synchText( packageText, PACKAGE_PATH, null ); IPackageFragment packageFragment = getSelectedPackageFragment(); String targetProject = model.getStringProperty( PROJECT_NAME ); if( packageFragment != null && packageFragment.exists() && packageFragment.getJavaProject().getElementName().equals( targetProject ) ) { // IPackageFragmentRoot root = // getPackageFragmentRoot(packageFragment); // if (root != null) // folderText.setText(root.getPath().toString()); model.setProperty( PACKAGE_PATH, packageFragment.getElementName() ); } packageButton = new Button( group, SWT.PUSH ); packageButton.setText( J2EEUIMessages.BROWSE_BUTTON_LABEL ); packageButton.setLayoutData( new GridData( GridData.HORIZONTAL_ALIGN_FILL ) ); packageButton.addSelectionListener( new SelectionListener() { public void widgetDefaultSelected( SelectionEvent e ) { // Do nothing } public void widgetSelected( SelectionEvent e ) { handlePackageButtonPressed(); } } ); SWTUtil.createLabel( group, SWT.LEAD, Msgs.namespace, 1 ); namespace = SWTUtil.createText( group, 1 ); this.synchHelper.synchText( namespace, NAMESPACE, null ); SWTUtil.createLabel( group, SWT.LEAD, StringPool.EMPTY, 1 ); SWTUtil.createLabel( group, SWT.LEAD, Msgs.author, 1 ); author = SWTUtil.createText( group, 1 ); this.synchHelper.synchText( author, AUTHOR, null ); SWTUtil.createLabel( group, StringPool.EMPTY, 1 ); SWTUtil.createLabel( group, StringPool.EMPTY, 1 ); Composite checkboxParent = SWTUtil.createComposite( group, 1, 1, SWT.FILL, 0, 3 ); useSampleTemplate = SWTUtil.createCheckButton( checkboxParent, Msgs.includeSampleEntity, null, true, 1 ); GridData data = new GridData( SWT.FILL, SWT.CENTER, true, false, 1, 1 ); useSampleTemplate.setLayoutData( data ); this.synchHelper.synchCheckbox( useSampleTemplate, USE_SAMPLE_TEMPLATE, null ); } /** * Add project group */ protected void createProjectNameServiceFileGroup( Composite parent ) { // set up project name label projectNameLabel = new Label( parent, SWT.NONE ); projectNameLabel.setText( "Plugin project:" ); //$NON-NLS-1$ projectNameLabel.setLayoutData( new GridData() ); // set up project name entry field projectNameCombo = new Combo( parent, SWT.BORDER | SWT.READ_ONLY ); GridData data = new GridData( GridData.FILL_HORIZONTAL ); data.widthHint = 300; data.horizontalSpan = 1; data.grabExcessHorizontalSpace = true; projectNameCombo.setLayoutData( data ); synchHelper.synchCombo( projectNameCombo, PROJECT_NAME, null ); String initialProjectName = initializeProjectList( projectNameCombo, model ); if( projectName == null && initialProjectName != null ) { projectName = initialProjectName; } SWTUtil.createLabel( parent, SWT.LEAD, Msgs.serviceFile, 1 ); serviceFile = SWTUtil.createText( parent, 1 ); this.synchHelper.synchText( serviceFile, SERVICE_FILE, null ); } @Override protected Composite createTopLevelComposite( Composite parent ) { Composite topComposite = SWTUtil.createTopComposite( parent, 2 ); createProjectNameServiceFileGroup( topComposite ); SWTUtil.createSeparator( topComposite, 2 ); createPackageNamespaceAuthorGroup( topComposite ); setShellImage(); return topComposite; } protected IPackageFragmentRoot getPackageFragmentRoot( IPackageFragment packageFragment ) { if( packageFragment == null ) { return null; } else if( packageFragment.getParent() instanceof IPackageFragment ) { return getPackageFragmentRoot( (IPackageFragment) packageFragment.getParent() ); } else if( packageFragment.getParent() instanceof IPackageFragmentRoot ) { return (IPackageFragmentRoot) packageFragment.getParent(); } else { return null; } } protected IPackageFragment getSelectedPackageFragment() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if( window == null ) { return null; } ISelection selection = window.getSelectionService().getSelection(); if( selection == null ) { return null; } IJavaElement element = getInitialJavaElement( selection ); if( element != null ) { if( element.getElementType() == IJavaElement.PACKAGE_FRAGMENT ) { return (IPackageFragment) element; } else if( element.getElementType() == IJavaElement.COMPILATION_UNIT ) { IJavaElement parent = ( (ICompilationUnit) element ).getParent(); if( parent.getElementType() == IJavaElement.PACKAGE_FRAGMENT ) { return (IPackageFragment) parent; } } else if( element.getElementType() == IJavaElement.TYPE ) { return ( (IType) element ).getPackageFragment(); } } return null; } protected IPackageFragmentRoot getSelectedPackageFragmentRoot() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if( window == null ) { return null; } ISelection selection = window.getSelectionService().getSelection(); if( selection == null ) { return null; } // StructuredSelection stucturedSelection = (StructuredSelection) // selection; IJavaElement element = getInitialJavaElement( selection ); if( element != null ) { if( element.getElementType() == IJavaElement.PACKAGE_FRAGMENT_ROOT ) return (IPackageFragmentRoot) element; } return null; } protected String[] getValidationPropertyNames() { return new String[] { PROJECT_NAME, SERVICE_FILE, PACKAGE_PATH, NAMESPACE, AUTHOR }; } protected void handlePackageButtonPressed() { IPackageFragmentRoot packRoot = (IPackageFragmentRoot) model.getProperty( JAVA_PACKAGE_FRAGMENT_ROOT ); if( packRoot == null ) { return; } IJavaElement[] packages = null; try { packages = packRoot.getChildren(); } catch( JavaModelException e ) { // Do nothing } if( packages == null ) packages = new IJavaElement[0]; ElementListSelectionDialog dialog = new ElementListSelectionDialog( getShell(), new JavaElementLabelProvider( JavaElementLabelProvider.SHOW_DEFAULT ) ); dialog.setTitle( J2EEUIMessages.PACKAGE_SELECTION_DIALOG_TITLE ); dialog.setMessage( J2EEUIMessages.PACKAGE_SELECTION_DIALOG_DESC ); dialog.setEmptyListMessage( J2EEUIMessages.PACKAGE_SELECTION_DIALOG_MSG_NONE ); dialog.setElements( packages ); if( dialog.open() == Window.OK ) { IPackageFragment fragment = (IPackageFragment) dialog.getFirstResult(); if( fragment != null ) { packageText.setText( fragment.getElementName() ); } else { packageText.setText( J2EEUIMessages.EMPTY_STRING ); } } } protected boolean isProjectValid( IProject project ) { return ( ProjectUtil.isPortletProject( project ) || ProjectUtil.isHookProject( project ) || ProjectUtil.isExtProject( project ) ) && SDKUtil.isSDKProject( project ); } protected void setShellImage() { URL url = ServiceUI.getDefault().getBundle().getEntry( "/icons/e16/service.png" ); //$NON-NLS-1$ Image shellImage = ImageDescriptor.createFromURL( url ).createImage(); getShell().setImage( shellImage ); } private static class Msgs extends NLS { public static String author; public static String includeSampleEntity; public static String namespace; public static String packagePath; public static String serviceFile; static { initializeMessages( NewServiceBuilderWizardPage.class.getName(), Msgs.class ); } } }