com.android.ddmlib.log.EventValueDescription Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ddmlib Show documentation
Show all versions of ddmlib Show documentation
Library providing APIs to talk to Android devices
/*
* 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 com.android.ddmlib.log;
import com.android.ddmlib.log.EventContainer.EventValueType;
import java.util.Locale;
/**
* Describes an {@link EventContainer} value.
*
* This is a stand-alone object, not linked to a particular Event. It describes the value, by
* name, type ({@link EventValueType}), and (if needed) value unit ({@link ValueType}).
*
* The index of the value is not contained within this class, and is instead dependent on the
* index of this particular object in the array of {@link EventValueDescription} returned by
* {@link EventLogParser#getEventInfoMap()} when queried for a particular event tag.
*
*/
public final class EventValueDescription {
/**
* Represents the type of a numerical value. This is used to display values of vastly different
* type/range in graphs.
*/
public static enum ValueType {
NOT_APPLICABLE(0),
OBJECTS(1),
BYTES(2),
MILLISECONDS(3),
ALLOCATIONS(4),
ID(5),
PERCENT(6);
private int mValue;
/**
* Checks that the {@link EventValueType} is compatible with the {@link ValueType}.
* @param type the {@link EventValueType} to check.
* @throws InvalidValueTypeException if the types are not compatible.
*/
public void checkType(EventValueType type) throws InvalidValueTypeException {
if ((type != EventValueType.INT && type != EventValueType.LONG)
&& this != NOT_APPLICABLE) {
throw new InvalidValueTypeException(
String.format("%1$s doesn't support type %2$s", type, this));
}
}
/**
* Returns a {@link ValueType} from an integer value, or null
if no match
* were found.
* @param value the integer value.
*/
public static ValueType getValueType(int value) {
for (ValueType type : values()) {
if (type.mValue == value) {
return type;
}
}
return null;
}
/**
* Returns the integer value of the enum.
*/
public int getValue() {
return mValue;
}
@Override
public String toString() {
return super.toString().toLowerCase(Locale.US);
}
private ValueType(int value) {
mValue = value;
}
}
private String mName;
private EventValueType mEventValueType;
private ValueType mValueType;
/**
* Builds a {@link EventValueDescription} with a name and a type.
*
* If the type is {@link EventValueType#INT} or {@link EventValueType#LONG}, the
* {@link #mValueType} is set to {@link ValueType#BYTES} by default. It set to
* {@link ValueType#NOT_APPLICABLE} for all other {@link EventValueType} values.
* @param name
* @param type
*/
EventValueDescription(String name, EventValueType type) {
mName = name;
mEventValueType = type;
if (mEventValueType == EventValueType.INT || mEventValueType == EventValueType.LONG) {
mValueType = ValueType.BYTES;
} else {
mValueType = ValueType.NOT_APPLICABLE;
}
}
/**
* Builds a {@link EventValueDescription} with a name and a type, and a {@link ValueType}.
*
* @param name
* @param type
* @param valueType
* @throws InvalidValueTypeException if type and valuetype are not compatible.
*
*/
EventValueDescription(String name, EventValueType type, ValueType valueType)
throws InvalidValueTypeException {
mName = name;
mEventValueType = type;
mValueType = valueType;
mValueType.checkType(mEventValueType);
}
/**
* @return the Name.
*/
public String getName() {
return mName;
}
/**
* @return the {@link EventValueType}.
*/
public EventValueType getEventValueType() {
return mEventValueType;
}
/**
* @return the {@link ValueType}.
*/
public ValueType getValueType() {
return mValueType;
}
@Override
public String toString() {
if (mValueType != ValueType.NOT_APPLICABLE) {
return String.format("%1$s (%2$s, %3$s)", mName, mEventValueType.toString(),
mValueType.toString());
}
return String.format("%1$s (%2$s)", mName, mEventValueType.toString());
}
/**
* Checks if the value is of the proper type for this receiver.
* @param value the value to check.
* @return true if the value is of the proper type for this receiver.
*/
public boolean checkForType(Object value) {
switch (mEventValueType) {
case INT:
return value instanceof Integer;
case LONG:
return value instanceof Long;
case STRING:
return value instanceof String;
case LIST:
return value instanceof Object[];
}
return false;
}
/**
* Returns an object of a valid type (based on the value returned by
* {@link #getEventValueType()}) from a String value.
*
* IMPORTANT {@link EventValueType#LIST} and {@link EventValueType#TREE} are not
* supported.
* @param value the value of the object expressed as a string.
* @return an object or null if the conversion could not be done.
*/
public Object getObjectFromString(String value) {
switch (mEventValueType) {
case INT:
try {
return Integer.valueOf(value);
} catch (NumberFormatException e) {
return null;
}
case LONG:
try {
return Long.valueOf(value);
} catch (NumberFormatException e) {
return null;
}
case STRING:
return value;
}
return null;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy