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}