001// -------------------------------------------------------------------------------- 002// Copyright 2002-2025 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.core.server.graphql; 018 019import com.echothree.model.control.graphql.server.util.BaseGraphQl; 020import com.echothree.model.control.uom.common.UomConstants; 021import com.echothree.model.control.uom.server.control.UomControl; 022import com.echothree.model.data.core.server.entity.EntityGeoPointAttribute; 023import com.echothree.util.common.string.GeoPointUtils; 024import com.echothree.util.server.persistence.Session; 025import com.echothree.util.server.string.UnitOfMeasureUtils; 026import graphql.annotations.annotationTypes.GraphQLDescription; 027import graphql.annotations.annotationTypes.GraphQLField; 028import graphql.annotations.annotationTypes.GraphQLName; 029import graphql.annotations.annotationTypes.GraphQLNonNull; 030import graphql.schema.DataFetchingEnvironment; 031 032public class BaseEntityGeoPointAttributeObject 033 implements BaseGraphQl { 034 035 protected final EntityGeoPointAttribute entityGeoPointAttribute; // Always Present 036 037 public BaseEntityGeoPointAttributeObject(EntityGeoPointAttribute entityGeoPointAttribute) { 038 this.entityGeoPointAttribute = entityGeoPointAttribute; 039 } 040 041 @GraphQLField 042 @GraphQLDescription("entity attribute") 043 public EntityAttributeObject getEntityAttribute(final DataFetchingEnvironment env) { 044 return CoreSecurityUtils.getHasEntityAttributeAccess(env) ? new EntityAttributeObject(entityGeoPointAttribute.getEntityAttribute(), entityGeoPointAttribute.getEntityInstance()) : null; 045 } 046 047 @GraphQLField 048 @GraphQLDescription("entity instance") 049 public EntityInstanceObject getEntityInstance(final DataFetchingEnvironment env) { 050 return CoreSecurityUtils.getHasEntityInstanceAccess(env) ? new EntityInstanceObject(entityGeoPointAttribute.getEntityInstance()) : null; 051 } 052 053 @GraphQLField 054 @GraphQLDescription("unformatted latitude") 055 @GraphQLNonNull 056 public int getUnformattedLatitude() { 057 return entityGeoPointAttribute.getLatitude(); 058 } 059 060 @GraphQLField 061 @GraphQLDescription("latitude") 062 @GraphQLNonNull 063 public String getLatitude() { 064 return GeoPointUtils.getInstance().formatDegrees(entityGeoPointAttribute.getLatitude()); 065 } 066 067 @GraphQLField 068 @GraphQLDescription("unformatted longitude") 069 @GraphQLNonNull 070 public int getUnformattedLongitude() { 071 return entityGeoPointAttribute.getLongitude(); 072 } 073 074 @GraphQLField 075 @GraphQLDescription("longitude") 076 @GraphQLNonNull 077 public String getLongitude() { 078 return GeoPointUtils.getInstance().formatDegrees(entityGeoPointAttribute.getLongitude()); 079 } 080 081 @GraphQLField 082 @GraphQLDescription("unformatted elevation") 083 public Long getUnformattedElevation() { 084 return entityGeoPointAttribute.getElevation(); 085 } 086 087 @GraphQLField 088 @GraphQLDescription("elevation") 089 public String getElevation(final DataFetchingEnvironment env) { 090 final var elevation = entityGeoPointAttribute.getElevation(); 091 String formattedElevation = null; 092 093 if(elevation != null) { 094 var uomControl = Session.getModelController(UomControl.class); 095 var elevationUnitOfMeasureKind = uomControl.getUnitOfMeasureKindByUnitOfMeasureKindUseTypeUsingNames(UomConstants.UnitOfMeasureKindUseType_ELEVATION); 096 097 formattedElevation = UnitOfMeasureUtils.getInstance().formatUnitOfMeasure(BaseGraphQl.getUserVisit(env), elevationUnitOfMeasureKind, elevation); 098 } 099 100 return formattedElevation; 101 } 102 103 @GraphQLField 104 @GraphQLDescription("unformatted altitude") 105 public Long getUnformattedAltitude() { 106 return entityGeoPointAttribute.getAltitude(); 107 } 108 109 @GraphQLField 110 @GraphQLDescription("altitude") 111 public String getAltitude(final DataFetchingEnvironment env) { 112 final var altitude = entityGeoPointAttribute.getAltitude(); 113 String formattedAltitude = null; 114 115 if(altitude != null) { 116 var uomControl = Session.getModelController(UomControl.class); 117 var altitudeUnitOfMeasureKind = uomControl.getUnitOfMeasureKindByUnitOfMeasureKindUseTypeUsingNames(UomConstants.UnitOfMeasureKindUseType_ALTITUDE); 118 119 formattedAltitude = UnitOfMeasureUtils.getInstance().formatUnitOfMeasure(BaseGraphQl.getUserVisit(env), altitudeUnitOfMeasureKind, altitude); 120 } 121 122 return formattedAltitude; 123 } 124 125}