/******************************************************************************* * Copyright (c) 2007 Red Hat, Inc. * 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.seam.ui.internal.project.facet; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.datatools.connectivity.IConnectionProfile; import org.eclipse.datatools.connectivity.ProfileManager; import org.eclipse.jdt.core.JavaConventions; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants; import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties; import org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; 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.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.PlatformUI; import org.eclipse.wst.common.componentcore.datamodel.FacetInstallDataModelProvider; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties; import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants; import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener; import org.eclipse.wst.common.frameworks.internal.operations.ProjectCreationDataModelProviderNew; import org.eclipse.wst.common.project.facet.core.IFacetedProject; import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action; import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy; import org.eclipse.wst.common.project.facet.core.IProjectFacet; import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; import org.eclipse.wst.common.project.facet.core.runtime.IRuntime; import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager; import org.eclipse.wst.common.project.facet.ui.AbstractFacetWizardPage; import org.eclipse.wst.common.project.facet.ui.IFacetWizardPage; import org.eclipse.wst.common.project.facet.ui.ModifyFacetedProjectWizard; import org.eclipse.wst.web.ui.internal.wizards.NewProjectDataModelFacetWizard; import org.hibernate.eclipse.console.utils.DriverClassHelpers; import org.jboss.tools.common.ui.IValidator; import org.jboss.tools.common.ui.widget.editor.CompositeEditor; import org.jboss.tools.common.ui.widget.editor.IFieldEditor; import org.jboss.tools.common.ui.widget.editor.IFieldEditorFactory; import org.jboss.tools.common.ui.widget.editor.ITaggedFieldEditor; import org.jboss.tools.seam.core.SeamCoreMessages; import org.jboss.tools.seam.core.SeamCorePlugin; import org.jboss.tools.seam.core.SeamUtil; import org.jboss.tools.seam.core.project.facet.SeamProjectPreferences; import org.jboss.tools.seam.core.project.facet.SeamRuntime; import org.jboss.tools.seam.core.project.facet.SeamRuntimeManager; import org.jboss.tools.seam.core.project.facet.SeamVersion; import org.jboss.tools.seam.internal.core.project.facet.ISeamFacetDataModelProperties; import org.jboss.tools.seam.internal.core.project.facet.SeamFacetInstallDataModelProvider; import org.jboss.tools.seam.internal.core.project.facet.SeamValidatorFactory; import org.jboss.tools.seam.ui.wizard.SeamFormWizard; import org.jboss.tools.seam.ui.wizard.SeamProjectWizard; import org.jboss.tools.seam.ui.wizard.SeamWizardFactory; import org.jboss.tools.seam.ui.wizard.SeamWizardUtils; /** * @author eskimo * */ @SuppressWarnings("restriction") public class SeamInstallWizardPage extends AbstractFacetWizardPage implements IFacetWizardPage, IDataModelListener { public static final String PAGE_DESCRIPTION = SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_CONFIGURE_SEAM_FACET_SETTINGS; private static final DriverClassHelpers HIBERNATE_HELPER = new DriverClassHelpers(); private IDataModel model = null; private DataModelValidatorDelegate validatorDelegate; private IFieldEditor jBossSeamHomeEditor; private IFieldEditor ejbProjectNameditor = IFieldEditorFactory.INSTANCE .createTextEditor( ISeamFacetDataModelProperties.SEAM_EJB_PROJECT, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_EJB_PROJECT_NAME, ""); //$NON-NLS-1$ private IFieldEditor earProjectNameditor = IFieldEditorFactory.INSTANCE .createTextEditor( ISeamFacetDataModelProperties.SEAM_EAR_PROJECT, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_EAR_PROJECT_NAME, ""); //$NON-NLS-1$ private IFieldEditor libraryListEditor; private IFieldEditor jBossAsDeployAsEditor = IFieldEditorFactory.INSTANCE .createRadioEditor( ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_DEPLOY_AS, Arrays .asList(new String[] { ISeamFacetDataModelProperties.DEPLOY_AS_WAR .toUpperCase(), ISeamFacetDataModelProperties.DEPLOY_AS_EAR .toUpperCase() }), Arrays.asList(new Object[] { ISeamFacetDataModelProperties.DEPLOY_AS_WAR, ISeamFacetDataModelProperties.DEPLOY_AS_EAR }), ISeamFacetDataModelProperties.DEPLOY_AS_WAR); // Database group private IFieldEditor connProfileSelEditor; private IFieldEditor jBossHibernateDbTypeEditor ; private IFieldEditor dbSchemaName; private IFieldEditor dbCatalogName; private IFieldEditor dbTablesExists; private IFieldEditor recreateTablesOnDeploy; private IFieldEditor sessionBeanPkgNameditor = IFieldEditorFactory.INSTANCE .createTextEditor( ISeamFacetDataModelProperties.SESSION_BEAN_PACKAGE_NAME, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_SESSION_BEAN_PACKAGE_NAME, ""); //$NON-NLS-1$ private IFieldEditor entityBeanPkgNameditor = IFieldEditorFactory.INSTANCE .createTextEditor( ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_ENTITY_BEAN_PACKAGE_NAME, ""); //$NON-NLS-1$ private IFieldEditor createTestProjectCheckboxeditor = IFieldEditorFactory.INSTANCE .createCheckboxEditor( ISeamFacetDataModelProperties.TEST_PROJECT_CREATING, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_CREATE_TEST_PROJECT, true); private IFieldEditor testProjectNameditor = IFieldEditorFactory.INSTANCE .createTextEditor( ISeamFacetDataModelProperties.SEAM_TEST_PROJECT, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_TEST_PROJECT_NAME, ""); //$NON-NLS-1$ private IFieldEditor testsPkgNameditor = IFieldEditorFactory.INSTANCE .createTextEditor( ISeamFacetDataModelProperties.TEST_CASES_PACKAGE_NAME, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_TEST_PACKAGE_NAME, ""); //$NON-NLS-1$ private Group databaseGroup; /** * */ public SeamInstallWizardPage() { super(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_SEAM_FACET); setTitle(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_SEAM_FACET); setImageDescriptor(ImageDescriptor.createFromFile(SeamFormWizard.class, "SeamWebProjectWizBan.png")); //$NON-NLS-1$ setDescription(PAGE_DESCRIPTION); } /** * @return */ private String getDefaultDbType() { return SeamProjectPreferences .getStringPreference(SeamProjectPreferences.HIBERNATE_DEFAULT_DB_TYPE); } /** * @return */ private Object getDeployAsDefaultValue() { String result = SeamProjectPreferences .getStringPreference(SeamProjectPreferences.JBOSS_AS_DEFAULT_DEPLOY_AS); if (!isSeamProjectWizard()) { IProjectFacetVersion webVersion = null; if(isWebProjectWizard()) { IFacetedProjectWorkingCopy facetedProject = ( (ModifyFacetedProjectWizard) getWizard() ).getFacetedProjectWorkingCopy(); webVersion = facetedProject.getProjectFacetVersion(IJ2EEFacetConstants.DYNAMIC_WEB_FACET); } else { ISelection sel = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getSelectionService() .getSelection(); IProject project = SeamWizardUtils.getInitialProject(sel); if (project == null) { return ISeamFacetDataModelProperties.DEPLOY_AS_WAR; } IFacetedProject facetedProject; try { facetedProject = ProjectFacetsManager.create(project); if (facetedProject == null) { return ISeamFacetDataModelProperties.DEPLOY_AS_WAR; } } catch (CoreException e) { SeamCorePlugin.getPluginLog().logError(e); return result; } webVersion = facetedProject .getProjectFacetVersion(IJ2EEFacetConstants.DYNAMIC_WEB_FACET); } if (webVersion != null) { return ISeamFacetDataModelProperties.DEPLOY_AS_WAR; } else { return ISeamFacetDataModelProperties.DEPLOY_AS_EAR; } } return result; } /** * @return */ private Object getConnectionProfileDefaultValue() { String defaultDs = SeamProjectPreferences .getStringPreference(SeamProjectPreferences.SEAM_DEFAULT_CONNECTION_PROFILE); return getConnectionProfileNameList().contains(defaultDs) ? defaultDs : ""; //$NON-NLS-1$ } private static List<String> getConnectionProfileNameList() { IConnectionProfile[] profiles = ProfileManager.getInstance() .getProfilesByCategory( "org.eclipse.datatools.connectivity.db.category"); //$NON-NLS-1$ List<String> names = new ArrayList<String>(); for (IConnectionProfile connectionProfile : profiles) { names.add(connectionProfile.getName()); } return names; } private DataModelSynchronizer sync; /** * */ @Override public void setWizard(IWizard newWizard) { super.setWizard(newWizard); } /** * */ public void setConfig(Object config) { model = (IDataModel) config; model.setProperty(ISeamFacetDataModelProperties.HIBERNATE_DIALECT, HIBERNATE_HELPER.getDialectClass(getDefaultDbType())); } /** * * @return */ public IDataModel getConfig() { return model; } /** * Finish has been pressed. */ @SuppressWarnings("deprecation") public void transferStateToConfig() { String seamRuntimeName = jBossSeamHomeEditor.getValueAsString(); SeamRuntime seamRuntime = SeamRuntimeManager.getInstance() .findRuntimeByName(seamRuntimeName); if (seamRuntime != null) { SeamRuntimeManager.getInstance().setDefaultRuntime(seamRuntime); } if (connProfileSelEditor != null) { SeamCorePlugin.getDefault().getPluginPreferences().setValue( SeamProjectPreferences.SEAM_DEFAULT_CONNECTION_PROFILE, connProfileSelEditor.getValueAsString()); } else { SeamCorePlugin.getDefault().getPluginPreferences().setValue( SeamProjectPreferences.SEAM_DEFAULT_CONNECTION_PROFILE, getJpaConnectionProfile()); model.setStringProperty(ISeamFacetDataModelProperties.SEAM_CONNECTION_PROFILE, getJpaConnectionProfile()); } if (jBossHibernateDbTypeEditor != null) { SeamCorePlugin.getDefault().getPluginPreferences().setValue( SeamProjectPreferences.HIBERNATE_DEFAULT_DB_TYPE, this.jBossHibernateDbTypeEditor.getValueAsString()); } SeamCorePlugin.getDefault().getPluginPreferences().setValue( SeamProjectPreferences.JBOSS_AS_DEFAULT_DEPLOY_AS, this.jBossAsDeployAsEditor.getValueAsString()); model.setBooleanProperty(ISeamFacetDataModelProperties.SEAM_TEMPLATES_AND_LIBRARIES_COPYING, isSeamProjectWizard() || isWebProjectWizard()); model.setBooleanProperty(ISeamFacetDataModelProperties.SEAM_RUNTIME_LIBRARIES_COPYING, libraryListEditor.getValueAsString().equals(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_COPY_LIBRARIES) && (isSeamProjectWizard() || isWebProjectWizard())); } /* * Don't want to add jpa as required plugin, so use String constant instead of JptCorePlugin.FACET_ID */ private IProjectFacetVersion getJpaFacetVersion(){ IFacetedProjectWorkingCopy facetedProject = ( (ModifyFacetedProjectWizard) getWizard() ).getFacetedProjectWorkingCopy(); return facetedProject.getProjectFacetVersion(ProjectFacetsManager.getProjectFacet("jpt.jpa")); //$NON-NLS-1$ } /** * Used to save connection profile from jpa facet. * If not null then used as seam connection profile. */ private String jpaConnectioProfile; public void setJpaConnectionProfile(String jpaConnectioProfile){ this.jpaConnectioProfile = jpaConnectioProfile; } private String getJpaConnectionProfile(){ if (jpaConnectioProfile != null) return jpaConnectioProfile; IProjectFacetVersion jpaVersion = getJpaFacetVersion(); if (jpaVersion == null) throw new NullPointerException("Jpa facet version is null"); try { Object config = context.getConfig(jpaVersion, Action.Type.INSTALL, context.getProjectName()); if (config instanceof IDataModel) { /* * Don't want to add jpa as required plugin, so use String constant instead of JpaFacetDataModelProperties.CONNECTION */ return ((IDataModel)config).getStringProperty("JpaFacetDataModelProperties.CONNECTION"); //$NON-NLS-1$ } } catch (CoreException e) { SeamCorePlugin.getPluginLog().logError(e); } return null; } /** * Registers editor in data synchronizer and put SWT controls for it at * wizard page. * * @param editor * @param parent * @param columns */ protected void registerEditor(IFieldEditor editor, Composite parent, int columns) { sync.register(editor); editor.doFillIntoGrid(parent); } public List<String> getRuntimeNames(String version) { SeamRuntime[] rts = SeamRuntimeManager.getInstance().getRuntimes( SeamVersion.parseFromString(version)); List<String> result = new ArrayList<String>(); for (SeamRuntime seamRuntime : rts) { result.add(seamRuntime.getName()); } return result; } /** * Creates Seam Facet Wizard Page contents */ public void createControl(Composite parent) { sync = new DataModelSynchronizer(model); jBossSeamHomeEditor = SeamWizardFactory .createSeamRuntimeSelectionFieldEditor(new SeamVersion[0], SeamFacetInstallDataModelProvider .getSeamRuntimeDefaultValue(model), new NewSeamRuntimeAction()); initializeDialogUnits(parent); Composite root = new Composite(parent, SWT.NONE); GridData gd = new GridData(); gd.horizontalSpan = 1; gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; gd.grabExcessVerticalSpace = false; GridLayout gridLayout = new GridLayout(1, false); root.setLayout(gridLayout); Group generalGroup = new Group(root, SWT.NONE); generalGroup.setLayoutData(gd); generalGroup.setText(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_GENERAL); gridLayout = new GridLayout(3, false); generalGroup.setLayout(gridLayout); registerEditor(jBossSeamHomeEditor, generalGroup, 3); jBossSeamHomeEditor.addPropertyChangeListener(new PropertyChangeListener(){ public void propertyChange(PropertyChangeEvent arg0) { Boolean testProject = canTestProjectBeCreated(); createTestProjectCheckboxeditor.setValue(testProject); createTestProjectCheckboxeditor.setEnabled(testProject); } }); Object deployAs = getDeployAsDefaultValue(); jBossAsDeployAsEditor.setValue(deployAs); registerEditor(jBossAsDeployAsEditor, generalGroup, 3); registerEditor(ejbProjectNameditor, generalGroup, 3); ejbProjectNameditor.setEnabled(deployAs.equals(ISeamFacetDataModelProperties.DEPLOY_AS_EAR)); registerEditor(earProjectNameditor, generalGroup, 3); earProjectNameditor.setEnabled(deployAs.equals(ISeamFacetDataModelProperties.DEPLOY_AS_EAR)); List<String> providers = new ArrayList<String>(); providers.add(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_COPY_LIBRARIES); providers.add(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_CONFIGURE_LATER); libraryListEditor = IFieldEditorFactory.INSTANCE.createComboEditor( ISeamFacetDataModelProperties.SEAM_LIBRARY_PROVIDER, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_LIBRARIES, providers, providers.get(0)); registerEditor(libraryListEditor, generalGroup, 3); jBossAsDeployAsEditor.addPropertyChangeListener(new PropertyChangeListener(){ public void propertyChange(PropertyChangeEvent arg0) { Boolean value = jBossAsDeployAsEditor.getValue() == ISeamFacetDataModelProperties.DEPLOY_AS_EAR; if(!isWebProjectWizard()){ ejbProjectNameditor.setEnabled(value.booleanValue()); earProjectNameditor.setEnabled(value.booleanValue()); } } }); gd = new GridData(); gd.horizontalSpan = 1; gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; gd.grabExcessVerticalSpace = false; databaseGroup = new Group(root, SWT.NONE); databaseGroup.setLayoutData(gd); databaseGroup.setText(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_DATABASE); gridLayout = new GridLayout(4, false); databaseGroup.setLayout(gridLayout); jBossHibernateDbTypeEditor = IFieldEditorFactory.INSTANCE .createComboEditor(ISeamFacetDataModelProperties.DB_TYPE, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_DATABASE_TYPE, Arrays.asList(HIBERNATE_HELPER.getDialectNames()), getDefaultDbType(), false); registerEditor(jBossHibernateDbTypeEditor, databaseGroup, 4); createDatabaseGoupControl(); Group generationGroup = new Group(root, SWT.NONE); gd = new GridData(); gd.horizontalSpan = 1; gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; gd.grabExcessVerticalSpace = false; generationGroup.setLayoutData(gd); generationGroup .setText(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_CODE_GENERATION); gridLayout = new GridLayout(3, false); generationGroup.setLayout(gridLayout); registerEditor(sessionBeanPkgNameditor, generationGroup, 3); registerEditor(entityBeanPkgNameditor, generationGroup, 3); registerEditor(createTestProjectCheckboxeditor, generationGroup, 3); createTestProjectCheckboxeditor.addPropertyChangeListener(new PropertyChangeListener(){ public void propertyChange(PropertyChangeEvent arg0) { Boolean value = (Boolean)createTestProjectCheckboxeditor.getValue(); testsPkgNameditor.setEnabled(value.booleanValue()); testProjectNameditor.setEnabled(value.booleanValue()); } }); registerEditor(testProjectNameditor, generationGroup, 3); registerEditor(testsPkgNameditor, generationGroup, 3); if(!isSeamProjectWizard()){ createTestProjectCheckboxeditor.setValue(false); createTestProjectCheckboxeditor.setEnabled(false); testProjectNameditor.setEnabled(false); testsPkgNameditor.setEnabled(false); if(!isWebProjectWizard()){ libraryListEditor.setValue(providers.get(1)); libraryListEditor.setEnabled(false); } } if(isWebProjectWizard()){ ejbProjectNameditor.setValue(""); ejbProjectNameditor.setEnabled(false); earProjectNameditor.setValue(""); earProjectNameditor.setEnabled(false); } setControl(root); if (validatorDelegate == null) { validatorDelegate = new DataModelValidatorDelegate(this.model, this); validatorDelegate.addValidatorForProperty(jBossSeamHomeEditor .getName(), SeamValidatorFactory.SEAM_RUNTIME_NAME_VALIDATOR); validatorDelegate.addValidatorForProperty(connProfileSelEditor .getName(), SeamValidatorFactory.CONNECTION_PROFILE_VALIDATOR); validatorDelegate.addValidatorForProperty(testsPkgNameditor .getName(), new PackageNameValidator(testsPkgNameditor .getName(), "tests")); //$NON-NLS-1$ validatorDelegate.addValidatorForProperty(entityBeanPkgNameditor .getName(), new PackageNameValidator(entityBeanPkgNameditor .getName(), "entity beans")); //$NON-NLS-1$ validatorDelegate.addValidatorForProperty(sessionBeanPkgNameditor .getName(), new PackageNameValidator( sessionBeanPkgNameditor.getName(), "session beans")); //$NON-NLS-1$ if (isSeamProjectWizard()) { validatorDelegate.addValidatorForProperty( IFacetDataModelProperties.FACET_PROJECT_NAME, new ProjectNamesDuplicationValidator( IFacetDataModelProperties.FACET_PROJECT_NAME)); } validatorDelegate.addValidatorForProperty( ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS, getDeploymentTypeValidator(getWizard())); validatorDelegate.addValidatorForProperty( ISeamFacetDataModelProperties.SEAM_EAR_PROJECT, new ProjectNamesDuplicationValidator( ISeamFacetDataModelProperties.SEAM_EAR_PROJECT)); validatorDelegate.addValidatorForProperty( ISeamFacetDataModelProperties.SEAM_EJB_PROJECT, new ProjectNamesDuplicationValidator( ISeamFacetDataModelProperties.SEAM_EJB_PROJECT)); validatorDelegate.addValidatorForProperty( ISeamFacetDataModelProperties.SEAM_TEST_PROJECT, new ProjectNamesDuplicationValidator( ISeamFacetDataModelProperties.SEAM_TEST_PROJECT)); } Dialog.applyDialogFont(parent); initDefaultWizardProperties(); Object parentDm = model .getProperty(FacetInstallDataModelProvider.MASTER_PROJECT_DM); if (parentDm != null) { ((IDataModel) parentDm).addListener(this); } } public void createDatabaseGoupControl() { //disposeControls(jBossHibernateDbTypeEditor); disposeControls(connProfileSelEditor); disposeControls(dbSchemaName); disposeControls(dbCatalogName); disposeControls(dbTablesExists); disposeControls(recreateTablesOnDeploy); if (!needToShowConnectionProfile){ //jBossHibernateDbTypeEditor = null; connProfileSelEditor = null; dbSchemaName = null; dbCatalogName = null; } else { /*jBossHibernateDbTypeEditor = IFieldEditorFactory.INSTANCE .createComboEditor(ISeamFacetDataModelProperties.DB_TYPE, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_DATABASE_TYPE, Arrays.asList(HIBERNATE_HELPER.getDialectNames()), getDefaultDbType(), false);*/ connProfileSelEditor = SeamWizardFactory .createConnectionProfileSelectionFieldEditor( getConnectionProfileDefaultValue(), new IValidator() { public Map<String, IStatus> validate(Object value, Object context) { SeamInstallWizardPage.this.validate(); return SeamValidatorFactory.NO_ERRORS; } }); dbSchemaName = IFieldEditorFactory.INSTANCE .createTextEditor( ISeamFacetDataModelProperties.DB_DEFAULT_SCHEMA_NAME, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_DATABASE_SCHEMA_NAME, ""); //$NON-NLS-1$ dbCatalogName = IFieldEditorFactory.INSTANCE .createTextEditor( ISeamFacetDataModelProperties.DB_DEFAULT_CATALOG_NAME, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_DATABASE_CATALOG_NAME, ""); //$NON-NLS-1$ jBossHibernateDbTypeEditor .addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { SeamInstallWizardPage.this.model .setProperty( ISeamFacetDataModelProperties.HIBERNATE_DIALECT, HIBERNATE_HELPER.getDialectClass(evt .getNewValue().toString())); } }); //registerEditor(jBossHibernateDbTypeEditor, databaseGroup, 4); registerEditor(connProfileSelEditor, databaseGroup, 4); registerEditor(dbSchemaName, databaseGroup, 4); registerEditor(dbCatalogName, databaseGroup, 4); } dbTablesExists = IFieldEditorFactory.INSTANCE .createCheckboxEditor( ISeamFacetDataModelProperties.DB_ALREADY_EXISTS, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_DB_TABLES_ALREADY_EXISTS, false); recreateTablesOnDeploy = IFieldEditorFactory.INSTANCE .createCheckboxEditor( ISeamFacetDataModelProperties.RECREATE_TABLES_AND_DATA_ON_DEPLOY, SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_RECREATE_DATABASE_TABLES_AND_DATA_ON_DEPLOY, false); registerEditor(dbTablesExists, databaseGroup, 4); registerEditor(recreateTablesOnDeploy, databaseGroup, 4); databaseGroup.getParent().layout(true); } private void disposeControls(IFieldEditor editor){ if (editor != null){ Object[] controls = editor.getEditorControls(); for (int i = 0; i < controls.length; i++) { Control control = (Control) controls[i]; if (!control.isDisposed()) control.dispose(); } editor.dispose(); } } private boolean isSeamProjectWizard() { return getWizard() instanceof SeamProjectWizard; } private boolean isWebProjectWizard(){ IWizard wizard = getWizard(); if(wizard != null){ return wizard.getClass().equals(WebProjectWizard.class); } return false; } /** * */ public void propertyChanged(DataModelEvent event) { if (event.getPropertyName().equals( IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER)) { model.setStringProperty( ISeamFacetDataModelProperties.WEB_CONTENTS_FOLDER, event .getProperty().toString()); } else if (event.getPropertyName().equals( IFacetDataModelProperties.FACET_PROJECT_NAME)) { String seamProjectName = event.getProperty().toString(); model.setStringProperty( ISeamFacetDataModelProperties.SEAM_PROJECT_NAME, seamProjectName); sessionBeanPkgNameditor.setValue(getSessionPkgName(seamProjectName)); entityBeanPkgNameditor.setValue(getEntityPkgName(seamProjectName)); testsPkgNameditor.setValue(getTestPkgName(seamProjectName)); if(!isWebProjectWizard()){ ejbProjectNameditor.setValue(getEJBProjectName(seamProjectName)); earProjectNameditor.setValue(getEARProjectName(seamProjectName)); } testProjectNameditor.setValue(getTestProjectName(seamProjectName)); model.setStringProperty( ISeamFacetDataModelProperties.SESSION_BEAN_PACKAGE_NAME, getSessionPkgName(seamProjectName)); model.setStringProperty( ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME, getEntityPkgName(seamProjectName)); model.setProperty( ISeamFacetDataModelProperties.TEST_PROJECT_CREATING, createTestProjectCheckboxeditor.getValue()); model.setStringProperty( ISeamFacetDataModelProperties.TEST_CASES_PACKAGE_NAME, getTestPkgName(seamProjectName)); model.setStringProperty( ISeamFacetDataModelProperties.SEAM_EAR_PROJECT, earProjectNameditor.getValueAsString()); model.setStringProperty( ISeamFacetDataModelProperties.SEAM_EJB_PROJECT, ejbProjectNameditor.getValueAsString()); model.setStringProperty( ISeamFacetDataModelProperties.SEAM_TEST_PROJECT, testProjectNameditor.getValueAsString()); } } private boolean needToShowConnectionProfile = true; /** * It is overridden to fill Code Generation group with the default package * names */ @Override public void setVisible(boolean visible) { if (visible) { setCodeGenerationProperties(); setDefaultSeamRuntime(); boolean jpaFacetAdded = getJpaFacetVersion() != null; if (jpaFacetAdded == needToShowConnectionProfile){ needToShowConnectionProfile = !jpaFacetAdded; createDatabaseGoupControl(); } //update selected connection profile if (!needToShowConnectionProfile){ model.setStringProperty(ISeamFacetDataModelProperties.SEAM_CONNECTION_PROFILE, getJpaConnectionProfile()); } validate(); } super.setVisible(visible); }; private void initDefaultWizardProperties() { setCodeGenerationProperties(); setDefaultSeamRuntime(); validate(); } /* * Fills Code Generation group with the default package names. */ private void setCodeGenerationProperties() { String seamProjectName = model.getStringProperty( ISeamFacetDataModelProperties.SEAM_PROJECT_NAME); if(seamProjectName == null) return; if("".equals(sessionBeanPkgNameditor.getValueAsString())) sessionBeanPkgNameditor.setValue(getSessionPkgName(seamProjectName)); if("".equals(entityBeanPkgNameditor.getValueAsString())) entityBeanPkgNameditor.setValue(getEntityPkgName(seamProjectName)); if("".equals(testsPkgNameditor.getValueAsString())) testsPkgNameditor.setValue(getTestPkgName(seamProjectName)); if(!isWebProjectWizard()){ if("".equals(ejbProjectNameditor.getValueAsString())) ejbProjectNameditor.setValue(getEJBProjectName(seamProjectName)); if("".equals(earProjectNameditor.getValueAsString())) earProjectNameditor.setValue(getEARProjectName(seamProjectName)); } if("".equals(testProjectNameditor.getValueAsString())) testProjectNameditor.setValue(getTestProjectName(seamProjectName)); } private String getSessionPkgName(String projectName) { return "org.domain." //$NON-NLS-1$ + SeamUtil.getSeamPackageName(projectName) + ".session"; //$NON-NLS-1$ } private String getEntityPkgName(String projectName) { return "org.domain." //$NON-NLS-1$ + SeamUtil.getSeamPackageName(projectName) + ".entity"; //$NON-NLS-1$ } private String getTestPkgName(String projectName) { return "org.domain." //$NON-NLS-1$ + SeamUtil.getSeamPackageName(projectName) + ".test"; //$NON-NLS-1$ } private String getEJBProjectName(String projectName) { return projectName + "-ejb"; //$NON-NLS-1$ } private String getEARProjectName(String projectName) { return projectName + "-ear"; //$NON-NLS-1$ } private String getTestProjectName(String projectName) { return projectName + "-test"; //$NON-NLS-1$ } /* * Sets seam runtime field in default value. */ private void setDefaultSeamRuntime() { ITaggedFieldEditor runtimesField = (ITaggedFieldEditor) ((CompositeEditor) jBossSeamHomeEditor) .getEditors().get(1); Object oldValue = runtimesField.getValue(); Object newValue = ""; //$NON-NLS-1$ List<String> runtimes = getRuntimeNames(model.getProperty( IFacetDataModelProperties.FACET_VERSION_STR).toString()); if (oldValue == null || !runtimes.contains(oldValue)) { Object defaultRnt = SeamFacetInstallDataModelProvider .getSeamRuntimeDefaultValue(model); if (defaultRnt != null && runtimes.contains(defaultRnt)) { newValue = defaultRnt; } else if (!runtimes.isEmpty()) { newValue = runtimes.get(0); } } else { newValue = oldValue; } runtimesField.setValue(newValue); runtimesField.setTags(runtimes.toArray(new String[0])); } private void validate() { final IStatus message = validatorDelegate.getFirstValidationError(); Display.getDefault().syncExec(new Runnable() { public void run() { if (message == null) { setMessage(null); setErrorMessage(null); setPageComplete(true); return; } if (message.getSeverity() == IStatus.ERROR) { setErrorMessage(message.getMessage()); setPageComplete(false); return; } setErrorMessage(null); setMessage(message.getMessage(), DialogPage.WARNING); setPageComplete(true); return; } }); } public class PackageNameValidator implements IValidator { String fieldName; String targetName; /** * @param fieldName * @param targetName */ public PackageNameValidator(String fieldName, String targetName) { this.fieldName = fieldName; this.targetName = targetName; } /** * @see IValidator#validate(Object, Object) */ public Map<String, IStatus> validate(Object value, Object context) { IStatus status = JavaConventions.validatePackageName(value.toString(), SeamValidatorFactory.DEFAULT_SOURCE_LEVEL, SeamValidatorFactory.DEFAULT_COMPLIANCE_LEVEL); if (((IStatus.ERROR | IStatus.WARNING) & status.getSeverity() ) != 0 ){ return doPackStatus(status, fieldName, NLS.bind(SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_PACKAGE_NAME_NOT_VALID, targetName)); } return SeamValidatorFactory.NO_ERRORS; } } private boolean canTestProjectBeCreated() { if(isSeamProjectWizard()){ String seamRuntimeName = jBossSeamHomeEditor.getValueAsString(); SeamRuntime seamRuntime = SeamRuntimeManager.getInstance().findRuntimeByName(seamRuntimeName); if (seamRuntime != null) { // bootstrap folder was removed in Seam 2.3.0.Beta1 from WFK 2.0 ER4 // See https://issues.jboss.org/browse/JBIDE-11611 File bootstrap = new File(seamRuntime.getHomeDir(), "bootstrap"); return bootstrap.exists(); } } return false; } class ProjectNamesDuplicationValidator implements IValidator { String propertyName; /** */ public ProjectNamesDuplicationValidator(String propertyName) { this.propertyName = propertyName; } /** * @see IValidator#validate(Object, Object) */ public Map<String, IStatus> validate(Object value, Object context) { final String deployAs = model .getStringProperty(ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS); final boolean testCreating = (Boolean)model.getProperty(ISeamFacetDataModelProperties.TEST_PROJECT_CREATING); IStatus status; if (testCreating) { final String testProjectName = testProjectNameditor.getValueAsString(); status = ProjectCreationDataModelProviderNew .validateName(testProjectName); if (((IStatus.ERROR | IStatus.WARNING) & status.getSeverity() ) != 0 ){ if("".equals(testProjectName.trim())) return doPackStatus(status, propertyName, SeamCoreMessages.VALIDATOR_FACTORY_TEST_PROJECT_CANNOT_BE_EMPTY); return doPackStatus(status, propertyName, NLS.bind(SeamCoreMessages.VALIDATOR_FACTORY_TEST_PROJECT_ALREADY_EXISTS, testProjectName)); } } if (ISeamFacetDataModelProperties.DEPLOY_AS_EAR.equals(deployAs) && !isWebProjectWizard()) { final String earProjectName = earProjectNameditor.getValueAsString(); status = ProjectCreationDataModelProviderNew .validateName(earProjectName); if (((IStatus.ERROR | IStatus.WARNING) & status.getSeverity() ) != 0 ){ if("".equals(earProjectName.trim())) return doPackStatus(status, propertyName, SeamCoreMessages.VALIDATOR_FACTORY_EAR_PROJECT_CANNOT_BE_EMPTY); return doPackStatus(status, propertyName, NLS.bind(SeamCoreMessages.VALIDATOR_FACTORY_EAR_PROJECT_ALREADY_EXISTS, earProjectName)); } final String ejbProjectName = ejbProjectNameditor.getValueAsString(); status = ProjectCreationDataModelProviderNew .validateName(ejbProjectName); if (((IStatus.ERROR | IStatus.WARNING) & status.getSeverity() ) != 0 ){ if("".equals(ejbProjectName.trim())) return doPackStatus(status, propertyName, SeamCoreMessages.VALIDATOR_FACTORY_EJB_PROJECT_CANNOT_BE_EMPTY); return doPackStatus(status, propertyName, NLS.bind(SeamCoreMessages.VALIDATOR_FACTORY_EJB_PROJECT_ALREADY_EXISTS, ejbProjectName)); } } return SeamValidatorFactory.NO_ERRORS; } } IValidator getDeploymentTypeValidator(IWizard wizard) { if (wizard instanceof NewProjectDataModelFacetWizard) { return new DeploymentTypeValidator( ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS, ((NewProjectDataModelFacetWizard) wizard).getDataModel()); } // return new DeploymentTypeValidator(ISeamFacetDataModelProperties. // JBOSS_AS_DEPLOY_AS, model); return new IValidator() { public Map<String, IStatus> validate(Object value, Object context) { return SeamValidatorFactory.NO_ERRORS; } }; } static class DeploymentTypeValidator implements IValidator { String propertyName; IDataModel model; static final IProjectFacet EJB_FACET = ProjectFacetsManager .getProjectFacet(IModuleConstants.JST_EJB_MODULE); static final IProjectFacetVersion EJB_30 = EJB_FACET.getVersion("3.0"); //$NON-NLS-1$ static final IProjectFacet EAR_FACET = ProjectFacetsManager .getProjectFacet(IModuleConstants.JST_EAR_MODULE); static final IProjectFacetVersion EAR_50 = EAR_FACET.getVersion("5.0"); //$NON-NLS-1$ /** */ public DeploymentTypeValidator(String propertyName, IDataModel model) { this.propertyName = propertyName; this.model = model; } /** * @see IValidator#validate(Object, Object) */ public Map<String, IStatus> validate(Object value, Object context) { final String deploymentType = value.toString(); if (!ISeamFacetDataModelProperties.DEPLOY_AS_WAR .equals(deploymentType)) { Object runtimeName = model .getProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME); if (runtimeName != null) { IRuntime rt = RuntimeManager.getRuntime(runtimeName .toString()); if (!rt.supports(EJB_30) || !rt.supports(EAR_50)) { return SeamValidatorFactory.createErrormessage( propertyName, new Status( IStatus.ERROR, SeamCorePlugin.PLUGIN_ID, NLS.bind( SeamCoreMessages.SEAM_INSTALL_WIZARD_PAGE_CANNOT_USE_SELECTED_DEPLOYMENT6, new String[] { deploymentType.toUpperCase(), runtimeName.toString() }))); } } } return SeamValidatorFactory.NO_ERRORS; } } private class NewSeamRuntimeAction extends SeamWizardFactory.NewSeamRuntimeAction { /* * (non-Javadoc) * * @see * org.jboss.tools.seam.ui.wizard.SeamWizardFactory.NewSeamRuntimeAction * #getRuntimeSelectionEditor() */ @Override protected IFieldEditor getRuntimeSelectionEditor() { return jBossSeamHomeEditor; } /* * (non-Javadoc) * * @see * org.jboss.tools.seam.ui.wizard.SeamWizardFactory.NewSeamRuntimeAction * #getSeamVersions() */ @Override protected SeamVersion[] getSeamVersions() { String seamVersion = model.getProperty( IFacetDataModelProperties.FACET_VERSION_STR).toString(); return new SeamVersion[] { SeamVersion.parseFromString(seamVersion) }; } } /** * */ public void finishPressed() { model.removeListener(validatorDelegate); }; /* * test method */ public String getSessionBeanPkgName() { return sessionBeanPkgNameditor.getValueAsString(); } /* * test method */ public String getEntityBeanPkgName() { return entityBeanPkgNameditor.getValueAsString(); } /* * test method */ public String getTestsPkgName() { return testsPkgNameditor.getValueAsString(); } private Map<String, IStatus> doPackStatus(IStatus status, String propertyName, String message){ return SeamValidatorFactory.createErrormessage( propertyName, new Status(status.getSeverity(), SeamCorePlugin.PLUGIN_ID, message)); } }