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.training.server.logic; 018 019import com.echothree.model.control.training.common.exception.UnknownTrainingClassNameException; 020import com.echothree.model.control.training.server.control.TrainingControl; 021import com.echothree.model.data.training.server.entity.TrainingClass; 022import com.echothree.model.data.training.server.entity.TrainingClassAnswer; 023import com.echothree.model.data.training.server.entity.TrainingClassPage; 024import com.echothree.model.data.training.server.entity.TrainingClassQuestion; 025import com.echothree.model.data.training.server.entity.TrainingClassSection; 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; 031import javax.enterprise.context.ApplicationScoped; 032import javax.enterprise.inject.spi.CDI; 033 034@ApplicationScoped 035public class TrainingClassLogic 036 extends BaseLogic { 037 038 protected TrainingClassLogic() { 039 super(); 040 } 041 042 public static TrainingClassLogic getInstance() { 043 return CDI.current().select(TrainingClassLogic.class).get(); 044 } 045 046 private TrainingClass getTrainingClassByName(final ExecutionErrorAccumulator eea, final String trainingClassName, EntityPermission entityPermission) { 047 var trainingControl = Session.getModelController(TrainingControl.class); 048 var trainingClass = trainingControl.getTrainingClassByName(trainingClassName, entityPermission); 049 050 if(trainingClass == null) { 051 handleExecutionError(UnknownTrainingClassNameException.class, eea, ExecutionErrors.UnknownTrainingClassName.name(), trainingClassName); 052 } 053 054 return trainingClass; 055 } 056 057 public TrainingClass getTrainingClassByName(final ExecutionErrorAccumulator eea, final String trainingClassName) { 058 return getTrainingClassByName(eea, trainingClassName, EntityPermission.READ_ONLY); 059 } 060 061 public TrainingClass getTrainingClassByNameForUpdate(final ExecutionErrorAccumulator eea, final String trainingClassName) { 062 return getTrainingClassByName(eea, trainingClassName, EntityPermission.READ_WRITE); 063 } 064 065 private TrainingClassSection getTrainingClassSectionByName(final ExecutionErrorAccumulator eea, final TrainingClass trainingClass, 066 final String trainingClassSectionName, EntityPermission entityPermission) { 067 var trainingControl = Session.getModelController(TrainingControl.class); 068 var trainingClassSection = trainingControl.getTrainingClassSectionByName(trainingClass, trainingClassSectionName, entityPermission); 069 070 if(trainingClassSection == null) { 071 var trainingClassDetail = trainingClass.getLastDetail(); 072 073 handleExecutionError(UnknownTrainingClassNameException.class, eea, ExecutionErrors.UnknownTrainingClassSectionName.name(), 074 trainingClassDetail.getTrainingClassName(), trainingClassSectionName); 075 } 076 077 return trainingClassSection; 078 } 079 080 public TrainingClassSection getTrainingClassSectionByName(final ExecutionErrorAccumulator eea, final TrainingClass trainingClass, 081 final String trainingClassSectionName) { 082 return getTrainingClassSectionByName(eea, trainingClass, trainingClassSectionName, EntityPermission.READ_ONLY); 083 } 084 085 public TrainingClassSection getTrainingClassSectionByNameForUpdate(final ExecutionErrorAccumulator eea, final TrainingClass trainingClass, 086 final String trainingClassSectionName) { 087 return getTrainingClassSectionByName(eea, trainingClass, trainingClassSectionName, EntityPermission.READ_WRITE); 088 } 089 090 private TrainingClassPage getTrainingClassPageByName(final ExecutionErrorAccumulator eea, final TrainingClassSection trainingClassSection, 091 final String trainingClassPageName, EntityPermission entityPermission) { 092 var trainingControl = Session.getModelController(TrainingControl.class); 093 var trainingClassPage = trainingControl.getTrainingClassPageByName(trainingClassSection, trainingClassPageName, entityPermission); 094 095 if(trainingClassPage == null) { 096 var trainingClassSectionDetail = trainingClassSection.getLastDetail(); 097 var trainingClassDetail = trainingClassSectionDetail.getTrainingClass().getLastDetail(); 098 099 handleExecutionError(UnknownTrainingClassNameException.class, eea, ExecutionErrors.UnknownTrainingClassPageName.name(), 100 trainingClassDetail.getTrainingClassName(), trainingClassSectionDetail.getTrainingClassSectionName(), trainingClassPageName); 101 } 102 103 return trainingClassPage; 104 } 105 106 public TrainingClassPage getTrainingClassPageByName(final ExecutionErrorAccumulator eea, final TrainingClassSection trainingClassSection, 107 final String trainingClassPageName) { 108 return getTrainingClassPageByName(eea, trainingClassSection, trainingClassPageName, EntityPermission.READ_ONLY); 109 } 110 111 public TrainingClassPage getTrainingClassPageByNameForUpdate(final ExecutionErrorAccumulator eea, final TrainingClassSection trainingClassSection, 112 final String trainingClassPageName) { 113 return getTrainingClassPageByName(eea, trainingClassSection, trainingClassPageName, EntityPermission.READ_WRITE); 114 } 115 116 private TrainingClassQuestion getTrainingClassQuestionByName(final ExecutionErrorAccumulator eea, final TrainingClassSection trainingClassSection, 117 final String trainingClassQuestionName, EntityPermission entityPermission) { 118 var trainingControl = Session.getModelController(TrainingControl.class); 119 var trainingClassQuestion = trainingControl.getTrainingClassQuestionByName(trainingClassSection, trainingClassQuestionName, entityPermission); 120 121 if(trainingClassQuestion == null) { 122 var trainingClassSectionDetail = trainingClassSection.getLastDetail(); 123 var trainingClassDetail = trainingClassSectionDetail.getTrainingClass().getLastDetail(); 124 125 handleExecutionError(UnknownTrainingClassNameException.class, eea, ExecutionErrors.UnknownTrainingClassQuestionName.name(), 126 trainingClassDetail.getTrainingClassName(), trainingClassSectionDetail.getTrainingClassSectionName(), trainingClassQuestionName); 127 } 128 129 return trainingClassQuestion; 130 } 131 132 public TrainingClassQuestion getTrainingClassQuestionByName(final ExecutionErrorAccumulator eea, final TrainingClassSection trainingClassSection, 133 final String trainingClassQuestionName) { 134 return getTrainingClassQuestionByName(eea, trainingClassSection, trainingClassQuestionName, EntityPermission.READ_ONLY); 135 } 136 137 public TrainingClassQuestion getTrainingClassQuestionByNameForUpdate(final ExecutionErrorAccumulator eea, final TrainingClassSection trainingClassSection, 138 final String trainingClassQuestionName) { 139 return getTrainingClassQuestionByName(eea, trainingClassSection, trainingClassQuestionName, EntityPermission.READ_WRITE); 140 } 141 142 private TrainingClassAnswer getTrainingClassAnswerByName(final ExecutionErrorAccumulator eea, final TrainingClassQuestion trainingClassQuestion, 143 final String trainingClassAnswerName, EntityPermission entityPermission) { 144 var trainingControl = Session.getModelController(TrainingControl.class); 145 var trainingClassAnswer = trainingControl.getTrainingClassAnswerByName(trainingClassQuestion, trainingClassAnswerName, entityPermission); 146 147 if(trainingClassAnswer == null) { 148 var trainingClassQuestionDetail = trainingClassQuestion.getLastDetail(); 149 var trainingClassSectionDetail = trainingClassQuestionDetail.getTrainingClassSection().getLastDetail(); 150 var trainingClassDetail = trainingClassSectionDetail.getTrainingClass().getLastDetail(); 151 152 handleExecutionError(UnknownTrainingClassNameException.class, eea, ExecutionErrors.UnknownTrainingClassAnswerName.name(), 153 trainingClassDetail.getTrainingClassName(), trainingClassSectionDetail.getTrainingClassSectionName(), 154 trainingClassQuestionDetail.getTrainingClassQuestionName(), trainingClassAnswerName); 155 } 156 157 return trainingClassAnswer; 158 } 159 160 public TrainingClassAnswer getTrainingClassAnswerByName(final ExecutionErrorAccumulator eea, final TrainingClassQuestion trainingClassQuestion, 161 final String trainingClassAnswerName) { 162 return getTrainingClassAnswerByName(eea, trainingClassQuestion, trainingClassAnswerName, EntityPermission.READ_ONLY); 163 } 164 165 public TrainingClassAnswer getTrainingClassAnswerByNameForUpdate(final ExecutionErrorAccumulator eea, final TrainingClassQuestion trainingClassQuestion, 166 final String trainingClassAnswerName) { 167 return getTrainingClassAnswerByName(eea, trainingClassQuestion, trainingClassAnswerName, EntityPermission.READ_WRITE); 168 } 169 170}