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