/* * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * * This file is part of Entando Enterprise Edition software. * You can redistribute it and/or modify it * under the terms of the Entando's EULA * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * */ package org.entando.entando.plugins.jpwebdynamicform.aps.system.services.api; import java.util.Properties; import java.util.List; import java.util.ArrayList; import javax.ws.rs.core.Response; import org.entando.entando.aps.system.services.api.model.ApiException; import org.entando.entando.aps.system.services.api.server.IResponseBuilder; import org.entando.entando.aps.system.services.api.model.StringApiResponse; import org.entando.entando.aps.system.services.api.IApiErrorCodes; import org.entando.entando.aps.system.services.api.model.ApiError; import org.entando.entando.plugins.jpwebdynamicform.aps.system.services.api.model.JAXBMessage; import com.agiletec.aps.system.ApsSystemUtils; import com.agiletec.aps.system.SystemConstants; import com.agiletec.aps.system.common.entity.helper.BaseFilterUtils; import com.agiletec.aps.system.common.entity.model.AttributeFieldError; import com.agiletec.aps.system.common.entity.model.EntitySearchFilter; import com.agiletec.aps.system.common.entity.model.FieldError; import com.agiletec.aps.system.common.entity.model.IApsEntity; import com.agiletec.aps.system.exception.ApsSystemException; import com.agiletec.aps.system.services.group.IGroupManager; import com.agiletec.plugins.jpwebdynamicform.aps.system.services.message.IMessageManager; import com.agiletec.plugins.jpwebdynamicform.aps.system.services.message.model.Answer; import com.agiletec.plugins.jpwebdynamicform.aps.system.services.message.model.Message; /** * @author E.Santoboni */ public class ApiMessageInterface { public List<String> getMessages(Properties properties) throws Throwable { List<String> usernames = null; try { String userMessageType = properties.getProperty("typeCode"); Message prototype = (Message) this.getMessageManager().getEntityPrototype(userMessageType); if (null == prototype) { throw new ApiException(IApiErrorCodes.API_PARAMETER_VALIDATION_ERROR, "Message Type '" + userMessageType + "' does not exist", Response.Status.CONFLICT); } String langCode = properties.getProperty(SystemConstants.API_LANG_CODE_PARAMETER); String filtersParam = properties.getProperty("filters"); BaseFilterUtils filterUtils = new BaseFilterUtils(); EntitySearchFilter[] filters = filterUtils.getFilters(prototype, filtersParam, langCode); usernames = this.getMessageManager().searchId(userMessageType, filters); } catch (ApiException ae) { throw ae; } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "getMessages"); throw new ApsSystemException("Error searching usernames", t); } return usernames; } public JAXBMessage getMessage(Properties properties) throws ApiException, Throwable { JAXBMessage jaxbMessage = null; try { String id = properties.getProperty("id"); Message userMessage = this.getMessageManager().getMessage(id); if (null == userMessage) { throw new ApiException(IApiErrorCodes.API_PARAMETER_VALIDATION_ERROR, "Message '" + id + "' does not exist", Response.Status.CONFLICT); } jaxbMessage = new JAXBMessage(userMessage, null); List<Answer> answers = this.getMessageManager().getAnswers(id); if (null != answers && !answers.isEmpty()) { jaxbMessage.addAnswers(answers); } } catch (ApiException ae) { throw ae; } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "getMessage"); throw new ApsSystemException("Error extracting Message", t); } return jaxbMessage; } public StringApiResponse addMessage(JAXBMessage jaxbMessage) throws Throwable { StringApiResponse response = new StringApiResponse(); try { String username = jaxbMessage.getId(); if (null != this.getMessageManager().getMessage(username)) { throw new ApiException(IApiErrorCodes.API_PARAMETER_VALIDATION_ERROR, "Message of user '" + username + "' already exist", Response.Status.CONFLICT); } IApsEntity profilePrototype = this.getMessageManager().getEntityPrototype(jaxbMessage.getTypeCode()); if (null == profilePrototype) { throw new ApiException(IApiErrorCodes.API_VALIDATION_ERROR, "User Message type with code '" + jaxbMessage.getTypeCode() + "' does not exist", Response.Status.CONFLICT); } Message message = (Message) jaxbMessage.buildEntity(profilePrototype, null); List<ApiError> errors = this.validate(message); if (errors.size() > 0) { response.addErrors(errors); response.setResult(IResponseBuilder.FAILURE, null); return response; } this.getMessageManager().addMessage(message); response.setResult(IResponseBuilder.SUCCESS, null); } catch (ApiException ae) { response.addErrors(ae.getErrors()); response.setResult(IResponseBuilder.FAILURE, null); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "addMessage"); throw new ApsSystemException("Error adding Message", t); } return response; } private List<ApiError> validate(Message userMessage) throws ApsSystemException { List<ApiError> errors = new ArrayList<ApiError>(); try { List<FieldError> fieldErrors = userMessage.validate(this.getGroupManager()); if (null != fieldErrors) { for (int i = 0; i < fieldErrors.size(); i++) { FieldError fieldError = fieldErrors.get(i); if (fieldError instanceof AttributeFieldError) { AttributeFieldError attributeError = (AttributeFieldError) fieldError; errors.add(new ApiError(IApiErrorCodes.API_VALIDATION_ERROR, attributeError.getFullMessage(), Response.Status.CONFLICT)); } else { errors.add(new ApiError(IApiErrorCodes.API_VALIDATION_ERROR, fieldError.getMessage(), Response.Status.CONFLICT)); } } } } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "validate"); throw new ApsSystemException("Error validating profile", t); } return errors; } public void deleteMessage(Properties properties) throws ApiException, Throwable { StringApiResponse response = new StringApiResponse(); try { String id = properties.getProperty("id"); Message message = this.getMessageManager().getMessage(id); if (null == message) { throw new ApiException(IApiErrorCodes.API_PARAMETER_VALIDATION_ERROR, "Message '" + id + "' does not exist", Response.Status.CONFLICT); } this.getMessageManager().deleteMessage(id); response.setResult(IResponseBuilder.SUCCESS, null); } catch (ApiException ae) { response.addErrors(ae.getErrors()); response.setResult(IResponseBuilder.FAILURE, null); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "deleteMessage"); throw new ApsSystemException("Error deleting Message", t); } } protected IMessageManager getMessageManager() { return _messageManager; } public void setMessageManager(IMessageManager messageManager) { this._messageManager = messageManager; } protected IGroupManager getGroupManager() { return _groupManager; } public void setGroupManager(IGroupManager groupManager) { this._groupManager = groupManager; } private IMessageManager _messageManager; private IGroupManager _groupManager; }