package org.rubypeople.rdt.internal.core.parser; import java.util.Map; import java.util.StringTokenizer; import org.eclipse.core.resources.IMarker; import org.rubypeople.rdt.core.RubyCore; public class AbstractTaskParser { protected boolean fCaseSensitive = false; protected String[] fTags; protected int[] fPriorities; public AbstractTaskParser(Map<String, String> preferences) { super(); String caseSensitive = getString(preferences, RubyCore.COMPILER_TASK_CASE_SENSITIVE, RubyCore.ENABLED); if (caseSensitive.equals(RubyCore.ENABLED)) fCaseSensitive = true; String tags = getString(preferences, RubyCore.COMPILER_TASK_TAGS, RubyCore.DEFAULT_TASK_TAGS); String priorities = getString(preferences, RubyCore.COMPILER_TASK_PRIORITIES, RubyCore.DEFAULT_TASK_PRIORITIES); fTags = tokenize(tags, ","); fPriorities = convertPriorities(tokenize(priorities, ",")); } protected String getString(Map<String, String> preferences, String key, String def) { if (preferences == null) return def; String answer = preferences.get(key); if (answer == null) return def; return answer; } protected int[] convertPriorities(String[] stringPriorities) { int priorities[] = new int[stringPriorities.length]; for (int i = 0; i < stringPriorities.length; i++) { String priority = stringPriorities[i]; if (priority.equals(RubyCore.COMPILER_TASK_PRIORITY_LOW)) { priorities[i] = IMarker.PRIORITY_LOW; } else if (priority.equals(RubyCore.COMPILER_TASK_PRIORITY_HIGH)) { priorities[i] = IMarker.PRIORITY_HIGH; } else { priorities[i] = IMarker.PRIORITY_NORMAL; } } return priorities; } protected String[] tokenize(String tags, String delim) { String[] tokens; StringTokenizer tokenizer = new StringTokenizer(tags, delim); tokens = new String[tokenizer.countTokens()]; int i = 0; while (tokenizer.hasMoreTokens()) { tokens[i++] = tokenizer.nextToken(); } return tokens; } }