| /******************************************************************************* |
| * Copyright (c) 2000, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.core.runtime.internal.stats; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.net.URL; |
| import java.util.*; |
| |
| /** |
| * BundleStats is used to represent information about loaded bundle. A |
| * bundlestats instance represents only one bundle. |
| */ |
| |
| public class ResourceBundleStats { |
| private String pluginId; // the plugin loading this bundle |
| private String fileName; // the filename of the bundle |
| private int keyCount = 0; // number of keys in the bundle |
| private int keySize = 0; // size of the keys in the bundle |
| private int valueSize = 0; // size of the values in the bundle |
| private long hashSize = 0; // size of the hashtable |
| private long fileSize = 0; |
| |
| private static int sizeOf(String value) { |
| return 44 + (2 * value.length()); |
| } |
| |
| private static int sizeOf(Properties value) { |
| return (int) Math.round(44 + (16 + (value.size() * 1.25 * 4)) + (24 * value.size())); |
| } |
| |
| public ResourceBundleStats(String pluginId, String fileName, URL input) { |
| this.pluginId = pluginId; |
| this.fileName = fileName; |
| initialize(input); |
| } |
| |
| public ResourceBundleStats(String pluginId, String fileName, ResourceBundle bundle) { |
| this.pluginId = pluginId; |
| this.fileName = fileName; |
| initialize(bundle); |
| } |
| |
| /** |
| * Compute the size of bundle |
| */ |
| private void initialize(ResourceBundle bundle) { |
| for (Enumeration keys = bundle.getKeys(); keys.hasMoreElements();) { |
| String key = (String) keys.nextElement(); |
| keySize += sizeOf(key); |
| valueSize += sizeOf(bundle.getString(key)); |
| keyCount++; |
| } |
| } |
| |
| /** |
| * Compute the size of stream which represents a property file |
| */ |
| private void initialize(URL url) { |
| InputStream stream = null; |
| Properties props = new Properties(); |
| try { |
| try { |
| stream = url.openStream(); |
| fileSize = stream.available(); |
| props.load(stream); |
| for (Iterator iter = props.keySet().iterator(); iter.hasNext();) { |
| String key = (String) iter.next(); |
| keySize += sizeOf(key); |
| valueSize += sizeOf(props.getProperty(key)); |
| keyCount++; |
| } |
| hashSize = sizeOf(props); |
| } finally { |
| if (stream != null) |
| stream.close(); |
| } |
| } catch (IOException e) { |
| // ignore exceptions as they will be handled when the stream |
| // is loaded for real. See callers. |
| } |
| } |
| |
| public long getHashSize() { |
| return hashSize; |
| } |
| |
| public int getKeyCount() { |
| return keyCount; |
| } |
| |
| public String getPluginId() { |
| return pluginId; |
| } |
| |
| public int getKeySize() { |
| return keySize; |
| } |
| |
| public int getValueSize() { |
| return valueSize; |
| } |
| |
| public long getTotalSize() { |
| return keySize + valueSize + hashSize; |
| } |
| |
| public String getFileName() { |
| return fileName; |
| } |
| |
| public long getFileSize() { |
| return fileSize; |
| } |
| } |