blob: ef3fc6cf46bc3de632c3c94460dd87e639c9c940 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}