blob: be905e33de1d24f240cc432719dad1383cfcb57e [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.util;
import android.util.Log;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** Parsed representation of /etc/event-log-tags. */
public class EventLogTags {
private final static String TAG = "EventLogTags";
private final static String TAGS_FILE = "/etc/event-log-tags";
public static class Description {
public final int mTag;
public final String mName;
// TODO: Parse parameter descriptions when anyone has a use for them.
Description(int tag, String name) {
mTag = tag;
mName = name;
}
}
private final static Pattern COMMENT_PATTERN = Pattern.compile(
"^\\s*(#.*)?$");
private final static Pattern TAG_PATTERN = Pattern.compile(
"^\\s*(\\d+)\\s+(\\w+)\\s*(\\(.*\\))?\\s*$");
private final HashMap<String, Description> mNameMap =
new HashMap<String, Description>();
private final HashMap<Integer, Description> mTagMap =
new HashMap<Integer, Description>();
public EventLogTags() throws IOException {
this(new BufferedReader(new FileReader(TAGS_FILE), 256));
}
public EventLogTags(BufferedReader input) throws IOException {
String line;
while ((line = input.readLine()) != null) {
Matcher m = COMMENT_PATTERN.matcher(line);
if (m.matches()) continue;
m = TAG_PATTERN.matcher(line);
if (m.matches()) {
try {
int tag = Integer.parseInt(m.group(1));
Description d = new Description(tag, m.group(2));
mNameMap.put(d.mName, d);
mTagMap.put(d.mTag, d);
} catch (NumberFormatException e) {
Log.e(TAG, "Error in event log tags entry: " + line, e);
}
} else {
Log.e(TAG, "Can't parse event log tags entry: " + line);
}
}
}
public Description get(String name) {
return mNameMap.get(name);
}
public Description get(int tag) {
return mTagMap.get(tag);
}
}