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