/******************************************************************************* * 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.wizard; import java.beans.PropertyChangeEvent; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Composite; import org.jboss.tools.common.model.util.EclipseResourceUtil; import org.jboss.tools.common.ui.IValidator; import org.jboss.tools.common.ui.widget.editor.IFieldEditor; import org.jboss.tools.seam.core.SeamCorePlugin; import org.jboss.tools.seam.core.SeamProjectsSet; import org.jboss.tools.seam.core.SeamCoreMessages; import org.jboss.tools.seam.internal.core.project.facet.ISeamFacetDataModelProperties; import org.jboss.tools.seam.internal.core.project.facet.SeamValidatorFactory; import org.jboss.tools.seam.internal.core.validation.SeamProjectPropertyValidator; import org.jboss.tools.seam.ui.SeamGuiPlugin; /** * @author eskimo * */ public class SeamEntityWizardPage1 extends SeamBaseWizardPage { /** * @param is * */ public SeamEntityWizardPage1(IStructuredSelection is) { super("seam.new.entity.page1","Seam Entity", null, is); setMessage(getDefaultMessageText()); } /** * */ @Override protected void createEditors() { rootSeamProject = SeamWizardUtils.getRootSeamProject(initialSelection); String selectedProject = (rootSeamProject == null) ? "" : rootSeamProject.getName(); addEditor(SeamWizardFactory.createSeamProjectSelectionFieldEditor(selectedProject)); addEditor(SeamWizardFactory.createSeamEntityClasNameFieldEditor()); String packageName = getDefaultPackageName(selectedProject); addEditor(SeamWizardFactory.createSeamJavaPackageSelectionFieldEditor(packageName)); addEditor(SeamWizardFactory.createSeamMasterPageNameFieldEditor()); addEditor(SeamWizardFactory.createSeamPageNameFieldEditor()); setSeamProjectNameData(selectedProject); } @Override public void createControl(Composite parent) { setControl(new GridLayoutComposite(parent)); setPageComplete(false); if ("".equals(editorRegistry.get(ISeamParameter.SEAM_PROJECT_NAME).getValue())) { //$NON-NLS-1$ if(getEditor(ISeamParameter.SEAM_PACKAGE_NAME)!=null) { getEditor(ISeamParameter.SEAM_PACKAGE_NAME).setEnabled(false); } } } @Override public void doFillDefaults(PropertyChangeEvent event) { if(event.getPropertyName().equals(ISeamParameter.SEAM_ENTITY_CLASS_NAME)) { if(event.getNewValue()==null||"".equals(event.getNewValue().toString().trim())) { setDefaultValue(ISeamParameter.SEAM_ENTITY_CLASS_NAME, ""); setDefaultValue(ISeamParameter.SEAM_MASTER_PAGE_NAME, ""); setDefaultValue(ISeamParameter.SEAM_PAGE_NAME, ""); } else { String value = event.getNewValue().toString(); String valueL = value.substring(0,1).toLowerCase() + value.substring(1); setDefaultValue(ISeamParameter.SEAM_MASTER_PAGE_NAME, valueL+"List"); setDefaultValue(ISeamParameter.SEAM_PAGE_NAME, valueL); } } if(event.getPropertyName().equals(ISeamParameter.SEAM_PROJECT_NAME)) { String selectedProject = event.getNewValue().toString(); setSeamProjectNameData(selectedProject); setDefaultValue(ISeamParameter.SEAM_PACKAGE_NAME, getDefaultPackageName(selectedProject)); } } /* * (non-Javadoc) * @see org.jboss.tools.seam.ui.wizard.SeamBaseWizardPage#getDefaultPackageName(org.eclipse.core.runtime.preferences.IEclipsePreferences) */ @Override protected String getDefaultPackageName(IEclipsePreferences seamFacetPrefs) { return seamFacetPrefs.get(ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME, ""); } /* * (non-Javadoc) * @see org.jboss.tools.seam.ui.wizard.SeamBaseWizardPage#isProjectSettingsOk() */ @Override protected boolean isProjectSettingsOk() { if(rootSeamProject!=null) { IEclipsePreferences prefs = SeamCorePlugin.getSeamPreferences(rootSeamProject); return SeamProjectPropertyValidator.isFolderPathValid(prefs.get(ISeamFacetDataModelProperties.ENTITY_BEAN_SOURCE_FOLDER, ""), false) && SeamProjectPropertyValidator.isFolderPathValid(prefs.get(ISeamFacetDataModelProperties.SESSION_BEAN_SOURCE_FOLDER, ""), false) && SeamProjectPropertyValidator.isFolderPathValid(prefs.get(ISeamFacetDataModelProperties.WEB_CONTENTS_FOLDER, ""), false) && ("false".equals(prefs.get(ISeamFacetDataModelProperties.TEST_CREATING, "false").trim()) || (SeamProjectPropertyValidator.isFolderPathValid(prefs.get(ISeamFacetDataModelProperties.TEST_SOURCE_FOLDER, ""), false) && SeamProjectPropertyValidator.isProjectNameValid(prefs.get(ISeamFacetDataModelProperties.SEAM_TEST_PROJECT, ""), false))) && (ISeamFacetDataModelProperties.DEPLOY_AS_WAR.equals(prefs.get(ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS, ISeamFacetDataModelProperties.DEPLOY_AS_WAR).trim()) || SeamProjectPropertyValidator.isProjectNameValid(prefs.get(ISeamFacetDataModelProperties.SEAM_EJB_PROJECT, ""), false)); } return true; } @Override protected void doValidate(PropertyChangeEvent event) { if(!isValidProjectSelected()) return; IFieldEditor packageEditor = getEditor(ISeamParameter.SEAM_PACKAGE_NAME); if(packageEditor!=null) { packageEditor.setEnabled(true); } IProject project = getSelectedProject(); if(!isValidRuntimeConfigured(project)) return; Map<String, IStatus> errors = SeamValidatorFactory.SEAM_COMPONENT_NAME_VALIDATOR.validate( editorRegistry.get(ISeamParameter.SEAM_ENTITY_CLASS_NAME).getValue(), null); if(!errors.isEmpty()) { setErrorMessage(NLS.bind(errors.get(IValidator.DEFAULT_ERROR).getMessage(),SeamCoreMessages.SEAM_ENTITY_WIZARD_PAGE1_ENTITY_CLASS_NAME)); setPageComplete(false); return; } IFieldEditor editor = editorRegistry.get(ISeamParameter.SEAM_PACKAGE_NAME); if(editor!=null) { errors = SeamValidatorFactory.PACKAGE_NAME_VALIDATOR.validate(editor.getValue(), null); if(!errors.isEmpty()) { setErrorMessage(errors.get(IValidator.DEFAULT_ERROR).getMessage()); //$NON-NLS-1$ setPageComplete(false); return; } } errors = SeamValidatorFactory.FILE_NAME_VALIDATOR.validate( editorRegistry.get(ISeamParameter.SEAM_MASTER_PAGE_NAME).getValue(), new Object[]{SeamCoreMessages.SEAM_ENTITY_WIZARD_PAGE1_ENTITY_MASTER_PAGE,project,project}); if(!errors.isEmpty()) { setErrorMessage(errors.get(IValidator.DEFAULT_ERROR).getMessage()); setPageComplete(false); return; } errors = SeamValidatorFactory.FILE_NAME_VALIDATOR.validate( editorRegistry.get(ISeamParameter.SEAM_PAGE_NAME).getValue(), new Object[]{SeamCoreMessages.SEAM_ENTITY_WIZARD_PAGE1_PAGE,project}); if(!errors.isEmpty()) { setErrorMessage(errors.get(IValidator.DEFAULT_ERROR).getMessage()); setPageComplete(false); return; } IJavaProject javaProject = EclipseResourceUtil.getJavaProject(project); if(javaProject != null){ try{ IType component = javaProject.findType((String)editorRegistry.get(ISeamParameter.SEAM_PACKAGE_NAME).getValue()+"."+editorRegistry.get(ISeamParameter.SEAM_ENTITY_CLASS_NAME).getValue()); if(component != null){ setErrorMessage(null); setMessage(SeamCoreMessages.ENTITY_CLASS_ALREADY_EXISTS, IMessageProvider.WARNING); setPageComplete(true); return; } }catch(JavaModelException ex){ SeamGuiPlugin.getPluginLog().logError(ex); } } SeamProjectsSet seamPrjSet = new SeamProjectsSet(project); IPath webContent = seamPrjSet.getViewsFolder().getFullPath(); IPath masterPage = webContent.append(editorRegistry.get(ISeamParameter.SEAM_MASTER_PAGE_NAME).getValue()+".xhtml"); IFile masterPageFile = ResourcesPlugin.getWorkspace().getRoot().getFile(masterPage); if(masterPageFile.exists()){ setErrorMessage(null); setMessage(SeamCoreMessages.MASTER_PAGE_ALREADY_EXISTS, IMessageProvider.WARNING); setPageComplete(true); return; } IPath page = webContent.append(editorRegistry.get(ISeamParameter.SEAM_PAGE_NAME).getValue()+".xhtml"); IFile pageFile = ResourcesPlugin.getWorkspace().getRoot().getFile(page); if(pageFile.exists()){ setErrorMessage(null); setMessage(SeamCoreMessages.PAGE_ALREADY_EXISTS, IMessageProvider.WARNING); setPageComplete(true); return; } setErrorMessage(null); setMessage(getDefaultMessageText()); setPageComplete(true); } /* (non-Javadoc) * @see org.jboss.tools.seam.ui.wizard.SeamBaseWizardPage#getDefaultMessageText() */ @Override public String getDefaultMessageText() { return "Create a new Entity"; } }