001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 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.item.server.graphql; 018 019import com.echothree.model.control.core.server.graphql.CoreSecurityUtils; 020import com.echothree.model.control.core.server.graphql.MimeTypeObject; 021import com.echothree.model.control.graphql.server.graphql.BaseEntityInstanceObject; 022import com.echothree.model.control.item.server.control.ItemControl; 023import com.echothree.model.control.party.server.graphql.LanguageObject; 024import com.echothree.model.control.party.server.graphql.PartySecurityUtils; 025import com.echothree.model.data.item.server.entity.ItemClobDescription; 026import com.echothree.model.data.item.server.entity.ItemDescription; 027import com.echothree.model.data.item.server.entity.ItemDescriptionDetail; 028import com.echothree.model.data.item.server.entity.ItemImageDescription; 029import com.echothree.model.data.item.server.entity.ItemStringDescription; 030import com.echothree.util.server.persistence.Session; 031import graphql.annotations.annotationTypes.GraphQLDescription; 032import graphql.annotations.annotationTypes.GraphQLField; 033import graphql.annotations.annotationTypes.GraphQLName; 034import graphql.schema.DataFetchingEnvironment; 035 036@GraphQLDescription("item description object") 037@GraphQLName("ItemDescription") 038public class ItemDescriptionObject 039 extends BaseEntityInstanceObject { 040 041 private final ItemDescription itemDescription; // Always Present 042 043 public ItemDescriptionObject(ItemDescription itemDescription) { 044 super(itemDescription.getPrimaryKey()); 045 046 this.itemDescription = itemDescription; 047 } 048 049 private ItemDescriptionDetail itemDescriptionDetail; // Optional, use getItemDescriptionDetail() 050 051 private ItemDescriptionDetail getItemDescriptionDetail() { 052 if(itemDescriptionDetail == null) { 053 itemDescriptionDetail = itemDescription.getLastDetail(); 054 } 055 056 return itemDescriptionDetail; 057 } 058 059 private ItemClobDescription itemClobDescription; // Optional, use getItemClobDescription() 060 061 private ItemClobDescription getItemClobDescription() { 062 if(itemClobDescription == null) { 063 var itemControl = Session.getModelController(ItemControl.class); 064 065 itemClobDescription = itemControl.getItemClobDescription(itemDescription); 066 } 067 068 return itemClobDescription; 069 } 070 071 private ItemStringDescription itemStringDescription; // Optional, use getItemStringDescription() 072 073 private ItemStringDescription getItemStringDescription() { 074 if(itemStringDescription == null) { 075 var itemControl = Session.getModelController(ItemControl.class); 076 077 itemStringDescription = itemControl.getItemStringDescription(itemDescription); 078 } 079 080 return itemStringDescription; 081 } 082 083 private ItemImageDescription itemImageDescription; // Optional, use getItemImageDescription() 084 085 private ItemImageDescription getItemImageDescription() { 086 if(itemImageDescription == null) { 087 var itemControl = Session.getModelController(ItemControl.class); 088 089 itemImageDescription = itemControl.getItemImageDescription(itemDescription); 090 } 091 092 return itemImageDescription; 093 } 094 095 @GraphQLField 096 @GraphQLDescription("item description type") 097 public ItemDescriptionTypeObject getItemDescriptionType(final DataFetchingEnvironment env) { 098 var itemDescriptionType = getItemDescriptionDetail().getItemDescriptionType(); 099 100 return itemDescriptionType == null ? null : (ItemSecurityUtils.getHasItemDescriptionTypeAccess(env) ? new ItemDescriptionTypeObject(itemDescriptionType) : null); 101 } 102 103 @GraphQLField 104 @GraphQLDescription("item") 105 public ItemObject getItem(final DataFetchingEnvironment env) { 106 var item = getItemDescriptionDetail().getItem(); 107 108 return item == null ? null : (ItemSecurityUtils.getHasItemAccess(env) ? new ItemObject(item) : null); 109 } 110 111 @GraphQLField 112 @GraphQLDescription("language") 113 public LanguageObject getLanguage(final DataFetchingEnvironment env) { 114 var mimeType = getItemDescriptionDetail().getLanguage(); 115 116 return mimeType == null ? null : (PartySecurityUtils.getHasLanguageAccess(env) ? new LanguageObject(mimeType) : null); 117 } 118 119 @GraphQLField 120 @GraphQLDescription("mime type") 121 public MimeTypeObject getMimeType(final DataFetchingEnvironment env) { 122 var mimeType = getItemDescriptionDetail().getMimeType(); 123 124 return mimeType == null ? null : (CoreSecurityUtils.getHasMimeTypeAccess(env) ? new MimeTypeObject(mimeType) : null); 125 } 126 127 @GraphQLField 128 @GraphQLDescription("clob description") 129 public String getClobDescription(final DataFetchingEnvironment env) { 130 var itemClobDescription = getItemClobDescription(); 131 132 return itemClobDescription == null ? null : itemClobDescription.getClobDescription(); 133 } 134 135 @GraphQLField 136 @GraphQLDescription("string description") 137 public String getStringDescription(final DataFetchingEnvironment env) { 138 var itemStringDescription = getItemStringDescription(); 139 140 return itemStringDescription == null ? null : itemStringDescription.getStringDescription(); 141 } 142 143 @GraphQLField 144 @GraphQLDescription("item image type") 145 public ItemImageTypeObject getItemImageType(final DataFetchingEnvironment env) { 146 var itemImageDescription = getItemImageDescription(); 147 var itemImageType = itemImageDescription == null ? null : getItemImageDescription().getItemImageType(); 148 149 return itemImageType == null ? null : (ItemSecurityUtils.getHasItemImageTypeAccess(env) ? new ItemImageTypeObject(itemImageType) : null); 150 } 151 152 @GraphQLField 153 @GraphQLDescription("height") 154 public Integer getHeight(final DataFetchingEnvironment env) { 155 var itemImageDescription = getItemImageDescription(); 156 157 return itemImageDescription == null ? null : itemImageDescription.getHeight(); 158 } 159 160 @GraphQLField 161 @GraphQLDescription("width") 162 public Integer getWidth(final DataFetchingEnvironment env) { 163 var itemImageDescription = getItemImageDescription(); 164 165 return itemImageDescription == null ? null : itemImageDescription.getWidth(); 166 } 167 168 @GraphQLField 169 @GraphQLDescription("scaled from parent") 170 public Boolean getScaledFromParent(final DataFetchingEnvironment env) { 171 var itemImageDescription = getItemImageDescription(); 172 173 return itemImageDescription == null ? null : itemImageDescription.getScaledFromParent(); 174 } 175 176}