/******************************************************************************* * 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.internal.core.project.facet; import java.io.File; import java.io.IOException; import java.util.Map; import java.util.Set; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.wst.common.componentcore.datamodel.FacetInstallDataModelProvider; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties; import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.jboss.tools.common.zip.UnzipOperation; import org.jboss.tools.seam.core.SeamCorePlugin; 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.osgi.framework.Bundle; /** * Data model provider for Seam facet wizard page * * @author eskimo * */ public class SeamFacetInstallDataModelProvider extends FacetInstallDataModelProvider implements ISeamFacetDataModelProperties { private static final String EMPTY_STRING = ""; /** * Returns set of facet properties for facet wizard page * * @return set of property names */ public Set getPropertyNames() { Set<String> names = super.getPropertyNames();//super.getPropertyNames(); // General group names.add(ISeamFacetDataModelProperties.JBOSS_AS_HOME); names.add(ISeamFacetDataModelProperties.JBOSS_SEAM_HOME); names.add(ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS); names.add(ISeamFacetDataModelProperties.JBOSS_AS_TARGET_SERVER); names.add(ISeamFacetDataModelProperties.JBOSS_AS_TARGET_RUNTIME); // Database group names.add(ISeamFacetDataModelProperties.DB_TYPE); names.add(ISeamFacetDataModelProperties.HIBERNATE_DIALECT); names.add(ISeamFacetDataModelProperties.JDBC_DRIVER_CLASS_NAME); names.add(ISeamFacetDataModelProperties.JDBC_URL_FOR_DB); names.add(ISeamFacetDataModelProperties.DB_USER_NAME); names.add(ISeamFacetDataModelProperties.DB_USER_PASSWORD); names.add(ISeamFacetDataModelProperties.DB_SCHEMA_NAME); names.add(ISeamFacetDataModelProperties.DB_DEFAULT_SCHEMA_NAME); names.add(ISeamFacetDataModelProperties.DB_CATALOG_NAME); names.add(ISeamFacetDataModelProperties.DB_DEFAULT_CATALOG_NAME); names.add(ISeamFacetDataModelProperties.DB_ALREADY_EXISTS); names.add(ISeamFacetDataModelProperties.RECREATE_TABLES_AND_DATA_ON_DEPLOY); names.add(ISeamFacetDataModelProperties.JDBC_DRIVER_JAR_PATHS_ARRAY); names.add(ISeamFacetDataModelProperties.JDBC_DRIVER_JAR_NAME); // Code generation group names.add(ISeamFacetDataModelProperties.SESSION_BEAN_SOURCE_FOLDER); names.add(ISeamFacetDataModelProperties.SESSION_BEAN_PACKAGE_NAME); names.add(ISeamFacetDataModelProperties.ENTITY_BEAN_SOURCE_FOLDER); names.add(ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME); names.add(ISeamFacetDataModelProperties.TEST_PROJECT_CREATING); names.add(ISeamFacetDataModelProperties.TEST_SOURCE_FOLDER); names.add(ISeamFacetDataModelProperties.TEST_CASES_PACKAGE_NAME); names.add(ISeamFacetDataModelProperties.TEST_CREATING); names.add(ISeamFacetDataModelProperties.WEB_CONTENTS_FOLDER); names.add(ISeamFacetDataModelProperties.SEAM_PROJECT_NAME); names.add(ISeamFacetDataModelProperties.SEAM_CONNECTION_PROFILE); names.add(ISeamFacetDataModelProperties.SEAM_EAR_PROJECT); names.add(ISeamFacetDataModelProperties.SEAM_EJB_PROJECT); names.add(ISeamFacetDataModelProperties.SEAM_TEST_PROJECT); names.add(ISeamFacetDataModelProperties.SEAM_RUNTIME_NAME); names.add(ISeamFacetDataModelProperties.HIBERNATE_HBM2DDL_AUTO); names.add(ISeamFacetDataModelProperties.CREATE_EAR_PROJECTS); names.add(CONFIGURE_DEFAULT_SEAM_RUNTIME); names.add(CONFIGURE_WAR_PROJECT); names.add(ISeamFacetDataModelProperties.SEAM_RUNTIME_LIBRARIES_COPYING); names.add(ISeamFacetDataModelProperties.SEAM_TEMPLATES_AND_LIBRARIES_COPYING); names.add(ISeamFacetDataModelProperties.SEAM_LIBRARY_PROVIDER); //JBIDE-11176 We need to be able to distinguish facet installation between wizard and maven configurator names.add(ISeamFacetDataModelProperties.PROJECT_ALREADY_EXISTS); return names; } /** * Returns default value for a given property * * @param propertyName name of property which default value requested * @return default value */ public Object getDefaultProperty(String propertyName) { if (JBOSS_AS_HOME.equals(propertyName)) { // return "Jboss_AS_HOME"; //$NON-NLS-1$ return null; } else if (JBOSS_AS_DEPLOY_AS.equals(propertyName)) { // return "Jboos_DEPLOY_AS"; //$NON-NLS-1$ return null; } else if (propertyName.equals(FACET_ID)) { return ISeamFacetDataModelProperties.SEAM_FACET_ID; } else if (SEAM_TEST_PROJECT.equals(propertyName)) { return EMPTY_STRING; } else if (SEAM_EJB_PROJECT.equals(propertyName)) { return EMPTY_STRING; } else if (SEAM_EAR_PROJECT.equals(propertyName)) { return EMPTY_STRING; } else if (DB_DEFAULT_CATALOG_NAME.equals(propertyName)) { return EMPTY_STRING; } else if (DB_DEFAULT_SCHEMA_NAME.equals(propertyName)) { return EMPTY_STRING; } else if(JBOSS_AS_TARGET_RUNTIME.equals(propertyName)) { return null; } else if(JBOSS_AS_TARGET_RUNTIME.equals(propertyName)) { return null; } else if (CONFIGURE_DEFAULT_SEAM_RUNTIME.equals(propertyName)) { return Boolean.TRUE; } else if (CONFIGURE_WAR_PROJECT.equals(propertyName)) { return Boolean.TRUE; } else if (SEAM_RUNTIME_LIBRARIES_COPYING.equals(propertyName)) { return Boolean.TRUE; } else if (SEAM_TEMPLATES_AND_LIBRARIES_COPYING.equals(propertyName)) { return Boolean.TRUE; } else if (SEAM_LIBRARY_PROVIDER.equals(propertyName)) { return null; } return super.getDefaultProperty(propertyName); } /* * (non-Javadoc) * @see org.eclipse.wst.common.componentcore.datamodel.FacetInstallDataModelProvider#getValidPropertyDescriptors(java.lang.String) */ public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) { if (ISeamFacetDataModelProperties.JBOSS_AS_TARGET_SERVER.equals(propertyName)) { String runtimeName = (String)getProperty(ISeamFacetDataModelProperties.JBOSS_AS_TARGET_RUNTIME); if(runtimeName!=null) { return SeamFacetProjectCreationDataModelProvider.getServerPropertyDescriptors(runtimeName); } } return super.getValidPropertyDescriptors(propertyName); } /** * Calculate path to templates folder * * @return path to templates * @throws IOException if templates folder not found */ public static File getTemplatesFolder() throws IOException { Bundle bundle = SeamCorePlugin.getDefault().getBundle(); String version = bundle.getVersion().toString(); IPath stateLocation = Platform.getStateLocation(bundle); File templatesDir = FileLocator.getBundleFile(bundle); if(templatesDir.isFile()) { File toCopy = new File(stateLocation.toFile(),version); if(!toCopy.exists()) { toCopy.mkdirs(); UnzipOperation unZip = new UnzipOperation(templatesDir.getAbsolutePath()); unZip.execute(toCopy,"templates.*"); } templatesDir = toCopy; } return new File(templatesDir,"templates"); } /** * Returns default seam runtime name. * @param seamModel * @return */ public static String getSeamRuntimeDefaultValue(IDataModel seamModel) { String seamFacetVersion = seamModel.getProperty(IFacetDataModelProperties.FACET_VERSION_STR).toString(); SeamVersion seamVersion = SeamVersion.parseFromString(seamFacetVersion); SeamRuntime defaultRuntime = SeamRuntimeManager.getInstance().getDefaultRuntime(seamVersion); if(defaultRuntime==null) { return ""; } return defaultRuntime.getName(); } public boolean propertySet(String propertyName, Object propertyValue) { if (IFacetDataModelProperties.FACET_PROJECT_NAME.equals(propertyName)) { setProperty(ISeamFacetDataModelProperties.SEAM_PROJECT_NAME, propertyValue); setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, propertyValue); } return super.propertySet(propertyName, propertyValue); } /* * (non-Javadoc) * @see org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider#validate(java.lang.String) */ @Override public IStatus validate(String name) { IStatus status = OK_STATUS; Map<String, IStatus> errors = null; if(name.equals(SEAM_RUNTIME_NAME)) { String seamRuntimeName = getStringProperty(SEAM_RUNTIME_NAME); errors = SeamValidatorFactory.SEAM_RUNTIME_NAME_VALIDATOR.validate(seamRuntimeName, null); } else if(name.equals(SEAM_CONNECTION_PROFILE)) { String connectionName = getStringProperty(SEAM_CONNECTION_PROFILE); errors = SeamValidatorFactory.CONNECTION_PROFILE_VALIDATOR.validate(connectionName, null); } else if(name.equals(ENTITY_BEAN_PACKAGE_NAME)) { String packageName = getStringProperty(ENTITY_BEAN_PACKAGE_NAME); errors = SeamValidatorFactory.PACKAGE_NAME_VALIDATOR.validate(packageName, null); } else if(name.equals(SESSION_BEAN_PACKAGE_NAME)) { String packageName = getStringProperty(SESSION_BEAN_PACKAGE_NAME); errors = SeamValidatorFactory.PACKAGE_NAME_VALIDATOR.validate(packageName, null); } if(errors!=null && !errors.isEmpty()) { status = errors.values().iterator().next(); } return status; } /* * (non-Javadoc) * @see org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider#init() */ @Override public void init() { super.init(); model.setProperty(ISeamFacetDataModelProperties.DB_TYPE, SeamProjectPreferences.getStringPreference(SeamProjectPreferences.HIBERNATE_DEFAULT_DB_TYPE)); model.setProperty(ISeamFacetDataModelProperties.SEAM_CONNECTION_PROFILE, SeamProjectPreferences.getStringPreference(SeamProjectPreferences.SEAM_DEFAULT_CONNECTION_PROFILE)); model.setProperty(ISeamFacetDataModelProperties.DB_DEFAULT_SCHEMA_NAME, ""); model.setProperty(ISeamFacetDataModelProperties.DB_DEFAULT_CATALOG_NAME, ""); model.setProperty(ISeamFacetDataModelProperties.DB_ALREADY_EXISTS, false); model.setProperty(ISeamFacetDataModelProperties.RECREATE_TABLES_AND_DATA_ON_DEPLOY, false); // SESSION_BEAN_PACKAGE_NAME // ENTITY_BEAN_PACKAGE_NAME // TEST_CASES_PACKAGE_NAME // jBossSeamHome // jBossAsDeployAs } }