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.control.user.party.server.command; 018 019import com.echothree.control.user.party.common.edit.PartyAliasEdit; 020import com.echothree.control.user.party.common.edit.PartyEditFactory; 021import com.echothree.control.user.party.common.result.EditPartyAliasResult; 022import com.echothree.control.user.party.common.result.PartyResultFactory; 023import com.echothree.control.user.party.common.spec.PartyAliasSpec; 024import com.echothree.control.user.party.server.command.util.PartyAliasUtil; 025import com.echothree.model.control.party.common.PartyTypes; 026import com.echothree.model.control.party.server.control.PartyControl; 027import com.echothree.model.control.security.common.SecurityRoles; 028import com.echothree.model.data.party.server.entity.PartyAlias; 029import com.echothree.model.data.party.server.entity.PartyAliasType; 030import com.echothree.util.common.command.EditMode; 031import com.echothree.util.common.message.ExecutionErrors; 032import com.echothree.util.common.validation.FieldDefinition; 033import com.echothree.util.common.validation.FieldType; 034import com.echothree.util.server.control.BaseAbstractEditCommand; 035import com.echothree.util.server.control.CommandSecurityDefinition; 036import com.echothree.util.server.control.PartyTypeDefinition; 037import com.echothree.util.server.control.SecurityRoleDefinition; 038import com.echothree.util.server.persistence.Session; 039import java.util.Arrays; 040import java.util.Collections; 041import java.util.List; 042import javax.enterprise.context.RequestScoped; 043 044@RequestScoped 045public class EditPartyAliasCommand 046 extends BaseAbstractEditCommand<PartyAliasSpec, PartyAliasEdit, EditPartyAliasResult, PartyAlias, PartyAlias> { 047 048 private final static List<FieldDefinition> SPEC_FIELD_DEFINITIONS; 049 private final static List<FieldDefinition> EDIT_FIELD_DEFINITIONS; 050 051 static { 052 SPEC_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList( 053 new FieldDefinition("PartyName", FieldType.ENTITY_NAME, true, null, null), 054 new FieldDefinition("PartyAliasTypeName", FieldType.ENTITY_NAME, true, null, null) 055 )); 056 057 EDIT_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList( 058 new FieldDefinition("Alias", FieldType.ENTITY_NAME, true, null, null) 059 )); 060 } 061 062 /** Creates a new instance of EditPartyAliasCommand */ 063 public EditPartyAliasCommand() { 064 super(null, SPEC_FIELD_DEFINITIONS, EDIT_FIELD_DEFINITIONS); 065 } 066 067 @Override 068 protected CommandSecurityDefinition getCommandSecurityDefinition() { 069 return new CommandSecurityDefinition(Collections.unmodifiableList(Arrays.asList( 070 new PartyTypeDefinition(PartyTypes.UTILITY.name(), null), 071 new PartyTypeDefinition(PartyTypes.EMPLOYEE.name(), Collections.unmodifiableList(Arrays.asList( 072 new SecurityRoleDefinition(PartyAliasUtil.getInstance().getSecurityRoleGroupNameByPartyName(spec.getPartyName()), SecurityRoles.Edit.name()) 073 ))) 074 ))); 075 } 076 077 @Override 078 public EditPartyAliasResult getResult() { 079 return PartyResultFactory.getEditPartyAliasResult(); 080 } 081 082 @Override 083 public PartyAliasEdit getEdit() { 084 return PartyEditFactory.getPartyAliasEdit(); 085 } 086 087 PartyAliasType partyAliasType; 088 089 @Override 090 public PartyAlias getEntity(EditPartyAliasResult result) { 091 var partyControl = Session.getModelController(PartyControl.class); 092 PartyAlias partyAlias = null; 093 var partyName = spec.getPartyName(); 094 var party = partyControl.getPartyByName(partyName); 095 096 if(party != null) { 097 var partyType = party.getLastDetail().getPartyType(); 098 var partyAliasTypeName = spec.getPartyAliasTypeName(); 099 100 partyAliasType = partyControl.getPartyAliasTypeByName(partyType, partyAliasTypeName); 101 102 if(partyAliasType != null) { 103 if(editMode.equals(EditMode.LOCK) || editMode.equals(EditMode.ABANDON)) { 104 partyAlias = partyControl.getPartyAlias(party, partyAliasType); 105 } else { // EditMode.UPDATE 106 partyAlias = partyControl.getPartyAliasForUpdate(party, partyAliasType); 107 } 108 109 if(partyAlias != null) { 110 result.setPartyAlias(partyControl.getPartyAliasTransfer(getUserVisit(), partyAlias)); 111 } else { 112 addExecutionError(ExecutionErrors.UnknownPartyAlias.name(), partyName, partyAliasTypeName); 113 } 114 } else { 115 addExecutionError(ExecutionErrors.UnknownPartyAliasTypeName.name(), partyType.getPartyTypeName(), partyAliasTypeName); 116 } 117 } else { 118 addExecutionError(ExecutionErrors.UnknownPartyName.name(), partyName); 119 } 120 121 return partyAlias; 122 } 123 124 @Override 125 public PartyAlias getLockEntity(PartyAlias partyAlias) { 126 return partyAlias; 127 } 128 129 @Override 130 public void fillInResult(EditPartyAliasResult result, PartyAlias partyAlias) { 131 var partyControl = Session.getModelController(PartyControl.class); 132 133 result.setPartyAlias(partyControl.getPartyAliasTransfer(getUserVisit(), partyAlias)); 134 } 135 136 @Override 137 public void doLock(PartyAliasEdit edit, PartyAlias partyAlias) { 138 edit.setAlias(partyAlias.getAlias()); 139 } 140 141 @Override 142 public void canUpdate(PartyAlias partyAlias) { 143 var partyControl = Session.getModelController(PartyControl.class); 144 var alias = edit.getAlias(); 145 var duplicatePartyAlias = partyControl.getPartyAliasByAlias(partyAliasType, alias); 146 147 if(duplicatePartyAlias != null && !partyAlias.equals(duplicatePartyAlias)) { 148 var partyAliasTypeDetail = partyAlias.getPartyAliasType().getLastDetail(); 149 150 addExecutionError(ExecutionErrors.DuplicatePartyAlias.name(), partyAliasTypeDetail.getPartyType().getPartyTypeName(), 151 partyAliasTypeDetail.getPartyAliasTypeName(), alias); 152 } 153 } 154 155 @Override 156 public void doUpdate(PartyAlias partyAlias) { 157 var partyControl = Session.getModelController(PartyControl.class); 158 var partyAliasValue = partyControl.getPartyAliasValue(partyAlias); 159 160 partyAliasValue.setAlias(edit.getAlias()); 161 162 partyControl.updatePartyAliasFromValue(partyAliasValue, getPartyPK()); 163 } 164 165}