/******************************************************************************* * Copyright (c) 2010 - 2014 Red Hat, Inc. and others. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.ws.ui.wizards; import java.util.ArrayList; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.jboss.tools.ws.creation.core.data.ServiceModel; import org.jboss.tools.ws.creation.core.utils.JBossWSCreationUtils; import org.jboss.tools.ws.ui.messages.JBossWSUIMessages; public class JBossWSGenerateWizardPage extends WizardPage { private JBossWSGenerateWizard wizard; private Text name; private Combo projects; private boolean bHasChanged = false; private Text packageName; private Text className; protected JBossWSGenerateWizardPage(String pageName) { super(pageName); this .setTitle(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_Title); this .setDescription(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_Description); } public void createControl(Composite parent) { Composite composite = createDialogArea(parent); this.wizard = (JBossWSGenerateWizard) this.getWizard(); Group group = new Group(composite, SWT.NONE); group .setText(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_Project_Group); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; group.setLayout(new GridLayout(2, false)); group.setLayoutData(gd); projects = new Combo(group, SWT.BORDER | SWT.DROP_DOWN); projects .setToolTipText(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_Project_Group_Tooltip); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; projects.setLayoutData(gd); refreshProjectList(wizard.getServiceModel().getWebProjectName()); projects.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { wizard.setProject(projects.getText()); name.setText(updateDefaultName()); className.setText(updateDefaultClassName()); bHasChanged = true; setPageComplete(isPageComplete()); } public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); Group group2 = new Group(composite, SWT.NONE); group2 .setText(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_Web_Service_Group); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; group2.setLayout(new GridLayout(2, false)); group2.setLayoutData(gd); new Label(group2, SWT.NONE) .setText(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_ServiceName_Label); name = new Text(group2, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); name.setLayoutData(gd); name.setText(updateDefaultName()); name.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { wizard.setServiceName(name.getText()); bHasChanged = true; setPageComplete(isPageComplete()); } }); Group group3 = new Group(composite, SWT.NONE); group3.setText(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_Class_Group); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; group3.setLayout(new GridLayout(2, false)); group3.setLayoutData(gd); new Label(group3, SWT.NONE) .setText(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_Package_Label); packageName = new Text(group3, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); packageName.setLayoutData(gd); packageName.setText(wizard.getPackageName()); packageName.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { wizard.setPackageName(packageName.getText()); setPageComplete(isPageComplete()); } }); new Label(group3, SWT.NONE) .setText(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_ClassName_Label); className = new Text(group3, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); className.setLayoutData(gd); className.setText(updateDefaultClassName()); className.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { wizard.setClassName(className.getText()); setPageComplete(isPageComplete()); } }); setControl(composite); } private void refreshProjectList(String projectName) { String[] projectNames = getProjects(); boolean foundInitialProject = false; projects.removeAll(); for (int i = 0; i < projectNames.length; i++) { projects.add(projectNames[i]); if (projectNames[i].equals(projectName)) { foundInitialProject = true; } } if (foundInitialProject) projects.setText(projectName); } public IWizardPage getNextPage() { return super.getNextPage(); } private Composite createDialogArea(Composite parent) { // create a composite with standard margins and spacing Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 7; layout.marginWidth = 7; layout.verticalSpacing = 4; layout.horizontalSpacing = 4; layout.numColumns = 2; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); return composite; } @Override public boolean isPageComplete() { return validate(); } private String updateDefaultName() { ServiceModel model = wizard.getServiceModel(); JBossWSGenerateWizardValidator.setServiceModel(model); String currentName = wizard.getServiceName(); IStatus status = JBossWSGenerateWizardValidator.isWSNameValid(); try { if (status.getSeverity() == IStatus.ERROR && !JavaEEProjectUtilities.isDynamicWebProject(wizard .getProject())) { return currentName; } } catch (NullPointerException npe) { return currentName; } String testName = currentName; int i = 1; while (status != null) { testName = currentName + i; wizard.setServiceName(testName); model = wizard.getServiceModel(); JBossWSGenerateWizardValidator.setServiceModel(model); status = JBossWSGenerateWizardValidator.isWSNameValid(); i++; } return testName; } private String updateDefaultClassName() { ServiceModel model = wizard.getServiceModel(); JBossWSGenerateWizardValidator.setServiceModel(model); String currentName = wizard.getClassName(); if (wizard.getProject() == null) { return currentName; } else { boolean isDynamicWebProject = false; try { if (wizard.getProject().getNature( "org.eclipse.wst.common.project.facet.core.nature") != null) { //$NON-NLS-1$ isDynamicWebProject = true; } } catch (CoreException e) { // ignore } if (!isDynamicWebProject) { return currentName; } } String testName = currentName; IStatus status = JBossWSGenerateWizardValidator.isWSClassValid( testName, wizard.getProject()); int i = 1; while (status != null && status.getSeverity() == IStatus.ERROR) { testName = currentName + i; wizard.setClassName(testName); model = wizard.getServiceModel(); JBossWSGenerateWizardValidator.setServiceModel(model); status = JBossWSGenerateWizardValidator.isWSClassValid(testName, wizard.getProject()); i++; } return testName; } private boolean validate() { ServiceModel model = wizard.getServiceModel(); JBossWSGenerateWizardValidator.setServiceModel(model); if (!projects.isDisposed() && projects.getText().length() > 0) { model.setWebProjectName(projects.getText()); } if (((JBossWSGenerateWizard) this.getWizard()).getProject() == null) { setErrorMessage(JBossWSUIMessages.Error_JBossWS_GenerateWizard_NoProjectSelected); return false; } IFile web = ((JBossWSGenerateWizard) this.getWizard()).getWebFile(); if (web == null || !web.exists()) { setErrorMessage(JBossWSUIMessages.Error_JBossWS_GenerateWizard_NotDynamicWebProject); return false; } try { if ("" .equals(JBossWSCreationUtils.getJavaProjectSrcLocation(((JBossWSGenerateWizard) this.getWizard()).getProject()))) { //$NON-NLS-1$ setErrorMessage(JBossWSUIMessages.Error_JBossWS_GenerateWizard_NoSrcInProject); return false; } } catch (JavaModelException e) { e.printStackTrace(); } IStatus status = JBossWSGenerateWizardValidator.isWSNameValid(); if (status != null) { setErrorMessage(status.getMessage()); return false; } IStatus classNameStatus = JBossWSGenerateWizardValidator.isWSClassValid(model .getCustomClassName(), wizard.getProject()); if (classNameStatus != null) { if (classNameStatus.getSeverity() == IStatus.ERROR) { setMessage(classNameStatus.getMessage(), DialogPage.ERROR); return false; } else if (classNameStatus.getSeverity() == IStatus.WARNING) { setMessage(classNameStatus.getMessage(), DialogPage.WARNING); return true; } } setMessage(JBossWSUIMessages.JBossWS_GenerateWizard_GenerateWizardPage_Description); setErrorMessage(null); return true; } private String[] getProjects() { IProject[] projects = ResourcesPlugin.getWorkspace().getRoot() .getProjects(); ArrayList<String> dynamicProjects = new ArrayList<String>(); for (int i = 0; i < projects.length; i++) { boolean isDynamicWebProject = JavaEEProjectUtilities .isDynamicWebProject(projects[i]); if (isDynamicWebProject) { dynamicProjects.add(projects[i].getName()); } } return dynamicProjects.toArray(new String[dynamicProjects.size()]); } protected boolean hasChanged() { return bHasChanged; } }