/* * Copyright (C) 2015 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.loganalysis.item; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * An {@link IItem} used to store DVM Lock allocation Info */ public class DvmLockSampleItem extends GenericItem { public static final String PROCESS_NAME = "PROCESS_NAME"; public static final String SENSITIVITY_FLAG = "SENSITIVITY_FLAG"; public static final String WAITING_THREAD_NAME = "WAITING_THREAD_NAME"; public static final String WAIT_TIME = "WAIT_TIME"; public static final String WAITING_SOURCE_FILE = "WAITING_SOURCE_FILE"; public static final String WAITING_SOURCE_LINE = "WAITING_SOURCE_LINE"; public static final String OWNER_FILE_NAME = "OWNER_FILE_NAME"; public static final String OWNER_ACQUIRE_SOURCE_LINE = "OWNER_ACQUIRE_SOURCE_LINE"; public static final String SAMPLE_PERCENTAGE = "SAMPLE_PERCENTAGE"; private static final Set ATTRIBUTES = new HashSet(Arrays.asList( PROCESS_NAME, SENSITIVITY_FLAG, WAITING_THREAD_NAME, WAIT_TIME, WAITING_SOURCE_FILE, WAITING_SOURCE_LINE, OWNER_FILE_NAME, OWNER_ACQUIRE_SOURCE_LINE, SAMPLE_PERCENTAGE)); @SuppressWarnings("serial") private static final Map> TYPES = new HashMap>() {{ put(PROCESS_NAME, String.class); put(SENSITIVITY_FLAG, Boolean.class); put(WAITING_THREAD_NAME, String.class); put(WAIT_TIME, Integer.class); put(WAITING_SOURCE_FILE, String.class); put(WAITING_SOURCE_LINE, Integer.class); put(OWNER_FILE_NAME, String.class); put(OWNER_ACQUIRE_SOURCE_LINE, Integer.class); put(SAMPLE_PERCENTAGE, Integer.class); }}; public DvmLockSampleItem() { super(ATTRIBUTES); } /** * {@inheritDoc} */ public void setAttribute(String attribute, Object value) throws IllegalArgumentException { if(ATTRIBUTES.contains(attribute)) { if (TYPES.get(attribute).isAssignableFrom(value.getClass())) { super.setAttribute(attribute, value); } else { throw new IllegalArgumentException( "Invalid attribute type for " + attribute + ": found " + value.getClass().getCanonicalName() + " expected " + TYPES.get(attribute).getCanonicalName()); } } else { throw new IllegalArgumentException("Invalid attribute key: " + attribute); } } /** * {@inheritDoc} */ public Object getAttribute(String attribute) throws IllegalArgumentException { return super.getAttribute(attribute); } }