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.accounting.server.logic;
018
019import com.echothree.model.control.accounting.common.exception.UnknownSymbolPositionNameException;
020import com.echothree.model.control.accounting.server.control.AccountingControl;
021import com.echothree.model.control.core.common.ComponentVendors;
022import com.echothree.model.control.core.common.EntityTypes;
023import com.echothree.model.control.core.server.logic.EntityInstanceLogic;
024import com.echothree.model.data.accounting.server.entity.SymbolPosition;
025import com.echothree.model.data.core.server.entity.EntityInstance;
026import com.echothree.util.common.message.ExecutionErrors;
027import com.echothree.util.server.control.BaseLogic;
028import com.echothree.util.server.message.ExecutionErrorAccumulator;
029import com.echothree.util.server.persistence.EntityPermission;
030import com.echothree.util.server.persistence.Session;
031
032public class SymbolPositionLogic
033    extends BaseLogic {
034    
035    private SymbolPositionLogic() {
036        super();
037    }
038    
039    private static class SymbolPositionLogicHolder {
040        static SymbolPositionLogic instance = new SymbolPositionLogic();
041    }
042    
043    public static SymbolPositionLogic getInstance() {
044        return SymbolPositionLogicHolder.instance;
045    }
046
047    public SymbolPosition getSymbolPositionByName(final ExecutionErrorAccumulator eea, final String symbolPositionName) {
048        var accountingControl = Session.getModelController(AccountingControl.class);
049        SymbolPosition symbolPosition = accountingControl.getSymbolPositionByName(symbolPositionName);
050
051        if(symbolPosition == null) {
052            handleExecutionError(UnknownSymbolPositionNameException.class, eea, ExecutionErrors.UnknownSymbolPositionName.name(), symbolPositionName);
053        }
054
055        return symbolPosition;
056    }
057
058    public SymbolPosition getSymbolPositionByUlid(final ExecutionErrorAccumulator eea, final String ulid, final EntityPermission entityPermission) {
059        SymbolPosition symbolPosition = null;
060        
061        var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, (String)null, null, null, ulid,
062                ComponentVendors.ECHO_THREE.name(), EntityTypes.SymbolPosition.name());
063
064        if(eea == null || !eea.hasExecutionErrors()) {
065            var accountingControl = Session.getModelController(AccountingControl.class);
066            
067            symbolPosition = accountingControl.getSymbolPositionByEntityInstance(entityInstance, entityPermission);
068        }
069
070        return symbolPosition;
071    }
072    
073    public SymbolPosition getSymbolPositionByUlid(final ExecutionErrorAccumulator eea, final String ulid) {
074        return getSymbolPositionByUlid(eea, ulid, EntityPermission.READ_ONLY);
075    }
076    
077    public SymbolPosition getSymbolPositionByUlidForUpdate(final ExecutionErrorAccumulator eea, final String ulid) {
078        return getSymbolPositionByUlid(eea, ulid, EntityPermission.READ_WRITE);
079    }
080
081}