1 package net.sourceforge.phpdt.internal.launching;
2 
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.Iterator;
7 import java.util.List;
8 import java.util.Map;
9 
10 import net.sourceforge.phpdt.internal.core.JavaProject;
11 
12 import org.eclipse.core.resources.IProject;
13 import org.eclipse.core.resources.IResource;
14 import org.eclipse.core.runtime.CoreException;
15 import org.eclipse.core.runtime.IPath;
16 import org.eclipse.core.runtime.Path;
17 import org.eclipse.debug.core.ILaunchConfiguration;
18 import org.eclipse.debug.internal.ui.launchConfigurations.EnvironmentVariable;
19 
20 public class InterpreterRunnerConfiguration {
21 	protected ILaunchConfiguration configuration;
22 
23 	private HashMap fEnvironment;
24 
InterpreterRunnerConfiguration(ILaunchConfiguration aConfiguration)25 	public InterpreterRunnerConfiguration(ILaunchConfiguration aConfiguration) {
26 		configuration = aConfiguration;
27 		fEnvironment = new HashMap();
28 	}
29 
getAbsoluteFileName()30 	public String getAbsoluteFileName() {
31 		IPath path = new Path(getFileName());
32 		IProject project = getProject().getProject();
33 
34 		//return project.getLocation().toOSString() + "/" + getFileName();
35 		IResource file = project.findMember(path);
36 		return file.getProjectRelativePath().toOSString();
37 	}
38 
getFileName()39 	public String getFileName() {
40 		String fileName = "";
41 
42 		try {
43 			fileName = configuration.getAttribute(
44 					PHPLaunchConfigurationAttribute.FILE_NAME,
45 					"No file specified in configuration");
46 		} catch (CoreException e) {
47 		}
48 
49 		return fileName.replace('\\', '/');
50 	}
51 
getProject()52 	public JavaProject getProject() {
53 		String projectName = "";
54 
55 		try {
56 			projectName = configuration.getAttribute(
57 					PHPLaunchConfigurationAttribute.PROJECT_NAME, "");
58 		} catch (CoreException e) {
59 			PHPLaunchingPlugin.log(e);
60 		}
61 
62 		IProject project = PHPLaunchingPlugin.getWorkspace().getRoot()
63 				.getProject(projectName);
64 
65 		JavaProject phpProject = new JavaProject();
66 		phpProject.setProject(project);
67 		return phpProject;
68 	}
69 
getAbsoluteWorkingDirectory()70 	public File getAbsoluteWorkingDirectory() {
71 		String file = null;
72 		try {
73 			file = configuration.getAttribute(
74 					PHPLaunchConfigurationAttribute.WORKING_DIRECTORY, "");
75 		} catch (CoreException e) {
76 			PHPLaunchingPlugin.log(e);
77 		}
78 		return new File(file);
79 	}
80 
getInterpreterArguments()81 	public String getInterpreterArguments() {
82 		try {
83 			return configuration.getAttribute(
84 					PHPLaunchConfigurationAttribute.INTERPRETER_ARGUMENTS, "");
85 		} catch (CoreException e) {
86 		}
87 
88 		return "";
89 	}
90 
getProgramArguments()91 	public String getProgramArguments() {
92 		try {
93 			return configuration.getAttribute(
94 					PHPLaunchConfigurationAttribute.PROGRAM_ARGUMENTS, "");
95 		} catch (CoreException e) {
96 		}
97 
98 		return "";
99 	}
100 
getInterpreter()101 	public PHPInterpreter getInterpreter() {
102 		String selectedInterpreter = null;
103 		try {
104 			selectedInterpreter = configuration.getAttribute(
105 					PHPLaunchConfigurationAttribute.SELECTED_INTERPRETER, "");
106 		} catch (CoreException e) {
107 		}
108 
109 		return PHPRuntime.getDefault().getInterpreter(selectedInterpreter);
110 	}
111 
useRemoteDebugger()112 	public boolean useRemoteDebugger() {
113 		try {
114 			return configuration.getAttribute(
115 					PHPLaunchConfigurationAttribute.REMOTE_DEBUG, false);
116 		} catch (CoreException e) {
117 			PHPLaunchingPlugin.log(e);
118 		}
119 		return false;
120 	}
121 
usePathTranslation()122 	public boolean usePathTranslation() {
123 		try {
124 			return configuration.getAttribute(
125 					PHPLaunchConfigurationAttribute.REMOTE_DEBUG_TRANSLATE,
126 					false);
127 		} catch (CoreException e) {
128 			PHPLaunchingPlugin.log(e);
129 		}
130 		return false;
131 	}
132 
getPathMap()133 	public Map getPathMap() {
134 		try {
135 			return configuration.getAttribute(
136 					PHPLaunchConfigurationAttribute.FILE_MAP, (Map) null);
137 		} catch (CoreException e) {
138 			PHPLaunchingPlugin.log(e);
139 		}
140 		return (Map) null;
141 	}
142 
useDBGSessionInBrowser()143 	public boolean useDBGSessionInBrowser() {
144 		try {
145 			return configuration.getAttribute(
146 					PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_BROWSER,
147 					true);
148 		} catch (CoreException e) {
149 			PHPLaunchingPlugin.log(e);
150 		}
151 		return false;
152 	}
153 
setEnvironment(String[] envp)154 	public void setEnvironment(String[] envp) {
155 		if (envp == null)
156 			return;
157 		for (int i = 0; i < envp.length; i++) {
158 			addEnvironmentValue(envp[i], true);
159 		}
160 	}
161 
addEnvironmentValue(String env, boolean replace)162 	public void addEnvironmentValue(String env, boolean replace) {
163 		String value = env.substring(env.indexOf('=') + 1);
164 		String key = env.substring(0, env.indexOf('='));
165 		addEnvironmentValue(key, value, replace);
166 	}
167 
addEnvironmentValue(String key, String value, boolean replace)168 	public void addEnvironmentValue(String key, String value, boolean replace) {
169 		if (!replace && fEnvironment.containsKey(key)) {
170 			EnvironmentVariable ev = (EnvironmentVariable) fEnvironment
171 					.get(key);
172 			ev.setValue(ev.getValue() + ";" + value);
173 			fEnvironment.put(key, ev);
174 		} else
175 			this.fEnvironment.put(key, new EnvironmentVariable(key, value));
176 	}
177 
getEnvironment()178 	public String[] getEnvironment() {
179 
180 		Iterator iter = fEnvironment.entrySet().iterator();
181 		List strings = new ArrayList(fEnvironment.size());
182 		while (iter.hasNext()) {
183 			Map.Entry entry = (Map.Entry) iter.next();
184 			StringBuffer buffer = new StringBuffer((String) entry.getKey());
185 			buffer.append('=').append(
186 					((EnvironmentVariable) entry.getValue()).getValue());
187 			strings.add(buffer.toString());
188 		}
189 		return (String[]) strings.toArray(new String[strings.size()]);
190 
191 	}
192 
getRemoteSourcePath()193 	public String getRemoteSourcePath() {
194 
195 		IProject project = getProject().getProject();
196 		if (!useRemoteDebugger())
197 			return project.getFullPath().toOSString();
198 		else {
199 			try {
200 				return configuration.getAttribute(
201 						PHPLaunchConfigurationAttribute.REMOTE_PATH, "");
202 			} catch (CoreException e) {
203 				PHPLaunchingPlugin.log(e);
204 			}
205 		}
206 
207 		return "";
208 	}
209 
useDBGSessionInExternalBrowser()210 	public boolean useDBGSessionInExternalBrowser() {
211 		try {
212 			return configuration
213 					.getAttribute(
214 							PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_EXTERNAL_BROWSER,
215 							false);
216 		} catch (CoreException e) {
217 			PHPLaunchingPlugin.log(e);
218 		}
219 		return false;
220 	}
221 
222 }
223