Skip to content

Commit 0d1daac

Browse files
committed
Added ConnectionService
1 parent 50f34d8 commit 0d1daac

File tree

7 files changed

+1055
-2
lines changed

7 files changed

+1055
-2
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.connections;
2+
3+
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.AbstractAdapter;
4+
import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage;
5+
6+
/**
7+
* <p/>
8+
* <p/>
9+
*
10+
* @author tetiana.iefimenko
11+
* @version $Id$
12+
* @see
13+
*/
14+
public class ConnectionsService extends AbstractAdapter {
15+
16+
public ConnectionsService(SessionStorage sessionStorage) {
17+
super(sessionStorage);
18+
}
19+
20+
public SingleConnectionsAdapter connection(String uuId) {
21+
return this.connection(Object.class, null, Object.class, null, uuId);
22+
}
23+
24+
public SingleConnectionsAdapter connection(Class connectionClass, String connectionMimeType, String uuId) {
25+
return this.connection(connectionClass, connectionMimeType, Object.class, null, uuId);
26+
}
27+
28+
public SingleConnectionsAdapter connection(Class connectionClass, String connectionMimeType) {
29+
return this.connection(connectionClass, connectionMimeType, Object.class, null, null);
30+
}
31+
32+
public <C, M> SingleConnectionsAdapter<C, M> connection(Class<C> connection,
33+
String connectionMimeType,
34+
Class<M> metadata,
35+
String metadataMimeType,
36+
String uuId) {
37+
38+
39+
return new SingleConnectionsAdapter<C, M>(sessionStorage, connection,
40+
connectionMimeType,
41+
metadata,
42+
metadataMimeType,
43+
uuId);
44+
}
45+
46+
47+
48+
49+
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.connections;
2+
3+
import com.jaspersoft.jasperserver.dto.connection.FtpConnection;
4+
import com.jaspersoft.jasperserver.dto.connection.LfsConnection;
5+
import com.jaspersoft.jasperserver.dto.resources.ClientCustomDataSource;
6+
import com.jaspersoft.jasperserver.dto.resources.ClientJdbcDataSource;
7+
import com.jaspersoft.jasperserver.dto.resources.ClientJndiJdbcDataSource;
8+
import com.jaspersoft.jasperserver.dto.resources.domain.ClientDomain;
9+
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.AbstractAdapter;
10+
import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest;
11+
import com.jaspersoft.jasperserver.jaxrs.client.core.MimeTypeUtil;
12+
import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage;
13+
import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.MandatoryParameterNotFoundException;
14+
import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler;
15+
import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult;
16+
17+
/**
18+
* <p/>
19+
* <p/>
20+
*
21+
* @author tetiana.iefimenko
22+
* @version $Id$
23+
* @see
24+
*/
25+
public class SingleConnectionsAdapter<C, M> extends AbstractAdapter {
26+
public static final String SERVICE_URI = "connections";
27+
private String uuId;
28+
private Class<C> connectionClass;
29+
private String connectionMimeType;
30+
private Class<M> metadataClass;
31+
private String metadataMimeType;
32+
33+
public SingleConnectionsAdapter(SessionStorage sessionStorage, Class<C> connectionClass,
34+
String connectionMimeType,
35+
Class<M> metadataClass,
36+
String metadataMimeType,
37+
String uuId) {
38+
super(sessionStorage);
39+
this.uuId = uuId;
40+
this.connectionClass = connectionClass;
41+
this.connectionMimeType = connectionMimeType;
42+
this.metadataClass = metadataClass;
43+
this.metadataMimeType = metadataMimeType;
44+
}
45+
46+
@SuppressWarnings("unchecked")
47+
public OperationResult<C> create(C connection) {
48+
if (!isConnectionTypeValid(connection)) {
49+
throw new IllegalArgumentException("Unsupported connectionClass type");
50+
}
51+
JerseyRequest<C> jerseyRequest = JerseyRequest.buildRequest(this.sessionStorage
52+
, connectionClass
53+
, new String[]{SERVICE_URI}
54+
, new DefaultErrorHandler());
55+
if (connectionMimeType != null) {
56+
jerseyRequest
57+
.setContentType(MimeTypeUtil.toCorrectContentMime(sessionStorage.getConfiguration(),
58+
connectionMimeType + "+{mime}"));
59+
}
60+
return jerseyRequest.post(connection);
61+
}
62+
63+
public OperationResult<C> get() {
64+
JerseyRequest<C> jerseyRequest = buildRequest();
65+
return jerseyRequest.get();
66+
}
67+
68+
public OperationResult<C> update(C connection) {
69+
if (!isConnectionTypeValid(connection)) {
70+
throw new IllegalArgumentException("Unsupported connectionClass type");
71+
}
72+
JerseyRequest<C> jerseyRequest = buildRequest();
73+
if (connectionMimeType != null) {
74+
jerseyRequest
75+
.setContentType(MimeTypeUtil.toCorrectContentMime(sessionStorage.getConfiguration()
76+
, connectionMimeType + "+{mime}"));
77+
}
78+
return jerseyRequest.put(connection);
79+
}
80+
81+
public OperationResult delete() {
82+
return buildRequest().delete();
83+
}
84+
85+
protected JerseyRequest<C> buildRequest() {
86+
if (uuId == null || uuId.isEmpty()) {
87+
throw new MandatoryParameterNotFoundException("Uuid of the connection must be specified");
88+
}
89+
return JerseyRequest.buildRequest(this.sessionStorage
90+
, connectionClass
91+
, new String[]{SERVICE_URI, uuId}
92+
, new DefaultErrorHandler());
93+
}
94+
95+
public OperationResult<M> metadata() {
96+
if (uuId == null || uuId.isEmpty()) {
97+
throw new MandatoryParameterNotFoundException("Uuid of the connection must be specified");
98+
}
99+
JerseyRequest<M> jerseyRequest = JerseyRequest.buildRequest(
100+
sessionStorage,
101+
metadataClass,
102+
new String[]{SERVICE_URI, uuId, "metadata"},
103+
new DefaultErrorHandler()
104+
);
105+
jerseyRequest.setAccept(MimeTypeUtil.toCorrectAcceptMime(sessionStorage.getConfiguration()
106+
, metadataMimeType + "+{mime}"));
107+
return jerseyRequest.get();
108+
}
109+
110+
public OperationResult<M> createAndGetMetadata(C connection) {
111+
if (!isConnectionTypeValid(connection)) {
112+
throw new IllegalArgumentException("Unsupported connectionClass type");
113+
}
114+
JerseyRequest<M> jerseyRequest = JerseyRequest.buildRequest(this.sessionStorage
115+
, metadataClass
116+
, new String[]{SERVICE_URI}
117+
, new DefaultErrorHandler());
118+
jerseyRequest
119+
.setContentType(MimeTypeUtil.toCorrectContentMime(sessionStorage.getConfiguration()
120+
, connectionMimeType + "+{mime}"));
121+
jerseyRequest
122+
.setAccept(MimeTypeUtil.toCorrectAcceptMime(sessionStorage.getConfiguration()
123+
, metadataMimeType + "+{mime}"));
124+
return jerseyRequest.post(connection);
125+
}
126+
127+
protected <T> Boolean isConnectionTypeValid(T connection) {
128+
if (connection == null) {
129+
throw new MandatoryParameterNotFoundException("Connection is null");
130+
}
131+
return (connection instanceof FtpConnection ||
132+
connection instanceof LfsConnection ||
133+
connection instanceof ClientCustomDataSource ||
134+
connection instanceof ClientJndiJdbcDataSource ||
135+
connection instanceof ClientJdbcDataSource ||
136+
connection instanceof ClientDomain);
137+
}
138+
}

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/core/Session.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@
2424
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.authority.organizations.OrganizationsService;
2525
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.authority.roles.RolesService;
2626
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.authority.users.UsersService;
27-
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.domain.DomainMetadataService;
27+
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.connections.ConnectionsService;
2828
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.diagnostic.DiagnosticService;
29+
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.domain.DomainMetadataService;
2930
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.importexport.exportservice.ExportService;
3031
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.importexport.importservice.ImportService;
3132
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.inputControls.InputControlsService;
@@ -118,4 +119,6 @@ public AttributesService attributesService() {
118119

119120
public DiagnosticService diagnosticService() {return getService(DiagnosticService.class);}
120121

122+
public ConnectionsService connectionsService() {return getService(ConnectionsService.class);}
123+
121124
}

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/core/enums/ConnectionMediaType.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,43 @@
2323

2424
public final class ConnectionMediaType {
2525

26+
public static final String FTP_TYPE = "application/connections.ftp";
2627
public static final String FTP_JSON = "application/connections.ftp+json";
2728
public static final String FTP_XML = "application/connections.ftp+xml";
2829

30+
public static final String LOCAL_FILE_SYSTEM_TYPE = "application/connections.lfs";
2931
public static final String LOCAL_FILE_SYSTEM_JSON = "application/connections.lfs+json";
3032
public static final String LOCAL_FILE_SYSTEM_XML = "application/connections.lfs+xml";
3133

34+
public static final String CUSTOM_DATA_SOURCE_TYPE = "application/repository.customDataSource";
35+
public static final String CUSTOM_DATA_SOURCE_JSON = "application/repository.customDataSource+json";
36+
public static final String CUSTOM_DATA_SOURCE_XML = "application/repository.customDataSource+xml";
37+
38+
public static final String CUSTOM_DATA_SOURCE_METADATA_TYPE = "application/table.metadata";
39+
public static final String CUSTOM_DATA_SOURCE_METADATA_JSON = "application/table.metadata+json";
40+
public static final String CUSTOM_DATA_SOURCE_METADATA_XML = "application/table.metadata+xml";
41+
42+
public static final String JNDI_JDBC_DATA_SOURCE_TYPE = "application/repository.jndiJdbcDataSource";
43+
public static final String JNDI_JDBC_DATA_SOURCE_JSON = "application/repository.jndiJdbcDataSource+json";
44+
public static final String JNDI_JDBC_DATA_SOURCE_XML = "application/repository.jndiJdbcDataSource+xml";
45+
46+
public static final String JDBC_DATA_SOURCE_TYPE = "application/repository.jdbcDataSource";
47+
public static final String JDBC_DATA_SOURCE_JSON = "application/repository.jdbcDataSource+json";
48+
public static final String JDBC_DATA_SOURCE_XML = "application/repository.jdbcDataSource+xml";
49+
50+
public static final String JDBC_DATA_SOURCE_METADATA_TYPE = "application/repository.customDataSource.metadata";
51+
public static final String JDBC_DATA_SOURCE_METADATA_JSON = "application/repository.customDataSource.metadata+json";
52+
public static final String JDBC_DATA_SOURCE_METADATA_XML = "application/repository.customDataSource.metadata+xml";
53+
54+
public static final String DOMAIN_DATA_SOURCE_TYPE = "application/repository.domain";
55+
public static final String DOMAIN_DATA_SOURCE_JSON = "application/repository.domain+json";
56+
public static final String DOMAIN_DATA_SOURCE_XML = "application/repository.domain+xml";
57+
58+
public static final String TXT_FILE_TYPE = "application/connections.txtFile";
3259
public static final String TXT_FILE_JSON = "application/connections.txtFile+json";
3360
public static final String TXT_FILE_XML = "application/connections.txtFile+xml";
3461

62+
public static final String XLS_FILE_TYPE = "application/connections.xlsFile";
3563
public static final String XLS_FILE_JSON = "application/connections.xlsFile+json";
3664
public static final String XLS_FILE_XML = "application/connections.xlsFile+xml";
3765

src/test/java/com/jaspersoft/jasperserver/jaxrs/client/apiadapters/connection/ConnectionMediaTypeTest.java renamed to src/test/java/com/jaspersoft/jasperserver/jaxrs/client/apiadapters/connections/ConnectionMediaTypeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.connection;
1+
package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.connections;
22

33
import com.jaspersoft.jasperserver.jaxrs.client.core.enums.ConnectionMediaType;
44
import org.testng.annotations.Test;
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.connections;
2+
3+
import com.jaspersoft.jasperserver.dto.connection.metadata.TableMetadata;
4+
import com.jaspersoft.jasperserver.dto.resources.ClientCustomDataSource;
5+
import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage;
6+
import org.powermock.core.classloader.annotations.PrepareForTest;
7+
import org.powermock.modules.testng.PowerMockTestCase;
8+
import org.testng.annotations.AfterMethod;
9+
import org.testng.annotations.BeforeMethod;
10+
import org.testng.annotations.Test;
11+
12+
import static org.mockito.Mockito.mock;
13+
import static org.mockito.Mockito.reset;
14+
import static org.mockito.Mockito.times;
15+
import static org.powermock.api.mockito.PowerMockito.verifyNew;
16+
import static org.powermock.api.mockito.PowerMockito.whenNew;
17+
import static org.testng.Assert.assertSame;
18+
19+
/**
20+
* <p/>
21+
* <p/>
22+
*
23+
* @author tetiana.iefimenko
24+
* @version $Id$
25+
* @see
26+
*/
27+
@PrepareForTest({ConnectionsService.class})
28+
public class ConnectionsServiceTest extends PowerMockTestCase {
29+
30+
private SessionStorage sessionStorageMock;
31+
private SingleConnectionsAdapter singleConnectionsAdapterMock;
32+
33+
@BeforeMethod
34+
public void before() {
35+
sessionStorageMock = mock(SessionStorage.class);
36+
singleConnectionsAdapterMock = mock(SingleConnectionsAdapter.class);
37+
38+
}
39+
40+
@AfterMethod
41+
public void after() {
42+
reset(sessionStorageMock, singleConnectionsAdapterMock);
43+
}
44+
45+
@Test
46+
public void should_pass_session_storage_to_parent_adapter() {
47+
ConnectionsService attributesService = new ConnectionsService(sessionStorageMock);
48+
SessionStorage retrieved = attributesService.getSessionStorage();
49+
assertSame(retrieved, sessionStorageMock);
50+
}
51+
52+
@Test(expectedExceptions = IllegalArgumentException.class)
53+
public void should_throw_an_exception_when_sessionStorage_is_null() {
54+
// When
55+
new ConnectionsService(null);
56+
// Then
57+
// should be thrown an exception
58+
}
59+
60+
61+
@Test
62+
public void should_return_proper_SingleConnectionAdapter_instance_by_uuid() throws Exception {
63+
64+
// Given
65+
whenNew(SingleConnectionsAdapter.class)
66+
.withArguments(sessionStorageMock, Object.class, null, Object.class, null, "someUuId")
67+
.thenReturn(singleConnectionsAdapterMock);
68+
69+
ConnectionsService connectionsService = new ConnectionsService(sessionStorageMock);
70+
71+
// When
72+
SingleConnectionsAdapter retrieved = connectionsService.connection("someUuId");
73+
74+
// Then
75+
assertSame(singleConnectionsAdapterMock, retrieved);
76+
verifyNew(SingleConnectionsAdapter.class, times(1))
77+
.withArguments(sessionStorageMock, Object.class, null, Object.class, null, "someUuId");
78+
}
79+
80+
@Test
81+
public void should_return_proper_SingleConnectionAdapter_instance_by_class_mimeType_uuid() throws Exception {
82+
83+
// Given
84+
whenNew(SingleConnectionsAdapter.class)
85+
.withArguments(sessionStorageMock, ClientCustomDataSource.class, "someMimeType", Object.class, null, "someUuId")
86+
.thenReturn(singleConnectionsAdapterMock);
87+
88+
ConnectionsService connectionsService = new ConnectionsService(sessionStorageMock);
89+
90+
// When
91+
SingleConnectionsAdapter retrieved = connectionsService.connection(ClientCustomDataSource.class, "someMimeType", "someUuId");
92+
93+
// Then
94+
assertSame(singleConnectionsAdapterMock, retrieved);
95+
verifyNew(SingleConnectionsAdapter.class, times(1))
96+
.withArguments(sessionStorageMock, ClientCustomDataSource.class, "someMimeType", Object.class, null, "someUuId");
97+
}
98+
99+
@Test
100+
public void should_return_proper_SingleConnectionAdapter_instance_by_connection_metadata_class_mimeType_uuid() throws Exception {
101+
102+
// Given
103+
whenNew(SingleConnectionsAdapter.class)
104+
.withArguments(sessionStorageMock,
105+
ClientCustomDataSource.class,
106+
"someConnectionMimeType",
107+
TableMetadata.class,
108+
"someMetadataMimeType", "someUuId")
109+
.thenReturn(singleConnectionsAdapterMock);
110+
111+
ConnectionsService connectionsService = new ConnectionsService(sessionStorageMock);
112+
113+
// When
114+
SingleConnectionsAdapter retrieved = connectionsService.
115+
connection(ClientCustomDataSource.class, "someConnectionMimeType", TableMetadata.class,
116+
"someMetadataMimeType", "someUuId");
117+
118+
// Then
119+
assertSame(singleConnectionsAdapterMock, retrieved);
120+
verifyNew(SingleConnectionsAdapter.class, times(1))
121+
.withArguments(sessionStorageMock,
122+
ClientCustomDataSource.class,
123+
"someConnectionMimeType",
124+
TableMetadata.class,
125+
"someMetadataMimeType", "someUuId");
126+
}
127+
128+
}

0 commit comments

Comments
 (0)