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.core.server.transfer;
018
019import com.echothree.model.control.core.common.CoreOptions;
020import com.echothree.model.control.core.common.transfer.EntityVisitTransfer;
021import com.echothree.model.control.core.server.control.EntityInstanceControl;
022import com.echothree.model.data.core.server.entity.EntityVisit;
023import com.echothree.model.data.user.server.entity.UserVisit;
024import com.echothree.util.server.persistence.Session;
025import javax.enterprise.context.RequestScoped;
026
027@RequestScoped
028public class EntityVisitTransferCache
029        extends BaseCoreTransferCache<EntityVisit, EntityVisitTransfer> {
030
031    EntityInstanceControl entityInstanceControl = Session.getModelController(EntityInstanceControl.class);
032
033    boolean includeEntityInstance;
034    boolean includeVisitedEntityInstance;
035    boolean includeVisitedTime;
036
037    /** Creates a new instance of EntityVisitTransferCache */
038    protected EntityVisitTransferCache() {
039        super();
040
041        var options = session.getOptions();
042        if(options != null) {
043            includeEntityInstance = options.contains(CoreOptions.EntityVisitIncludeEntityInstance);
044            includeVisitedEntityInstance = options.contains(CoreOptions.EntityVisitIncludeVisitedEntityInstance);
045            includeVisitedTime = options.contains(CoreOptions.EntityVisitIncludeVisitedTime);
046        }
047    }
048    
049    public EntityVisitTransfer getEntityVisitTransfer(UserVisit userVisit, EntityVisit entityVisit) {
050        var entityVisitTransfer = get(entityVisit);
051        
052        if(entityVisitTransfer == null) {
053            var unformattedVisitedTime = entityVisit.getVisitedTime();
054
055            entityVisitTransfer = new EntityVisitTransfer(unformattedVisitedTime);
056            put(userVisit, entityVisit, entityVisitTransfer);
057
058            if(includeEntityInstance) {
059                entityVisitTransfer.setEntityInstance(entityInstanceControl.getEntityInstanceTransfer(userVisit, entityVisit.getEntityInstance(), false, false, false, false));
060            }
061
062            if(includeVisitedEntityInstance) {
063                entityVisitTransfer.setVisitedEntityInstance(entityInstanceControl.getEntityInstanceTransfer(userVisit, entityVisit.getVisitedEntityInstance(), false, false, false, false));
064            }
065
066            if(includeVisitedTime) {
067                entityVisitTransfer.setVisitedTime(formatTypicalDateTime(userVisit, unformattedVisitedTime));
068            }
069        }
070
071        return entityVisitTransfer;
072    }
073    
074}