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.control.user.contact.server.command; 018 019import com.echothree.control.user.contact.common.form.CreatePostalAddressLineForm; 020import com.echothree.model.control.contact.server.control.ContactControl; 021import com.echothree.model.data.contact.server.entity.PostalAddressFormat; 022import com.echothree.model.data.contact.server.entity.PostalAddressLine; 023import com.echothree.model.data.user.common.pk.UserVisitPK; 024import com.echothree.util.common.message.ExecutionErrors; 025import com.echothree.util.common.validation.FieldDefinition; 026import com.echothree.util.common.validation.FieldType; 027import com.echothree.util.common.command.BaseResult; 028import com.echothree.util.server.control.BaseSimpleCommand; 029import com.echothree.util.server.persistence.Session; 030import java.util.Arrays; 031import java.util.Collections; 032import java.util.List; 033 034public class CreatePostalAddressLineCommand 035 extends BaseSimpleCommand<CreatePostalAddressLineForm> { 036 037 private final static List<FieldDefinition> FORM_FIELD_DEFINITIONS; 038 039 static { 040 FORM_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList( 041 new FieldDefinition("PostalAddressFormatName", FieldType.ENTITY_NAME, true, null, null), 042 new FieldDefinition("PostalAddressLineSortOrder", FieldType.SIGNED_INTEGER, true, null, null), 043 new FieldDefinition("Prefix", FieldType.STRING, false, 1L, 10L), 044 new FieldDefinition("AlwaysIncludePrefix", FieldType.BOOLEAN, true, null, null), 045 new FieldDefinition("Suffix", FieldType.STRING, false, 1L, 10L), 046 new FieldDefinition("AlwaysIncludeSuffix", FieldType.BOOLEAN, true, null, null), 047 new FieldDefinition("CollapseIfEmpty", FieldType.BOOLEAN, true, null, null) 048 )); 049 } 050 051 /** Creates a new instance of CreatePostalAddressLineCommand */ 052 public CreatePostalAddressLineCommand(UserVisitPK userVisitPK, CreatePostalAddressLineForm form) { 053 super(userVisitPK, form, null, FORM_FIELD_DEFINITIONS, false); 054 } 055 056 @Override 057 protected BaseResult execute() { 058 var contactControl = Session.getModelController(ContactControl.class); 059 String postalAddressFormatName = form.getPostalAddressFormatName(); 060 PostalAddressFormat postalAddressFormat = contactControl.getPostalAddressFormatByName(postalAddressFormatName); 061 062 if(postalAddressFormat != null) { 063 Integer postalAddressLineSortOrder = Integer.valueOf(form.getPostalAddressLineSortOrder()); 064 PostalAddressLine postalAddressLine = contactControl.getPostalAddressLine(postalAddressFormat, postalAddressLineSortOrder); 065 066 if(postalAddressLine == null) { 067 String prefix = form.getPrefix(); 068 Boolean alwaysIncludePrefix = Boolean.valueOf(form.getAlwaysIncludePrefix()); 069 String suffix = form.getSuffix(); 070 Boolean alwaysIncludeSuffix = Boolean.valueOf(form.getAlwaysIncludeSuffix()); 071 Boolean collapseIfEmpty = Boolean.valueOf(form.getCollapseIfEmpty()); 072 073 contactControl.createPostalAddressLine(postalAddressFormat, postalAddressLineSortOrder, prefix, alwaysIncludePrefix, 074 suffix, alwaysIncludeSuffix, collapseIfEmpty, getPartyPK()); 075 } else { 076 addExecutionError(ExecutionErrors.DuplicatePostalAddressLine.name(), postalAddressLineSortOrder); 077 } 078 } else { 079 addExecutionError(ExecutionErrors.UnknownPostalAddressFormatName.name(), postalAddressFormatName); 080 } 081 082 return null; 083 } 084 085}