/******************************************************************************** | |
* Copyright (c) 2015-2018 Contributors to the Eclipse Foundation | |
* | |
* See the NOTICE file(s) distributed with this work for additional | |
* information regarding copyright ownership. | |
* | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v. 2.0 which is available at | |
* http://www.eclipse.org/legal/epl-2.0. | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
********************************************************************************/ | |
package org.eclipse.mdm.businessobjects.boundary; | |
import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID; | |
import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME; | |
import java.util.Map; | |
import javax.ejb.EJB; | |
import javax.ws.rs.Consumes; | |
import javax.ws.rs.DELETE; | |
import javax.ws.rs.GET; | |
import javax.ws.rs.POST; | |
import javax.ws.rs.PUT; | |
import javax.ws.rs.Path; | |
import javax.ws.rs.PathParam; | |
import javax.ws.rs.Produces; | |
import javax.ws.rs.QueryParam; | |
import javax.ws.rs.WebApplicationException; | |
import javax.ws.rs.core.MediaType; | |
import javax.ws.rs.core.Response; | |
import javax.ws.rs.core.Response.Status; | |
import org.eclipse.mdm.api.base.adapter.Attribute; | |
import org.eclipse.mdm.api.base.adapter.EntityType; | |
import org.eclipse.mdm.api.base.model.ChannelGroup; | |
import org.eclipse.mdm.api.base.model.Environment; | |
import org.eclipse.mdm.api.base.model.Measurement; | |
import org.eclipse.mdm.api.dflt.model.ValueList; | |
import org.eclipse.mdm.businessobjects.entity.I18NResponse; | |
import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse; | |
import org.eclipse.mdm.businessobjects.service.EntityService; | |
import org.eclipse.mdm.businessobjects.utils.RequestBody; | |
import org.eclipse.mdm.businessobjects.utils.ServiceUtils; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
import io.swagger.v3.oas.annotations.tags.Tag; | |
import io.vavr.collection.List; | |
/** | |
* {@link ChannelGroup} resource | |
* | |
* @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH | |
* | |
*/ | |
@Tag(name = "ChannelGroup") | |
@Path("/environments/{SOURCENAME}/channelgroups") | |
public class ChannelGroupResource { | |
private static final Logger LOG = LoggerFactory.getLogger(ChannelGroupResource.class); | |
@EJB | |
private ChannelGroupService channelGroupService; | |
@EJB | |
private EntityService entityService; | |
/** | |
* delegates the request to the {@link ChannelGroupService} | |
* | |
* @param sourceName name of the source (MDM {@link Environment} name) | |
* @param filter filter string to filter the {@link ChannelGroup} result | |
* @return the result of the delegated request as {@link Response} | |
*/ | |
@GET | |
@Produces(MediaType.APPLICATION_JSON) | |
public Response getChannelGroups(@PathParam("SOURCENAME") String sourceName, @QueryParam("filter") String filter) { | |
try { | |
java.util.List<ChannelGroup> channelGroups = this.channelGroupService.getChannelGroups(sourceName, filter); | |
return ServiceUtils.toResponse(new MDMEntityResponse(ChannelGroup.class, channelGroups), Status.OK); | |
} catch (RuntimeException e) { | |
LOG.error(e.getMessage(), e); | |
throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR); | |
} | |
} | |
/** | |
* returns a {@link ChannelGroup} identified by the given id. | |
* | |
* @param sourceName name of the source (MDM {@link Environment} name) | |
* @param channelId id of the {@link ChannelGroup} | |
* @return the matching {@link ChannelGroup} | |
*/ | |
@GET | |
@Produces(MediaType.APPLICATION_JSON) | |
@Path("/{CHANNELGROUP_ID}") | |
public Response getChannelGroup(@PathParam("SOURCENAME") String sourceName, | |
@PathParam("CHANNELGROUP_ID") String channelGroupId) { | |
try { | |
ChannelGroup channelGroup = this.channelGroupService.getChannelGroup(sourceName, channelGroupId); | |
return ServiceUtils.toResponse(new MDMEntityResponse(ChannelGroup.class, channelGroup), Status.OK); | |
} catch (RuntimeException e) { | |
LOG.error(e.getMessage(), e); | |
throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR); | |
} | |
} | |
/** | |
* delegates the request to the {@link ChannelGroupService} | |
* | |
* @param sourceName name of the source (MDM {@link Environment} name) | |
* @return the result of the delegated request as {@link Response} | |
*/ | |
@GET | |
@Produces(MediaType.APPLICATION_JSON) | |
@Path("/localizations") | |
public Response localize(@PathParam("SOURCENAME") String sourceName) { | |
try { | |
Map<Attribute, String> localizedAttributeMap = this.channelGroupService.localizeAttributes(sourceName); | |
Map<EntityType, String> localizedEntityTypeMap = this.channelGroupService.localizeType(sourceName); | |
return ServiceUtils.toResponse(new I18NResponse(localizedEntityTypeMap, localizedAttributeMap), Status.OK); | |
} catch (RuntimeException e) { | |
LOG.error(e.getMessage(), e); | |
throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR); | |
} | |
} | |
/** | |
* Returns the created {@link ChannelGroup}. | |
* | |
* @param sourceName name of the source (MDM {@link Environment} name) | |
* @param body The {@link ChannelGroup} to create. | |
* @return the created {@link ChannelGroup} as {@link Response}. | |
*/ | |
@POST | |
@Produces(MediaType.APPLICATION_JSON) | |
@Consumes(MediaType.APPLICATION_JSON) | |
public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) { | |
return entityService | |
.create(sourceName, ChannelGroup.class, | |
entityService.extractRequestBody(body, sourceName, List.of(Measurement.class))) | |
.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED)) | |
.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE); | |
} | |
/** | |
* Updates the {@link ChannelGroup} with all parameters set in the given JSON | |
* body of the request. | |
* | |
* @param sourceName name of the source (MDM {@link Environment} name) | |
* @param id the identifier of the {@link ChannelGroup} to update. | |
* @param body the body of the request containing the attributes to update | |
* @return the updated {@link ChannelGroup} | |
*/ | |
@PUT | |
@Produces(MediaType.APPLICATION_JSON) | |
@Consumes(MediaType.APPLICATION_JSON) | |
@Path("/{" + REQUESTPARAM_ID + "}") | |
public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id, | |
String body) { | |
RequestBody requestBody = RequestBody.create(body); | |
return entityService | |
.update(sourceName, entityService.find(sourceName, ChannelGroup.class, id), | |
requestBody.getValueMapSupplier()) | |
.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER) | |
.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE); | |
} | |
/** | |
* Deletes and returns the deleted {@link ChannelGroup}. | |
* | |
* @param sourceName name of the source (MDM {@link Environment} name) | |
* @param id The identifier of the {@link ChannelGroup} to delete. | |
* @return the deleted {@link ValueList }s as {@link Response} | |
*/ | |
@DELETE | |
@Produces(MediaType.APPLICATION_JSON) | |
@Path("/{" + REQUESTPARAM_ID + "}") | |
public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, | |
@PathParam(REQUESTPARAM_ID) String id) { | |
return entityService.delete(sourceName, entityService.find(sourceName, ChannelGroup.class, id)) | |
.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER) | |
.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE); | |
} | |
} |