public String decode(String attrName, long value) { MAttr attr = attrMap.get(attrName); if (attr == null) { return null; } if (attr.getType() == MAttrType.ENUM) { String name = attr.getValues().get(value); if (name != null) { return name; } } else if (attr.getType() == MAttrType.FLAG) { StringBuilder sb = new StringBuilder(); for (Map.Entry<Long, String> entry : attr.getValues().entrySet()) { if ((value & entry.getKey()) != 0) { sb.append(entry.getValue()).append('|'); } } if (sb.length() != 0) { return sb.deleteCharAt(sb.length() - 1).toString(); } } return "UNKNOWN_DATA_0x" + Long.toHexString(value); }