| /*************************************************************************************************** |
| * Copyright (c) 2005, 2010 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| **************************************************************************************************/ |
| package org.eclipse.jst.jsf.facesconfig.tests.util; |
| |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| |
| import junit.framework.Assert; |
| |
| import org.eclipse.core.resources.IContainer; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IWorkspace; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.jst.j2ee.internal.web.archive.operations.WebFacetProjectCreationDataModelProvider; |
| import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment; |
| import org.eclipse.wst.common.componentcore.ComponentCore; |
| import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties; |
| import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory; |
| import org.eclipse.wst.common.frameworks.datamodel.IDataModel; |
| import org.osgi.framework.Bundle; |
| |
| /** |
| * Utility class for launching JSF-related wizard operations. |
| * |
| * @author spaxton |
| */ |
| public class WizardUtil extends Assert { |
| private static boolean projectCreated = false; |
| private static final String FACESCONFIG_PROJECT_NAME = "FacesConfigUnitTest"; |
| private static final String FACESCONFIG_EAR_PROJECT_NAME = FACESCONFIG_PROJECT_NAME + "EAR"; |
| |
| public static boolean isProjectCreated() { |
| return projectCreated; |
| } |
| |
| public static void createProject(String nameSuffix) { |
| if(!isProjectCreated()) { |
| // first delete the projects of these names, if present |
| IWorkspace workspace = ResourcesPlugin.getWorkspace(); |
| IResource oldWebProj = workspace.getRoot().getProject(createProjectName(nameSuffix)); |
| IResource oldEarProj = workspace.getRoot().getProject(createEarProjectName(nameSuffix)); |
| |
| try { |
| workspace.delete(new IResource[] { oldWebProj, oldEarProj }, true, null); |
| } catch (CoreException ce) { |
| ce.printStackTrace(); |
| } |
| |
| |
| try { |
| WebProjectTestEnvironment testEnv = new WebProjectTestEnvironment(createProjectName(nameSuffix)); |
| testEnv.createProject(false); |
| assertNotNull(testEnv); |
| assertNotNull(testEnv.getTestProject()); |
| assertTrue(testEnv.getTestProject().isAccessible()); |
| |
| IProject project = testEnv.getTestProject(); |
| checkAndAddFacesConfig(project); |
| } catch (Exception t) { |
| throw new RuntimeException(t); |
| } |
| |
| projectCreated = true; |
| } |
| } |
| |
| protected static IProject createWebProject(String projectName) throws Exception { |
| if(!isProjectCreated()) { |
| IDataModel dataModel = DataModelFactory.createDataModel(new WebFacetProjectCreationDataModelProvider()); |
| dataModel.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, projectName); |
| dataModel.getDefaultOperation().execute(new NullProgressMonitor(), null); |
| } |
| return ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); |
| } |
| |
| public static void setProjectDirtied() { |
| projectCreated = false; |
| } |
| |
| /** |
| * Forces recreation of the test project - to be used after unit tests |
| * that dirty the project state. |
| * @param nameSuffix TODO |
| */ |
| public static void recreateProject(String nameSuffix) { |
| setProjectDirtied(); |
| createProject(nameSuffix); |
| } |
| |
| /** |
| * Should call createProject first. |
| * @return the test project |
| * @param nameSuffix TODO |
| */ |
| public static IProject getTestProject(String nameSuffix) { |
| IWorkspace workspace = ResourcesPlugin.getWorkspace(); |
| return workspace.getRoot().getProject(createProjectName(nameSuffix)); |
| } |
| |
| private static String createProjectName(final String nameSuffix) |
| { |
| // TODO: do we need separate projects for each test? |
| return FACESCONFIG_PROJECT_NAME;//+"_"+nameSuffix; |
| } |
| |
| private static String createEarProjectName(final String nameSuffix) |
| { |
| // TODO: do we need separate projects for each test? |
| return FACESCONFIG_EAR_PROJECT_NAME;//+"_"+nameSuffix; |
| } |
| |
| private static void checkAndAddFacesConfig(IProject project) { |
| IContainer container = ComponentCore.createComponent(project).getRootFolder().getFolder("/WEB-INF").getUnderlyingFolder(); |
| IFile facesConfigFile = ResourcesPlugin.getWorkspace().getRoot().getFile(container.getFullPath().append(new Path("faces-config.xml"))); //$NON-NLS-1$ |
| IFile facesConfigFile1 = ResourcesPlugin.getWorkspace().getRoot().getFile(container.getFullPath().append(new Path("faces-config1.xml"))); //$NON-NLS-1$ |
| IFile facesConfigFile2 = ResourcesPlugin.getWorkspace().getRoot().getFile(container.getFullPath().append(new Path("faces-config2.xml"))); //$NON-NLS-1$ |
| IFile facesConfigFile3 = ResourcesPlugin.getWorkspace().getRoot().getFile(container.getFullPath().append(new Path("faces-config3.xml"))); //$NON-NLS-1$ |
| IFile facesConfigFileExtData = ResourcesPlugin.getWorkspace().getRoot().getFile(container.getFullPath().append(new Path("faces-config-ext-data1.xml"))); //$NON-NLS-1$ |
| |
| |
| IFile facesConfig_1_2File = ResourcesPlugin.getWorkspace().getRoot().getFile(container.getFullPath().append(new Path("faces-config_1_2.xml"))); //$NON-NLS-1$ |
| IFile facesConfig_2_0File = ResourcesPlugin.getWorkspace().getRoot().getFile(container.getFullPath().append(new Path("faces-config_2_0.xml"))); //$NON-NLS-1$ |
| |
| if(facesConfigFile.exists()) { |
| return; |
| } |
| |
| final IPath facesConfigPath = new Path("/template/faces-config.xml"); |
| final IPath facesConfig1Path = new Path("/template/faces-config1.xml"); |
| final IPath facesConfig2Path = new Path("/template/faces-config2.xml"); |
| final IPath facesConfig3Path = new Path("/template/faces-config3.xml"); |
| final IPath facesConfigExtData1Path = new Path("/template/faces-config-ext-data1.xml"); |
| final IPath facesConfig_1_2_Path = new Path("/template/faces-config_1_2.xml"); |
| final IPath facesConfig_2_0_Path = new Path("/template/faces-config_2_0.xml"); |
| |
| final Bundle myBundle = Platform.getBundle("org.eclipse.jst.jsf.facesconfig.tests"); |
| // there is no faces-config, so add our starting template |
| try { |
| |
| { |
| final String sourcePath = FileLocator.toFileURL(FileLocator.find(myBundle, facesConfigPath,null)).getPath().toString(); //$NON-NLS-1$ //$NON-NLS-2$ |
| final File f = new File(sourcePath); |
| final FileInputStream sourceStream = new FileInputStream(f); |
| facesConfigFile.create(sourceStream, true, null); |
| sourceStream.close(); |
| } |
| { |
| final String sourcePath1 = FileLocator.toFileURL(FileLocator.find(myBundle,facesConfig1Path,null)).getPath().toString(); //$NON-NLS-1$ //$NON-NLS-2$ |
| final File f1 = new File(sourcePath1); |
| final FileInputStream sourceStream1 = new FileInputStream(f1); |
| facesConfigFile1.create(sourceStream1, true, null); |
| sourceStream1.close(); |
| } |
| { |
| final String sourcePath2 = FileLocator.toFileURL(FileLocator.find(myBundle, facesConfig2Path,null)).getPath().toString(); //$NON-NLS-1$ //$NON-NLS-2$ |
| final File f2 = new File(sourcePath2); |
| final FileInputStream sourceStream2 = new FileInputStream(f2); |
| facesConfigFile2.create(sourceStream2, true, null); |
| sourceStream2.close(); |
| } |
| { |
| final String sourcePath3 = FileLocator.toFileURL(FileLocator.find(myBundle, facesConfig3Path,null)).getPath().toString(); //$NON-NLS-1$ //$NON-NLS-2$ |
| final File f3 = new File(sourcePath3); |
| final FileInputStream sourceStream3 = new FileInputStream(f3); |
| facesConfigFile3.create(sourceStream3, true, null); |
| sourceStream3.close(); |
| } |
| |
| { |
| final String sourcePathExtData1 = FileLocator.toFileURL(FileLocator.find(myBundle, facesConfigExtData1Path,null)).getPath().toString(); //$NON-NLS-1$ //$NON-NLS-2$ |
| final File fext = new File(sourcePathExtData1); |
| final FileInputStream sourceStreamExt1 = new FileInputStream(fext); |
| facesConfigFileExtData.create(sourceStreamExt1, true, null); |
| sourceStreamExt1.close(); |
| } |
| |
| { |
| final String sourcePathFacesConfig_1_2 = |
| FileLocator.toFileURL(FileLocator.find(myBundle, facesConfig_1_2_Path,null)).getPath().toString(); //$NON-NLS-1$ //$NON-NLS-2$ |
| final File fext = new File(sourcePathFacesConfig_1_2); |
| final FileInputStream sourceStreamExt1 = new FileInputStream(fext); |
| facesConfig_1_2File.create(sourceStreamExt1, true, null); |
| sourceStreamExt1.close(); |
| } |
| |
| { |
| final String sourcePathFacesConfig_2_0 = |
| FileLocator.toFileURL(FileLocator.find(myBundle, facesConfig_2_0_Path,null)).getPath().toString(); //$NON-NLS-1$ //$NON-NLS-2$ |
| final File fext = new File(sourcePathFacesConfig_2_0); |
| final FileInputStream sourceStreamExt2 = new FileInputStream(fext); |
| facesConfig_2_0File.create(sourceStreamExt2, true, null); |
| sourceStreamExt2.close(); |
| } |
| |
| } catch (IOException ioe) { |
| ioe.printStackTrace(System.err); |
| } catch (CoreException ce) { |
| ce.printStackTrace(System.err); |
| } |
| } |
| } |