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 }