/*******************************************************************************
* Copyright (c) 2016 Composent, Inc. 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:
* Composent, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.remoteservice.util;
import java.util.*;
import org.eclipse.ecf.core.identity.*;
import org.osgi.framework.Constants;
import org.osgi.framework.Version;
/**
* @since 8.9
*/
public class EndpointDescriptionPropertiesUtil {
public static String verifyStringProperty(Map<String, Object> properties, String propName) {
if (properties == null)
return null;
Object r = properties.get(propName);
try {
return (String) r;
} catch (ClassCastException e) {
IllegalArgumentException iae = new IllegalArgumentException("property value is not a String: " + propName); //$NON-NLS-1$
iae.initCause(e);
throw iae;
}
}
public static Long verifyLongProperty(Map<String, Object> properties, String propName) {
if (properties == null)
return null;
Object r = properties.get(propName);
try {
return (Long) r;
} catch (ClassCastException e) {
IllegalArgumentException iae = new IllegalArgumentException("property value is not a Long: " + propName); //$NON-NLS-1$
iae.initCause(e);
throw iae;
}
}
public static ID verifyIDProperty(String idNamespace, String idName) {
if (idName == null)
return null;
try {
return IDUtil.createID(idNamespace, idName);
} catch (IDCreateException e) {
return IDFactory.getDefault().createStringID(idName);
}
}
@SuppressWarnings("cast")
public static List getStringPlusProperty(Map properties, String key) {
Object value = properties.get(key);
if (value == null) {
return Collections.EMPTY_LIST;
}
if (value instanceof String) {
return Collections.singletonList((String) value);
}
if (value instanceof String[]) {
String[] values = (String[]) value;
List result = new ArrayList(values.length);
for (int i = 0; i < values.length; i++) {
if (values[i] != null) {
result.add(values[i]);
}
}
return Collections.unmodifiableList(result);
}
if (value instanceof Collection) {
Collection values = (Collection) value;
List result = new ArrayList(values.size());
for (Iterator iter = values.iterator(); iter.hasNext();) {
Object v = iter.next();
if (v instanceof String) {
result.add((String) v);
}
}
return Collections.unmodifiableList(result);
}
return Collections.EMPTY_LIST;
}
public static ID[] verifyIDArray(Map<String, Object> properties, String propName, String idNamespace) {
List<String> idNames = getStringPlusProperty(properties, propName);
if (idNames.size() == 0)
return null;
List<ID> results = new ArrayList();
for (String idName : idNames) {
try {
results.add(IDUtil.createID(idNamespace, idName));
} catch (IDCreateException e) {
IllegalArgumentException iae = new IllegalArgumentException("cannot create ID[]: idNamespace=" + idNamespace //$NON-NLS-1$
+ " idName=" + idName); //$NON-NLS-1$
iae.initCause(e);
throw iae;
}
}
return results.toArray(new ID[results.size()]);
}
public static Version getPackageVersion(Map<String, Object> endpointDescriptionProperties, String packageName) {
String key = "endpoint.package.version." + packageName; //$NON-NLS-1$
Object value = endpointDescriptionProperties.get(key);
String version;
try {
version = (String) value;
} catch (ClassCastException e) {
IllegalArgumentException iae = new IllegalArgumentException(key + " property value not a String"); //$NON-NLS-1$
iae.initCause(e);
throw iae;
}
return Version.parseVersion(version);
}
public static List<String> verifyObjectClassProperty(Map<String, Object> endpointDescriptionProperties) {
Object o = endpointDescriptionProperties.get(Constants.OBJECTCLASS);
if (!(o instanceof String[]))
throw new IllegalArgumentException("objectClass value must be of type String[]"); //$NON-NLS-1$
String[] obClass = (String[]) o;
if (obClass.length < 1)
throw new IllegalArgumentException("objectClass is empty"); //$NON-NLS-1$
for (String intf : obClass) {
int index = intf.lastIndexOf('.');
if (index == -1)
continue;
String packageName = intf.substring(0, index);
try {
getPackageVersion(endpointDescriptionProperties, packageName);
} catch (IllegalArgumentException e) {
IllegalArgumentException iae = new IllegalArgumentException("Bad version for package " + packageName); //$NON-NLS-1$
iae.initCause(e);
throw iae;
}
}
return Collections.unmodifiableList(Arrays.asList(obClass));
}
public static Dictionary createDictionaryFromMap(Map propMap) {
if (propMap == null)
return null;
Dictionary result = new Properties();
for (Iterator i = propMap.keySet().iterator(); i.hasNext();) {
Object key = i.next();
Object val = propMap.get(key);
if (key != null && val != null)
result.put(key, val);
}
return result;
}
}