// **********************************************************************
//
// <copyright>
//
// BBN Technologies
// 10 Moulton Street
// Cambridge, MA 02138
// (617) 873-8000
//
// Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/layer/vpf/VPFUtil.java,v $
// $RCSfile: VPFUtil.java,v $
// $Revision: 1.5 $
// $Date: 2004/10/14 18:06:10 $
// $Author: dietrick $
//
// **********************************************************************
package com.bbn.openmap.layer.vpf;
import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.List;
import java.util.Properties;
import com.bbn.openmap.util.Debug;
/**
* Miscellaneous utility functions in dealing with VPF data.
*/
public class VPFUtil {
/**
* all methods are static, no reason to construct
*/
private VPFUtil() {
}
/**
* returns a string with the elements of l separated by spaces
*
* @param l the list to stringize
* @return the string version of the list
* @deprecated use listToString(List) instead
*/
public static final String vectorToString(List<Object> l) {
return listToString(l);
}
/**
* returns a string with the elements of l separated by spaces
*
* @param l the list to convert to string
* @return the string version of the list
*/
public static final String listToString(List<Object> l) {
StringBuffer row = new StringBuffer();
for (Object obj : l) {
row.append(obj.toString()).append(" ");
}
return (row.toString());
}
/**
* get the value contained in the object.
*
* @param val returns the value of Shorts and Integers as an int. VPF null
* values get returned as Integer.MIN_VALUE, as do all other types
* @return the value contained in val
*/
public static final int objectToInt(Object val) {
int v = Integer.MIN_VALUE;
if (val instanceof Integer) {
v = ((Integer) val).intValue();
if (v == Integer.MIN_VALUE + 1) {
v = Integer.MIN_VALUE;
}
} else if (val instanceof Short) {
v = ((Short) val).shortValue();
if (v == Short.MIN_VALUE + 1) {
v = Integer.MIN_VALUE;
}
}
return v;
}
/** some strings */
public final static String Edge = "Edge";
public final static String Edges = "Edges";
public final static String Text = "Text";
public final static String Area = "Area";
// public final static String Point = "Point";
public final static String EPoint = "EPoint";
public final static String CPoint = "CPoint";
/**
* Parses dynamic args passed by specialist client. A <code>Hashtable</code>
* is returned as a unified holder of all dynamic arguments.
*/
public static Hashtable<String, Boolean> parseDynamicArgs(String args) {
Hashtable<String, Boolean> dynArgs = new Hashtable<String, Boolean>();
if (args != null) {
String lowerArgs = args.toLowerCase();
dynArgs.put(Edges, new Boolean(lowerArgs.indexOf(Edges) != -1));
dynArgs.put(Text, new Boolean(lowerArgs.indexOf(Text) != -1));
dynArgs.put(Area, new Boolean(lowerArgs.indexOf(Area) != -1));
dynArgs.put(EPoint, new Boolean(lowerArgs.indexOf(EPoint) != -1));
dynArgs.put(CPoint, new Boolean(lowerArgs.indexOf(CPoint) != -1));
}
return dynArgs;
}
/**
* If <code>arg</code> maps to a <code>Boolean</code> in the Hashtable, that
* value is returned, <code>false</code> otherwise.
*
* @param dynArgs the Hashtable to look in
* @param arg the argument to return
*/
public static boolean getHashedValueAsBoolean(Hashtable<String, Boolean> dynArgs, String arg) {
Object obj = dynArgs.get(arg);
if (obj == null) {
return false;
} else if (obj instanceof Boolean) {
return ((Boolean) obj).booleanValue();
} else {
return false;
}
}
public static String getTypeForFeatureCode(String featureCode) {
int lastCharIndex = featureCode.length() - 1;
if (lastCharIndex >= 0) {
char lastLetter = featureCode.charAt(lastCharIndex);
if (lastLetter == 'l') {
return VPFUtil.Edge;
}
if (lastLetter == 'a') {
return VPFUtil.Area;
}
if (lastLetter == 't') {
return VPFUtil.Text;
}
// if (lastLetter == 'p') {
// // Can't tell at this point, it shouldn't matter for
// // the feature cache stuff since the points are
// return VPFUtil.EPoint;
// }
}
return null;
}
/**
* Return our default properties for vpf land.
*/
public static Properties getDefaultProperties() {
try {
InputStream in = VPFLayer.class.getResourceAsStream("defaultVPFlayers.properties");
// use a temporary so other threads won't see an
// empty properties file
Properties tmp = new Properties();
if (in != null) {
tmp.load(in);
in.close();
} else {
Debug.error("VPFUtil.getDefaultProperties: can't load default properties file");
// just use an empty properties file
}
return tmp;
} catch (IOException io) {
Debug.error("VPFUtil.getDefaultProperties: can't load default properties: " + io);
return new Properties();
}
}
}