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