/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.usergrid.persistence.model.entity; import com.google.common.base.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; /** * Core persistence Entity Map structure to persist to */ public class EntityMap extends HashMap<String,Object> { private static final Logger logger = LoggerFactory.getLogger( EntityMap.class ); private static EntityToMapConverter entityToMapConverter = new EntityToMapConverter(); public EntityMap(){ super(); } public static Optional<EntityMap> fromEntity(Optional<Entity> entity) { if(entity.isPresent()){ EntityMap map = fromEntity(entity.get()); return Optional.fromNullable(map); }else{ return Optional.absent(); } } public static EntityMap fromEntity(Entity entity) { EntityMap map = entityToMapConverter.toMap(entity); return map; } /** * Return true if the value is a location field which contains valid values for latitude and longitude * @param fieldValue * @return */ public static boolean isLocationField(Map<String, ?> fieldValue) { //short circuit since valid location objects contain only 2 properties (latitude and longitude) if (fieldValue.size() != 2) { return false; } // we need to make sure that latitude and longitude are numbers or strings that can be parsed as a number if (fieldValue.containsKey(EntityToMapConverter.LAT) && fieldValue.containsKey(EntityToMapConverter.LON)){ for(Map.Entry<String,?> value : fieldValue.entrySet()){ if(!(value.getValue() instanceof Number) && !isDouble(String.valueOf(value.getValue()))){ if(logger.isDebugEnabled()){ logger.debug("Field [{}] with value [{}] is not a valid geo coordinate", value.getKey(), value.getValue() ); } return false; } } return true; } return false; } public static boolean isDouble(String s){ try{ Double.valueOf(s); return true; }catch (NumberFormatException e){ return false; } } }