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.forum.server.command;
018
019import com.echothree.control.user.forum.common.edit.ForumEditFactory;
020import com.echothree.control.user.forum.common.edit.ForumMessageAttachmentDescriptionEdit;
021import com.echothree.control.user.forum.common.form.EditForumMessageAttachmentDescriptionForm;
022import com.echothree.control.user.forum.common.result.EditForumMessageAttachmentDescriptionResult;
023import com.echothree.control.user.forum.common.result.ForumResultFactory;
024import com.echothree.control.user.forum.common.spec.ForumMessageAttachmentDescriptionSpec;
025import com.echothree.model.control.forum.server.control.ForumControl;
026import com.echothree.model.control.party.server.control.PartyControl;
027import com.echothree.model.data.forum.server.entity.ForumMessage;
028import com.echothree.model.data.forum.server.entity.ForumMessageAttachment;
029import com.echothree.model.data.forum.server.entity.ForumMessageAttachmentDescription;
030import com.echothree.model.data.forum.server.value.ForumMessageAttachmentDescriptionValue;
031import com.echothree.model.data.party.server.entity.Language;
032import com.echothree.model.data.user.common.pk.UserVisitPK;
033import com.echothree.util.common.message.ExecutionErrors;
034import com.echothree.util.common.validation.FieldDefinition;
035import com.echothree.util.common.validation.FieldType;
036import com.echothree.util.common.command.EditMode;
037import com.echothree.util.server.control.BaseAbstractEditCommand;
038import com.echothree.util.server.persistence.Session;
039import java.util.Arrays;
040import java.util.Collections;
041import java.util.List;
042
043public class EditForumMessageAttachmentDescriptionCommand
044        extends BaseAbstractEditCommand<ForumMessageAttachmentDescriptionSpec, ForumMessageAttachmentDescriptionEdit, EditForumMessageAttachmentDescriptionResult, ForumMessageAttachmentDescription, ForumMessageAttachment> {
045    
046    private final static List<FieldDefinition> SPEC_FIELD_DEFINITIONS;
047    private final static List<FieldDefinition> EDIT_FIELD_DEFINITIONS;
048    
049    static {
050        SPEC_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList(
051                new FieldDefinition("ForumMessageName", FieldType.ENTITY_NAME, true, null, null),
052                new FieldDefinition("ForumMessageAttachmentSequence", FieldType.UNSIGNED_INTEGER, true, null, null),
053                new FieldDefinition("LanguageIsoName", FieldType.ENTITY_NAME, true, null, null)
054                ));
055
056        EDIT_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList(
057                new FieldDefinition("Description", FieldType.STRING, true, 1L, 132L)
058                ));
059    }
060    
061    /** Creates a new instance of EditForumMessageAttachmentDescriptionCommand */
062    public EditForumMessageAttachmentDescriptionCommand(UserVisitPK userVisitPK, EditForumMessageAttachmentDescriptionForm form) {
063        super(userVisitPK, form, null, SPEC_FIELD_DEFINITIONS, EDIT_FIELD_DEFINITIONS);
064    }
065
066    @Override
067    public EditForumMessageAttachmentDescriptionResult getResult() {
068        return ForumResultFactory.getEditForumMessageAttachmentDescriptionResult();
069    }
070
071    @Override
072    public ForumMessageAttachmentDescriptionEdit getEdit() {
073        return ForumEditFactory.getForumMessageAttachmentDescriptionEdit();
074    }
075
076    @Override
077    public ForumMessageAttachmentDescription getEntity(EditForumMessageAttachmentDescriptionResult result) {
078        var forumControl = Session.getModelController(ForumControl.class);
079        ForumMessageAttachmentDescription forumMessageAttachmentDescription = null;
080        String forumMessageName = spec.getForumMessageName();
081        ForumMessage forumMessage = forumControl.getForumMessageByNameForUpdate(forumMessageName);
082
083        if(forumMessage != null) {
084            Integer forumMessageAttachmentSequence = Integer.valueOf(spec.getForumMessageAttachmentSequence());
085            ForumMessageAttachment forumMessageAttachment = forumControl.getForumMessageAttachmentBySequence(forumMessage, forumMessageAttachmentSequence);
086
087            if(forumMessageAttachment != null) {
088                var partyControl = Session.getModelController(PartyControl.class);
089                String languageIsoName = spec.getLanguageIsoName();
090                Language language = partyControl.getLanguageByIsoName(languageIsoName);
091
092                if(language != null) {
093                    if(editMode.equals(EditMode.LOCK) || editMode.equals(EditMode.ABANDON)) {
094                        forumMessageAttachmentDescription = forumControl.getForumMessageAttachmentDescription(forumMessageAttachment, language);
095                    } else { // EditMode.UPDATE
096                        forumMessageAttachmentDescription = forumControl.getForumMessageAttachmentDescriptionForUpdate(forumMessageAttachment, language);
097                    }
098
099                    if(forumMessageAttachmentDescription == null) {
100                        addExecutionError(ExecutionErrors.UnknownForumMessageAttachmentDescription.name(), forumMessageName,
101                                forumMessageAttachmentSequence.toString(), languageIsoName);
102                    }
103                } else {
104                    addExecutionError(ExecutionErrors.UnknownLanguageIsoName.name(), languageIsoName);
105                }
106            } else {
107                addExecutionError(ExecutionErrors.UnknownForumMessageAttachment.name(), forumMessageName, forumMessageAttachmentSequence.toString());
108            }
109        } else {
110            addExecutionError(ExecutionErrors.UnknownForumMessageName.name(), forumMessageName);
111        }
112
113        return forumMessageAttachmentDescription;
114    }
115
116    @Override
117    public ForumMessageAttachment getLockEntity(ForumMessageAttachmentDescription forumMessageAttachmentDescription) {
118        return forumMessageAttachmentDescription.getForumMessageAttachment();
119    }
120
121    @Override
122    public void fillInResult(EditForumMessageAttachmentDescriptionResult result, ForumMessageAttachmentDescription forumMessageAttachmentDescription) {
123        var forumControl = Session.getModelController(ForumControl.class);
124
125        result.setForumMessageAttachmentDescription(forumControl.getForumMessageAttachmentDescriptionTransfer(getUserVisit(), forumMessageAttachmentDescription));
126    }
127
128    @Override
129    public void doLock(ForumMessageAttachmentDescriptionEdit edit, ForumMessageAttachmentDescription forumMessageAttachmentDescription) {
130        edit.setDescription(forumMessageAttachmentDescription.getDescription());
131    }
132
133    @Override
134    public void doUpdate(ForumMessageAttachmentDescription forumMessageAttachmentDescription) {
135        var forumControl = Session.getModelController(ForumControl.class);
136        ForumMessageAttachmentDescriptionValue forumMessageAttachmentDescriptionValue = forumControl.getForumMessageAttachmentDescriptionValue(forumMessageAttachmentDescription);
137
138        forumMessageAttachmentDescriptionValue.setDescription(edit.getDescription());
139
140        forumControl.updateForumMessageAttachmentDescriptionFromValue(forumMessageAttachmentDescriptionValue, getPartyPK());
141    }
142    
143}