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.content.server.command; 018 019import com.echothree.control.user.content.common.edit.ContentEditFactory; 020import com.echothree.control.user.content.common.edit.ContentPageAreaEdit; 021import com.echothree.control.user.content.common.form.EditContentPageAreaForm; 022import com.echothree.control.user.content.common.result.ContentResultFactory; 023import com.echothree.control.user.content.common.result.EditContentPageAreaResult; 024import com.echothree.control.user.content.common.spec.ContentPageAreaSpec; 025import com.echothree.model.control.content.server.control.ContentControl; 026import com.echothree.model.control.core.server.control.MimeTypeControl; 027import com.echothree.model.control.party.common.PartyTypes; 028import com.echothree.model.control.party.server.control.PartyControl; 029import com.echothree.model.control.security.common.SecurityRoleGroups; 030import com.echothree.model.control.security.common.SecurityRoles; 031import com.echothree.model.data.content.server.entity.ContentPageArea; 032import com.echothree.model.data.core.server.entity.MimeType; 033import com.echothree.model.data.user.common.pk.UserVisitPK; 034import com.echothree.util.common.command.EditMode; 035import com.echothree.util.common.message.ExecutionErrors; 036import com.echothree.util.common.validation.FieldDefinition; 037import com.echothree.util.common.validation.FieldType; 038import com.echothree.util.server.control.BaseAbstractEditCommand; 039import com.echothree.util.server.control.CommandSecurityDefinition; 040import com.echothree.util.server.control.PartyTypeDefinition; 041import com.echothree.util.server.control.SecurityRoleDefinition; 042import com.echothree.util.server.persistence.Session; 043import java.util.Arrays; 044import java.util.Collections; 045import java.util.List; 046import javax.enterprise.context.RequestScoped; 047 048@RequestScoped 049public class EditContentPageAreaCommand 050 extends BaseAbstractEditCommand<ContentPageAreaSpec, ContentPageAreaEdit, EditContentPageAreaResult, ContentPageArea, ContentPageArea> { 051 052 private final static CommandSecurityDefinition COMMAND_SECURITY_DEFINITION; 053 private final static List<FieldDefinition> SPEC_FIELD_DEFINITIONS; 054 private final static List<FieldDefinition> EDIT_FIELD_DEFINITIONS; 055 056 static { 057 COMMAND_SECURITY_DEFINITION = new CommandSecurityDefinition(Collections.unmodifiableList(Arrays.asList( 058 new PartyTypeDefinition(PartyTypes.UTILITY.name(), null), 059 new PartyTypeDefinition(PartyTypes.EMPLOYEE.name(), Collections.unmodifiableList(Arrays.asList( 060 new SecurityRoleDefinition(SecurityRoleGroups.ContentPageArea.name(), SecurityRoles.Edit.name()) 061 ))) 062 ))); 063 064 SPEC_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList( 065 new FieldDefinition("ContentCollectionName", FieldType.ENTITY_NAME, true, null, null), 066 new FieldDefinition("ContentSectionName", FieldType.ENTITY_NAME, true, null, null), 067 new FieldDefinition("ContentPageName", FieldType.ENTITY_NAME, true, null, null), 068 new FieldDefinition("SortOrder", FieldType.SIGNED_INTEGER, true, null, null), 069 new FieldDefinition("LanguageIsoName", FieldType.ENTITY_NAME, true, null, null) 070 )); 071 072 EDIT_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList( 073 new FieldDefinition("MimeTypeName", FieldType.MIME_TYPE, true, null, null), 074 new FieldDefinition("Description", FieldType.STRING, false, 1L, 132L), 075 new FieldDefinition("ContentPageAreaClob", FieldType.STRING, false, 1L, null), 076 new FieldDefinition("ContentPageAreaUrl", FieldType.URL, false, 1L, 200L) 077 )); 078 } 079 080 /** Creates a new instance of EditContentPageAreaCommand */ 081 public EditContentPageAreaCommand() { 082 super(COMMAND_SECURITY_DEFINITION, SPEC_FIELD_DEFINITIONS, EDIT_FIELD_DEFINITIONS); 083 } 084 085 @Override 086 public EditContentPageAreaResult getResult() { 087 return ContentResultFactory.getEditContentPageAreaResult(); 088 } 089 090 @Override 091 public ContentPageAreaEdit getEdit() { 092 return ContentEditFactory.getContentPageAreaEdit(); 093 } 094 095 @Override 096 public ContentPageArea getEntity(EditContentPageAreaResult result) { 097 var contentControl = Session.getModelController(ContentControl.class); 098 ContentPageArea contentPageArea = null; 099 var contentCollectionName = spec.getContentCollectionName(); 100 var contentCollection = contentControl.getContentCollectionByName(contentCollectionName); 101 102 if(contentCollection != null) { 103 var contentSectionName = spec.getContentSectionName(); 104 var contentSection = contentControl.getContentSectionByName(contentCollection, contentSectionName); 105 106 if(contentSection != null) { 107 var contentPageName = spec.getContentPageName(); 108 var contentPage = contentControl.getContentPageByName(contentSection, contentPageName); 109 110 if(contentPage != null) { 111 var sortOrder = Integer.valueOf(spec.getSortOrder()); 112 var contentPageLayout = contentPage.getLastDetail().getContentPageLayout(); 113 var contentPageLayoutArea = contentControl.getContentPageLayoutArea(contentPageLayout, sortOrder); 114 115 if(contentPageLayoutArea != null) { 116 var partyControl = Session.getModelController(PartyControl.class); 117 var languageIsoName = spec.getLanguageIsoName(); 118 var language = partyControl.getLanguageByIsoName(languageIsoName); 119 120 if(language != null) { 121 if(editMode.equals(EditMode.LOCK) || editMode.equals(EditMode.ABANDON)) { 122 contentPageArea = contentControl.getContentPageArea(contentPage, contentPageLayoutArea, language); 123 } else { // EditMode.UPDATE 124 contentPageArea = contentControl.getContentPageAreaForUpdate(contentPage, contentPageLayoutArea, language); 125 } 126 127 if(contentPageArea == null) { 128 addExecutionError(ExecutionErrors.UnknownContentPageArea.name()); 129 } 130 } else { 131 addExecutionError(ExecutionErrors.UnknownLanguageIsoName.name(), languageIsoName); 132 } 133 } else { 134 addExecutionError(ExecutionErrors.UnknownContentPageLayoutArea.name()); 135 } 136 } else { 137 addExecutionError(ExecutionErrors.UnknownContentPageName.name(), contentPageName); 138 } 139 } else { 140 addExecutionError(ExecutionErrors.UnknownContentSectionName.name(), contentSectionName); 141 } 142 } else { 143 addExecutionError(ExecutionErrors.UnknownContentCollectionName.name(), contentCollectionName); 144 } 145 146 return contentPageArea; 147 } 148 149 @Override 150 public ContentPageArea getLockEntity(ContentPageArea contentPageArea) { 151 return contentPageArea; 152 } 153 154 @Override 155 public void fillInResult(EditContentPageAreaResult result, ContentPageArea contentPageArea) { 156 var contentControl = Session.getModelController(ContentControl.class); 157 158 result.setContentPageArea(contentControl.getContentPageAreaTransfer(getUserVisit(), contentPageArea)); 159 } 160 161 @Override 162 public void doLock(ContentPageAreaEdit edit, ContentPageArea contentPageArea) { 163 var contentControl = Session.getModelController(ContentControl.class); 164 var contentPageAreaDetail = contentPageArea.getLastDetail(); 165 var contentPageAreaBlob = contentControl.getContentPageAreaBlob(contentPageAreaDetail); 166 var contentPageAreaClob = contentControl.getContentPageAreaClob(contentPageAreaDetail); 167 var contentPageAreaString = contentControl.getContentPageAreaString(contentPageAreaDetail); 168 var contentPageAreaUrl = contentControl.getContentPageAreaUrl(contentPageAreaDetail); 169 170 edit.setMimeTypeName(contentPageArea.getLastDetail().getMimeType().getLastDetail().getMimeTypeName()); 171 172 if(contentPageAreaBlob != null) { 173 edit.setContentPageAreaBlob(contentPageAreaBlob.getBlob()); 174 } 175 176 if(contentPageAreaClob != null) { 177 edit.setContentPageAreaClob(contentPageAreaClob.getClob()); 178 } 179 180 if(contentPageAreaString != null) { 181 edit.setDescription(contentPageAreaString.getString()); 182 } 183 184 if(contentPageAreaUrl != null) { 185 edit.setContentPageAreaUrl(contentPageAreaUrl.getUrl()); 186 } 187 } 188 189 MimeType mimeType = null; 190 191 @Override 192 public void canUpdate(ContentPageArea contentPageArea) { 193 var mimeTypeControl = Session.getModelController(MimeTypeControl.class); 194 var mimeTypeName = edit.getMimeTypeName(); 195 196 mimeType = mimeTypeControl.getMimeTypeByName(mimeTypeName); 197 198 if(mimeType == null) { 199 addExecutionError(ExecutionErrors.UnknownMimeTypeName.name(), mimeTypeName); 200 } 201 } 202 203 @Override 204 public void doUpdate(ContentPageArea contentPageArea) { 205 var contentControl = Session.getModelController(ContentControl.class); 206 var contentPageAreaDetailValue = contentControl.getContentPageAreaDetailValueForUpdate(contentPageArea); 207 var description = edit.getDescription(); 208 var contentPageAreaBlob = edit.getContentPageAreaBlob(); 209 var contentPageAreaClob = edit.getContentPageAreaClob(); 210 var contentPageAreaUrl = edit.getContentPageAreaUrl(); 211 212 contentPageAreaDetailValue.setMimeTypePK(mimeType.getPrimaryKey()); 213 214 var contentPageAreaDetail = contentControl.updateContentPageAreaFromValue(contentPageAreaDetailValue, true, getPartyPK()); 215 216 if(contentPageAreaBlob != null) { 217 contentControl.createContentPageAreaBlob(contentPageAreaDetail, contentPageAreaBlob); 218 } 219 220 if(contentPageAreaClob != null) { 221 contentControl.createContentPageAreaClob(contentPageAreaDetail, contentPageAreaClob); 222 } 223 224 if(contentPageAreaUrl != null) { 225 contentControl.createContentPageAreaUrl(contentPageAreaDetail, contentPageAreaUrl); 226 } 227 228 if(description != null) { 229 contentControl.createContentPageAreaString(contentPageAreaDetail, description); 230 } 231 } 232 233}