RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package zephyr.plugin.core.api.internal.parsing; 00002 00003 import java.util.LinkedHashMap; 00004 import java.util.Map; 00005 import java.util.Stack; 00006 00007 import zephyr.plugin.core.api.monitoring.abstracts.LabeledCollection; 00008 00009 00010 public class LabelBuilder { 00011 public static final String DefaultSeparator = "/"; 00012 public static final String DefaultElementSeparator = ":"; 00013 00014 private final String separator; 00015 private final Stack<String> prefixStack = new Stack<String>(); 00016 private final Stack<Map<String, LabeledCollection>> labelsMapStack = new Stack<Map<String, LabeledCollection>>(); 00017 private final String elementSeparator; 00018 00019 public LabelBuilder() { 00020 this(DefaultSeparator, DefaultElementSeparator); 00021 } 00022 00023 public LabelBuilder(String separator, String elementSeparator) { 00024 this.separator = separator; 00025 this.elementSeparator = elementSeparator; 00026 } 00027 00028 public void push(String prefix) { 00029 prefixStack.push(prefix); 00030 } 00031 00032 public String pop() { 00033 return prefixStack.pop(); 00034 } 00035 00036 public String prefixed(String label) { 00037 return toString() + separator + label; 00038 } 00039 00040 @Override 00041 public String toString() { 00042 StringBuilder prefixes = new StringBuilder(); 00043 int prefixIndex = 0; 00044 for (String prefix : prefixStack) { 00045 if (prefixIndex > 0) 00046 prefixes.append(separator); 00047 prefixes.append(prefix); 00048 prefixIndex++; 00049 } 00050 return prefixes.toString(); 00051 } 00052 00053 public String buildLabel(String label) { 00054 String labelPrefix = toString(); 00055 if (labelPrefix.isEmpty()) 00056 return label; 00057 return labelPrefix + separator + label; 00058 } 00059 00060 public void pushLabelMap(Map<String, LabeledCollection> labelsMap) { 00061 labelsMapStack.push(labelsMap); 00062 } 00063 00064 public void pushLabelMap(String id, final String[] labels) { 00065 Map<String, LabeledCollection> labelsMap = new LinkedHashMap<String, LabeledCollection>(); 00066 labelsMap.put(id, new LabeledCollection() { 00067 @Override 00068 public String label(int index) { 00069 return labels[index]; 00070 } 00071 }); 00072 pushLabelMap(labelsMap); 00073 } 00074 00075 public void popLabelMaps() { 00076 labelsMapStack.pop(); 00077 } 00078 00079 public LabeledCollection getLabeledElement(String id) { 00080 for (Map<String, LabeledCollection> labelsMap : labelsMapStack) { 00081 LabeledCollection labeledElement = labelsMap.get(id); 00082 if (labeledElement != null) 00083 return labeledElement; 00084 } 00085 return null; 00086 } 00087 00088 public String elementLabelSeparator() { 00089 return elementSeparator; 00090 } 00091 }