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