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