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.content.server.graphql;
018
019import com.echothree.model.control.content.server.control.ContentControl;
020import com.echothree.model.control.core.server.graphql.CoreSecurityUtils;
021import com.echothree.model.control.core.server.graphql.MimeTypeObject;
022import com.echothree.model.control.graphql.server.graphql.BaseEntityInstanceObject;
023import com.echothree.model.control.party.server.graphql.LanguageObject;
024import com.echothree.model.control.party.server.graphql.PartySecurityUtils;
025import com.echothree.model.data.content.server.entity.ContentPageArea;
026import com.echothree.model.data.content.server.entity.ContentPageAreaClob;
027import com.echothree.model.data.content.server.entity.ContentPageAreaDetail;
028import com.echothree.model.data.content.server.entity.ContentPageAreaString;
029import com.echothree.model.data.content.server.entity.ContentPageAreaUrl;
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("content page area object")
038@GraphQLName("ContentPageArea")
039public class ContentPageAreaObject
040        extends BaseEntityInstanceObject {
041    
042    private final ContentPageArea contentPageArea; // Always Present
043    
044    public ContentPageAreaObject(ContentPageArea contentPageArea) {
045        super(contentPageArea.getPrimaryKey());
046        
047        this.contentPageArea = contentPageArea;
048    }
049
050    private ContentPageAreaDetail contentPageAreaDetail; // Optional, use getContentPageAreaDetail()
051    
052    private ContentPageAreaDetail getContentPageAreaDetail() {
053        if(contentPageAreaDetail == null) {
054            contentPageAreaDetail = contentPageArea.getLastDetail();
055        }
056        
057        return contentPageAreaDetail;
058    }
059    
060    ContentPageAreaClob contentPageAreaClob;
061
062    private ContentPageAreaClob getContentPageAreaClob() {
063        if(contentPageAreaClob == null) {
064            var contentControl = Session.getModelController(ContentControl.class);
065
066            contentPageAreaClob = contentControl.getContentPageAreaClob(getContentPageAreaDetail());
067        }
068
069        return contentPageAreaClob;
070    }
071
072    ContentPageAreaString contentPageAreaString;
073
074    private ContentPageAreaString getContentPageAreaString() {
075        if(contentPageAreaString == null) {
076            var contentControl = Session.getModelController(ContentControl.class);
077
078            contentPageAreaString = contentControl.getContentPageAreaString(getContentPageAreaDetail());
079        }
080
081        return contentPageAreaString;
082    }
083
084    ContentPageAreaUrl contentPageAreaUrl;
085
086    private ContentPageAreaUrl getContentPageAreaUrl() {
087        if(contentPageAreaUrl == null) {
088            var contentControl = Session.getModelController(ContentControl.class);
089
090            contentPageAreaUrl = contentControl.getContentPageAreaUrl(getContentPageAreaDetail());
091        }
092
093        return contentPageAreaUrl;
094    }
095
096    @GraphQLField
097    @GraphQLDescription("content page")
098    @GraphQLNonNull
099    public ContentPageObject getContentPage(final DataFetchingEnvironment env) {
100        return ContentSecurityUtils.getHasContentPageAccess(env) ? new ContentPageObject(getContentPageAreaDetail().getContentPage()) : null;
101    }
102
103    @GraphQLField
104    @GraphQLDescription("content page layout area")
105    @GraphQLNonNull
106    public ContentPageLayoutAreaObject getContentPageLayoutArea(final DataFetchingEnvironment env) {
107        return new ContentPageLayoutAreaObject(getContentPageAreaDetail().getContentPageLayoutArea());
108    }
109
110    @GraphQLField
111    @GraphQLDescription("language")
112    @GraphQLNonNull
113    public LanguageObject getLanguage(final DataFetchingEnvironment env) {
114        return PartySecurityUtils.getHasLanguageAccess(env) ? new LanguageObject(getContentPageAreaDetail().getLanguage()) : null;
115    }
116
117    @GraphQLField
118    @GraphQLDescription("mime type")
119    @GraphQLNonNull
120    public MimeTypeObject getMimeType(final DataFetchingEnvironment env) {
121        return CoreSecurityUtils.getHasMimeTypeAccess(env) ? new MimeTypeObject(getContentPageAreaDetail().getMimeType()) : null;
122    }
123
124    @GraphQLField
125    @GraphQLDescription("clob")
126    public String getClob(final DataFetchingEnvironment env) {
127        var contentPageAreaClob = getContentPageAreaClob();
128        
129        return contentPageAreaClob == null ? null : contentPageAreaClob.getClob();
130    }
131
132    @GraphQLField
133    @GraphQLDescription("string")
134    public String getString(final DataFetchingEnvironment env) {
135        var contentPageAreaString = getContentPageAreaString();
136        
137        return contentPageAreaString == null ? null : contentPageAreaString.getString();
138    }
139
140    @GraphQLField
141    @GraphQLDescription("url")
142    public String getUrl(final DataFetchingEnvironment env) {
143        var contentPageAreaUrl = getContentPageAreaUrl();
144        
145        return contentPageAreaUrl == null ? null : contentPageAreaUrl.getUrl();
146    }
147
148}