1 package com.atlassian.webdriver.browsers.profile;
2
3 import com.google.common.collect.ImmutableMap;
4 import com.google.common.collect.Maps;
5 import com.google.common.io.Closeables;
6 import com.google.common.io.LineReader;
7 import org.openqa.selenium.WebDriverException;
8
9 import java.io.File;
10 import java.io.FileReader;
11 import java.io.IOException;
12 import java.util.Map;
13 import java.util.regex.Matcher;
14 import java.util.regex.Pattern;
15
16
17
18
19
20
21
22
23
24
25 public class ProfilePreferences
26 {
27 private final Pattern PREFERENCE_PATTERN = Pattern.compile("^([^=]+)=(.*)$");
28
29 private final Map<String, Object> allPreferences = Maps.newHashMap();
30
31 public ProfilePreferences(File preferencesFile)
32 {
33 FileReader reader = null;
34 try {
35 reader = new FileReader(preferencesFile);
36 readPreferences(reader);
37 } catch (IOException e) {
38 throw new WebDriverException(e);
39 } finally {
40 Closeables.closeQuietly(reader);
41 }
42 }
43
44 public Map<String, Object> getPreferences()
45 {
46 return ImmutableMap.copyOf(allPreferences);
47 }
48
49 private void readPreferences(FileReader reader) throws IOException
50 {
51 LineReader allLines = new LineReader(reader);
52 String line = allLines.readLine();
53 while (line != null) {
54 Matcher matcher = PREFERENCE_PATTERN.matcher(line);
55 if (matcher.matches()) {
56 allPreferences.put(matcher.group(1), preferenceAsValue(matcher.group(2)));
57 }
58 line = allLines.readLine();
59 }
60 }
61
62 private Object preferenceAsValue(String value)
63 {
64 if ("false".equals(value) || "true".equals(value)) {
65 return Boolean.parseBoolean(value);
66 }
67 else if (value.matches("^[0-9]+$"))
68 {
69 return Integer.parseInt(value);
70 }
71 else
72 {
73 return value;
74 }
75 }
76
77
78 }