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.transfer;
018
019import com.echothree.model.control.content.common.ContentOptions;
020import com.echothree.model.control.content.common.ContentProperties;
021import com.echothree.model.control.content.common.transfer.ContentPageAreaTransfer;
022import com.echothree.model.control.content.server.control.ContentControl;
023import com.echothree.model.control.core.server.control.MimeTypeControl;
024import com.echothree.model.control.party.server.control.PartyControl;
025import com.echothree.model.data.content.server.entity.ContentPageArea;
026import com.echothree.model.data.user.server.entity.UserVisit;
027import com.echothree.util.common.form.TransferProperties;
028import com.echothree.util.common.persistence.type.ByteArray;
029import com.echothree.util.server.persistence.Session;
030import javax.enterprise.context.RequestScoped;
031
032@RequestScoped
033public class ContentPageAreaTransferCache
034        extends BaseContentTransferCache<ContentPageArea, ContentPageAreaTransfer> {
035
036    ContentControl contentControl = Session.getModelController(ContentControl.class);
037    MimeTypeControl mimeTypeControl = Session.getModelController(MimeTypeControl.class);
038    PartyControl partyControl = Session.getModelController(PartyControl.class);
039    
040    boolean includeBlob;
041    boolean includeClob;
042    boolean includeString;
043    boolean includeUrl;
044
045    TransferProperties transferProperties;
046    boolean filterContentPage;
047    boolean filterContentPageLayoutArea;
048    boolean filterLanguage;
049    boolean filterMimeType;
050    boolean filterEntityInstance;
051    
052    /** Creates a new instance of ContentPageAreaTransferCache */
053    protected ContentPageAreaTransferCache() {
054        super();
055
056        var options = session.getOptions();
057        if(options != null) {
058            includeBlob = options.contains(ContentOptions.ContentPageAreaIncludeBlob);
059            includeClob = options.contains(ContentOptions.ContentPageAreaIncludeClob);
060            includeString = options.contains(ContentOptions.ContentPageAreaIncludeString);
061            includeUrl = options.contains(ContentOptions.ContentPageAreaIncludeUrl);
062        }
063        
064        transferProperties = session.getTransferProperties();
065        if(transferProperties != null) {
066            var properties = transferProperties.getProperties(ContentPageAreaTransfer.class);
067            
068            if(properties != null) {
069                filterContentPage = !properties.contains(ContentProperties.CONTENT_PAGE);
070                filterContentPageLayoutArea = !properties.contains(ContentProperties.CONTENT_PAGE_LAYOUT_AREA);
071                filterLanguage = !properties.contains(ContentProperties.LANGUAGE);
072                filterMimeType = !properties.contains(ContentProperties.MIME_TYPE);
073                filterEntityInstance = !properties.contains(ContentProperties.ENTITY_INSTANCE);
074            }
075        }
076        
077        setIncludeEntityInstance(!filterEntityInstance);
078    }
079
080    public ContentPageAreaTransfer getContentPageAreaTransfer(UserVisit userVisit, ContentPageArea contentPageArea) {
081        var contentPageAreaTransfer = get(contentPageArea);
082        
083        if(contentPageAreaTransfer == null) {
084            var contentPageAreaDetail = contentPageArea.getLastDetail();
085            var contentPageTransfer = filterContentPage ? null : contentControl.getContentPageTransfer(userVisit, contentPageAreaDetail.getContentPage());
086            var contentPageLayoutAreaTransfer = filterContentPageLayoutArea ? null : contentControl.getContentPageLayoutAreaTransfer(userVisit, contentPageAreaDetail.getContentPageLayoutArea());
087            var languageTransfer = filterLanguage ? null : partyControl.getLanguageTransfer(userVisit, contentPageAreaDetail.getLanguage());
088            var mimeType = contentPageAreaDetail.getMimeType();
089            var mimeTypeTransfer = filterMimeType ? null : mimeType == null ? null : mimeTypeControl.getMimeTypeTransfer(userVisit, mimeType);
090            ByteArray blob = null;
091            String clob = null;
092            String string = null;
093            String url = null;
094            
095            if(mimeType != null) {
096                if(includeBlob) {
097                    var contentPageAreaBlob = contentControl.getContentPageAreaBlob(contentPageAreaDetail);
098
099                    if(contentPageAreaBlob != null) {
100                        blob = contentPageAreaBlob.getBlob();
101                    }
102                }
103
104                if(includeClob) {
105                    var contentPageAreaClob = contentControl.getContentPageAreaClob(contentPageAreaDetail);
106
107                    if(contentPageAreaClob != null) {
108                        clob = contentPageAreaClob.getClob();
109                    }
110                }
111            }
112
113            if(includeString) {
114                var contentPageAreaString = contentControl.getContentPageAreaString(contentPageAreaDetail);
115
116                if(contentPageAreaString != null) {
117                    string = contentPageAreaString.getString();
118                }
119            }
120
121            if(includeUrl) {
122                var contentPageAreaUrl = contentControl.getContentPageAreaUrl(contentPageAreaDetail);
123
124                if(contentPageAreaUrl != null) {
125                    url = contentPageAreaUrl.getUrl();
126                }
127            }
128
129            contentPageAreaTransfer = new ContentPageAreaTransfer(contentPageTransfer, contentPageLayoutAreaTransfer, languageTransfer, mimeTypeTransfer,
130                    blob, clob, string, url);
131            put(userVisit, contentPageArea, contentPageAreaTransfer);
132        }
133        
134        return contentPageAreaTransfer;
135    }
136
137}