package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.connections; import com.jaspersoft.jasperserver.dto.connection.FtpConnection; import com.jaspersoft.jasperserver.dto.connection.LfsConnection; import com.jaspersoft.jasperserver.dto.resources.ClientCustomDataSource; import com.jaspersoft.jasperserver.dto.resources.ClientJdbcDataSource; import com.jaspersoft.jasperserver.dto.resources.ClientJndiJdbcDataSource; import com.jaspersoft.jasperserver.dto.resources.ClientReportUnit; import com.jaspersoft.jasperserver.dto.resources.ClientSemanticLayerDataSource; import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.AbstractAdapter; import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest; import com.jaspersoft.jasperserver.jaxrs.client.core.MimeTypeUtil; import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage; import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.MandatoryParameterNotFoundException; import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler; import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult; /** * <p/> * <p/> * * @author tetiana.iefimenko * @version $Id$ * @see */ public class SingleConnectionsAdapter<C, M> extends AbstractAdapter { public static final String SERVICE_URI = "connections"; private String uuId; private Class<C> connectionClass; private String connectionMimeType; private Class<M> metadataClass; private String metadataMimeType; public SingleConnectionsAdapter(SessionStorage sessionStorage, Class<C> connectionClass, String connectionMimeType, Class<M> metadataClass, String metadataMimeType, String uuId) { super(sessionStorage); this.uuId = uuId; this.connectionClass = connectionClass; this.connectionMimeType = connectionMimeType; this.metadataClass = metadataClass; this.metadataMimeType = metadataMimeType; } @SuppressWarnings("unchecked") public OperationResult<C> create(C connection) { if (!isConnectionTypeValid(connection)) { throw new IllegalArgumentException("Unsupported connectionClass type"); } JerseyRequest<C> jerseyRequest = JerseyRequest.buildRequest(this.sessionStorage , connectionClass , new String[]{SERVICE_URI} , new DefaultErrorHandler()); if (connectionMimeType != null) { jerseyRequest .setContentType(MimeTypeUtil.toCorrectContentMime(sessionStorage.getConfiguration(), connectionMimeType + "+{mime}")); } return jerseyRequest.post(connection); } public OperationResult<C> get() { JerseyRequest<C> jerseyRequest = buildRequest(); return jerseyRequest.get(); } public OperationResult<C> update(C connection) { if (!isConnectionTypeValid(connection)) { throw new IllegalArgumentException("Unsupported connectionClass type"); } JerseyRequest<C> jerseyRequest = buildRequest(); if (connectionMimeType != null) { jerseyRequest .setContentType(MimeTypeUtil.toCorrectContentMime(sessionStorage.getConfiguration() , connectionMimeType + "+{mime}")); } return jerseyRequest.put(connection); } public OperationResult delete() { return buildRequest().delete(); } protected JerseyRequest<C> buildRequest() { if (uuId == null || uuId.isEmpty()) { throw new MandatoryParameterNotFoundException("Uuid of the connection must be specified"); } return JerseyRequest.buildRequest(this.sessionStorage , connectionClass , new String[]{SERVICE_URI, uuId} , new DefaultErrorHandler()); } public OperationResult<M> metadata() { if (uuId == null || uuId.isEmpty()) { throw new MandatoryParameterNotFoundException("Uuid of the connection must be specified"); } JerseyRequest<M> jerseyRequest = JerseyRequest.buildRequest( sessionStorage, metadataClass, new String[]{SERVICE_URI, uuId, "metadata"}, new DefaultErrorHandler() ); jerseyRequest.setAccept(MimeTypeUtil.toCorrectAcceptMime(sessionStorage.getConfiguration() , metadataMimeType + "+{mime}")); return jerseyRequest.get(); } public OperationResult<M> createAndGetMetadata(C connection) { if (!isConnectionTypeValid(connection)) { throw new IllegalArgumentException("Unsupported connectionClass type"); } JerseyRequest<M> jerseyRequest = JerseyRequest.buildRequest(this.sessionStorage , metadataClass , new String[]{SERVICE_URI} , new DefaultErrorHandler()); jerseyRequest .setContentType(MimeTypeUtil.toCorrectContentMime(sessionStorage.getConfiguration() , connectionMimeType + "+{mime}")); jerseyRequest .setAccept(MimeTypeUtil.toCorrectAcceptMime(sessionStorage.getConfiguration() , metadataMimeType + "+{mime}")); return jerseyRequest.post(connection); } protected <T> Boolean isConnectionTypeValid(T connection) { if (connection == null) { throw new MandatoryParameterNotFoundException("Connection is null"); } return (connection instanceof FtpConnection || connection instanceof LfsConnection || connection instanceof ClientSemanticLayerDataSource || connection instanceof ClientCustomDataSource || connection instanceof ClientJndiJdbcDataSource || connection instanceof ClientJdbcDataSource || connection instanceof ClientReportUnit); } }