public static DataTypeLists<String> getPropertiesByDataType(ResourceSet resourceSet) { if (resourceSet.isEmpty()) { return new DataTypeLists<String>(); } // no aggregation DataTypeLists<String> result = new DataTypeLists<String>(); Resource resource = resourceSet.getFirstElement(); if (resource == null) { return result; } for (Entry<String, Serializable> entry : resource.getProperties().entrySet()) { Serializable value = entry.getValue(); String propertyName = entry.getKey(); if (value instanceof String) { result.get(DataType.TEXT).add(propertyName); } if (value instanceof Double) { result.get(DataType.NUMBER).add(propertyName); } if (value instanceof Resource) { Resource r = (Resource) value; if (r.getValue(LATITUDE) != null && r.getValue(LONGITUDE) != null) { result.get(DataType.LOCATION).add(propertyName); } } if (value instanceof Date) { result.get(DataType.DATE).add(propertyName); } } return result; }
// XXX why isn't this using the same code as getPropertiesByDataType? public static List<String> getPropertyNamesForDataType( ResourceSet resourceSet, DataType dataType) { if (resourceSet.isEmpty()) { return Collections.emptyList(); } // no aggregation Resource resource = resourceSet.getFirstElement(); List<String> properties = new ArrayList<String>(); for (Entry<String, Serializable> entry : resource.getProperties().entrySet()) { switch (dataType) { case TEXT: { if (entry.getValue() instanceof String) { properties.add(entry.getKey()); } } break; case NUMBER: { if (entry.getValue() instanceof Double) { properties.add(entry.getKey()); } } break; case LOCATION: { if (entry.getValue() instanceof Resource) { Resource r = (Resource) entry.getValue(); if (r.getValue(LATITUDE) != null && r.getValue(LONGITUDE) != null) { properties.add(entry.getKey()); } } } break; case DATE: { if (entry.getValue() instanceof Date) { properties.add(entry.getKey()); } } break; case COLOR: { if (entry.getValue() instanceof Color) { properties.add(entry.getKey()); } } case SHAPE: { if (entry.getValue() instanceof String && isShape(entry.getValue())) { properties.add(entry.getKey()); } } } } return properties; }