1 package org.apache.maven.plugin.eclipse; 2 3 import java.io.DataOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 import java.util.Properties; 10 11 import org.eclipse.core.internal.localstore.ILocalStoreConstants; 12 13 public class TempEclipseWorkspace 14 { 15 16 File workspaceLocation; 17 18 public TempEclipseWorkspace( String testWorkspaceName, boolean usePathToProject ) 19 throws Exception 20 { 21 22 File eclipseLocation = new java.io.File( "target/test-classes/eclipse" ).getCanonicalFile(); 23 24 File jdkLocation = new File( eclipseLocation, "dummyJDK" ); 25 26 workspaceLocation = new File( eclipseLocation, testWorkspaceName + "/workspace" ).getCanonicalFile(); 27 28 File localizedIndicator = new File( workspaceLocation, ".localized" ); 29 if ( !localizedIndicator.exists() ) 30 { 31 File propertyfile = 32 new File( workspaceLocation, 33 ".metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs" ); 34 35 preparePropertyFile( jdkLocation, propertyfile ); 36 37 String projectLocation; 38 if ( usePathToProject ) 39 { 40 projectLocation = "URI//file:" + ( new File( workspaceLocation, "direct-compile" ).getCanonicalPath() ); 41 } 42 else 43 { 44 projectLocation = ""; 45 } 46 FileOutputStream location = 47 new FileOutputStream( 48 new File( workspaceLocation, 49 ".metadata/.plugins/org.eclipse.core.resources/.projects/direct-compile/.location" ) ); 50 DataOutputStream dataOutputStream = new DataOutputStream( location ); 51 dataOutputStream.write( ILocalStoreConstants.BEGIN_CHUNK ); 52 dataOutputStream.writeUTF( projectLocation ); 53 dataOutputStream.write( ILocalStoreConstants.END_CHUNK ); 54 dataOutputStream.close(); 55 location.close(); 56 localizedIndicator.createNewFile(); 57 } 58 59 } 60 61 private static void preparePropertyFile( File jdkLocation, File propertyfile ) 62 throws IOException, FileNotFoundException 63 { 64 Properties properties = new Properties(); 65 properties.load( new FileInputStream( propertyfile ) ); 66 properties.setProperty( 67 "org.eclipse.jdt.launching.PREF_VM_XML", 68 properties.getProperty( "org.eclipse.jdt.launching.PREF_VM_XML" ).replaceAll( 69 "__replace_with_test_dir__", 70 jdkLocation.getCanonicalPath().replace( 71 '\\', 72 '/' ) ) ); 73 properties.store( new FileOutputStream( propertyfile ), "" ); 74 } 75 76 public File getWorkspaceLocation() 77 { 78 return workspaceLocation; 79 } 80 }