View Javadoc

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.LineReader;
6   import org.apache.commons.io.IOUtils;
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   * A class for reading a preferences file for a profile and extracting the
18   * properties.
19   *
20   * The format for preferences is
21   * value=key
22   *
23   * @since 2.1
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            IOUtils.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  }