From 837c1954ddceebb74521e7339248b2ff42196367 Mon Sep 17 00:00:00 2001 From: Jakub Plichta Date: Fri, 13 Nov 2015 10:38:38 +0100 Subject: [PATCH 001/934] Support universal connector processes polling --- .../gooddata/connector/ConnectorService.java | 68 +++++++++++++------ .../connector/IntegrationProcessStatus.java | 22 +++++- .../com/gooddata/connector/ProcessStatus.java | 8 ++- .../connector/ConnectorServiceIT.java | 44 +++++++++++- .../IntegrationProcessStatusTest.java | 24 ++++--- .../gooddata/connector/ProcessStatusTest.java | 2 + .../integration-scheduled-process.json | 48 +++++++++++++ 7 files changed, 178 insertions(+), 38 deletions(-) create mode 100644 src/test/resources/connector/integration-scheduled-process.json diff --git a/src/main/java/com/gooddata/connector/ConnectorService.java b/src/main/java/com/gooddata/connector/ConnectorService.java index c79dea10f..23f4f9b90 100644 --- a/src/main/java/com/gooddata/connector/ConnectorService.java +++ b/src/main/java/com/gooddata/connector/ConnectorService.java @@ -20,8 +20,10 @@ import java.io.IOException; import java.util.Collection; +import java.util.Map; import static com.gooddata.util.Validate.notNull; +import static java.lang.String.format; /** * Service for connector integration creation, update of its settings or execution of its process. @@ -197,31 +199,55 @@ public FutureResult executeProcess(final Project project, final P try { final UriResponse response = restTemplate .postForObject(ProcessStatus.URL, execution, UriResponse.class, project.getId(), connectorType); - return new PollResult<>(this, new SimplePollHandler(response.getUri(), ProcessStatus.class) { - @Override - public boolean isFinished(final ClientHttpResponse response) throws IOException { - final ProcessStatus process = extractData(response, ProcessStatus.class); - return process.isFinished(); - } - - @Override - public void handlePollResult(final ProcessStatus pollResult) { - super.handlePollResult(pollResult); - if (pollResult.isFailed()) { - throw new ConnectorException(connectorType + " process failed: " + - pollResult.getStatus().getDescription()); - } - } - - @Override - public void handlePollException(final GoodDataRestException e) { - throw new ConnectorException(connectorType + " process failed: " + e.getText(), e); - } - }); + return createProcessPollResult(response.getUri()); } catch (GoodDataRestException | RestClientException e) { throw new ConnectorException("Unable to execute " + connectorType + " process", e); } } + /** + * Gets status of provided connector process. + *

+ * You can use process retrieved by getXXXProcess methods on {@link Integration} as well as a result of + * {@link ConnectorService#executeProcess(Project, ProcessExecution)}. + * + * @param process process to be executed + * @return executed process + * @throws ConnectorException if process execution fails + */ + public FutureResult getProcessStatus(final IntegrationProcessStatus process) { + notNull(process, "process"); + notNull(process.getUri(), "process.getUri"); + return createProcessPollResult(process.getUri()); + } + + private FutureResult createProcessPollResult(final String uri) { + final Map match = IntegrationProcessStatus.TEMPLATE.match(uri); + final String connectorType = match.get("connector"); + final String processId = match.get("process"); + return new PollResult<>(this, new SimplePollHandler(uri, ProcessStatus.class) { + @Override + public boolean isFinished(final ClientHttpResponse response) throws IOException { + final ProcessStatus process = extractData(response, ProcessStatus.class); + return process.isFinished(); + } + + @Override + public void handlePollResult(final ProcessStatus pollResult) { + super.handlePollResult(pollResult); + if (pollResult.isFailed()) { + throw new ConnectorException(format("%s process %s failed: %s", connectorType, processId, + pollResult.getStatus().getDescription())); + } + } + + @Override + public void handlePollException(final GoodDataRestException e) { + throw new ConnectorException(format("%s process %s failed: %s", connectorType, processId, + e.getText()), e); + } + }); + } + } diff --git a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java index 722ff1169..4826a467e 100644 --- a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java +++ b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java @@ -12,6 +12,9 @@ import org.codehaus.jackson.map.annotate.JsonDeserialize; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.joda.time.DateTime; +import org.springframework.web.util.UriTemplate; + +import java.util.Map; /** * Connector process (i.e. single ETL run) status used in integration object. Deserialization only. @@ -20,17 +23,24 @@ @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class IntegrationProcessStatus { + public static final String URI = "/gdc/projects/{project}/connectors/{connector}/integration/processes/{process}"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); + private static final String SELF_LINK = "self"; + private final Status status; private final DateTime started; private final DateTime finished; + private Map links; @JsonCreator protected IntegrationProcessStatus(@JsonProperty("status") Status status, @JsonProperty("started") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime started, - @JsonProperty("finished") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime finished) { + @JsonProperty("finished") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime finished, + @JsonProperty("links") Map links) { this.status = status; this.started = started; this.finished = finished; + this.links = links; } public Status getStatus() { @@ -68,4 +78,14 @@ public boolean isFinished() { public boolean isFailed() { return status != null && status.isFailed(); } + + @JsonIgnore + public String getUri() { + return links != null ? links.get(SELF_LINK): null; + } + + @JsonIgnore + public String getId() { + return TEMPLATE.match(getUri()).get("process"); + } } diff --git a/src/main/java/com/gooddata/connector/ProcessStatus.java b/src/main/java/com/gooddata/connector/ProcessStatus.java index 14e11c8de..c8f8885b7 100644 --- a/src/main/java/com/gooddata/connector/ProcessStatus.java +++ b/src/main/java/com/gooddata/connector/ProcessStatus.java @@ -10,9 +10,10 @@ import org.codehaus.jackson.annotate.JsonTypeInfo; import org.codehaus.jackson.annotate.JsonTypeName; import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; import org.joda.time.DateTime; +import java.util.Map; + /** * Connector process (i.e. single ETL run) status (standalone, not embedded in integration as its parent) . * Deserialization only. @@ -27,8 +28,9 @@ public class ProcessStatus extends IntegrationProcessStatus { @JsonCreator ProcessStatus(@JsonProperty("status") Status status, @JsonProperty("started") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime started, - @JsonProperty("finished") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime finished) { - super(status, started, finished); + @JsonProperty("finished") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime finished, + @JsonProperty("links") Map links) { + super(status, started, finished, links); } } diff --git a/src/test/java/com/gooddata/connector/ConnectorServiceIT.java b/src/test/java/com/gooddata/connector/ConnectorServiceIT.java index 8390198f5..28471e76f 100644 --- a/src/test/java/com/gooddata/connector/ConnectorServiceIT.java +++ b/src/test/java/com/gooddata/connector/ConnectorServiceIT.java @@ -2,10 +2,8 @@ import com.gooddata.AbstractGoodDataIT; import com.gooddata.GoodDataException; -import com.gooddata.JsonMatchers; import com.gooddata.gdc.UriResponse; import com.gooddata.project.Project; -import com.gooddata.util.ResourceUtils; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -13,6 +11,7 @@ import static com.gooddata.connector.Status.Code.ERROR; import static com.gooddata.connector.Status.Code.SYNCHRONIZED; import static com.gooddata.util.ResourceUtils.*; +import static java.util.Collections.singletonMap; import static net.jadler.Jadler.onRequest; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -118,7 +117,7 @@ public void shouldExecuteProcess() throws Exception { assertThat(process.getStatus().getCode(), is(SYNCHRONIZED.name())); } - @Test(expectedExceptions = ConnectorException.class, expectedExceptionsMessageRegExp = ".*process failed.*") + @Test(expectedExceptions = ConnectorException.class, expectedExceptionsMessageRegExp = ".*zendesk4 process PROCESS failed.*") public void shouldFailExecuteProcessPolling() throws Exception { onRequest() .havingMethodEqualTo("POST") @@ -149,6 +148,45 @@ public void shouldFailExecuteProcess() throws Exception { assertThat(process.getStatus().getCode(), is(ERROR.name())); } + @Test + public void shouldGetProcessStatus() throws Exception { + onRequest() + .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS_ID") + .respond() + .withBody(readFromResource("/connector/process-status-scheduled.json")) + .thenRespond() + .withBody(readFromResource("/connector/process-status-finished.json")); + + final IntegrationProcessStatus runningProcess = new IntegrationProcessStatus(null, null, null, + singletonMap("self", "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS_ID")); + final ProcessStatus process = connectors.getProcessStatus(runningProcess).get(); + assertThat(process.getStatus().getCode(), is(SYNCHRONIZED.name())); + } + + @Test(expectedExceptions = ConnectorException.class, expectedExceptionsMessageRegExp = ".*zendesk4 process PROCESS_ID failed.*") + public void shouldFailGetProcessStatusPolling() throws Exception { + onRequest() + .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS_ID") + .respond() + .withStatus(400); + final IntegrationProcessStatus runningProcess = new IntegrationProcessStatus(null, null, null, + singletonMap("self", "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS_ID")); + connectors.getProcessStatus(runningProcess).get(); + } + + @Test(expectedExceptions = GoodDataException.class) + public void shouldFailGetProcessStatus() throws Exception { + onRequest() + .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS_ID") + .respond() + .withBody(readFromResource("/connector/process-status-error.json")); + + final IntegrationProcessStatus runningProcess = new IntegrationProcessStatus(null, null, null, + singletonMap("self", "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS_ID")); + final ProcessStatus process = connectors.getProcessStatus(runningProcess).get(); + assertThat(process.getStatus().getCode(), is(ERROR.name())); + } + @Test public void shouldGetSettings() throws Exception { onRequest() diff --git a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java index 455c295e3..2824ced83 100644 --- a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java @@ -8,6 +8,8 @@ import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import java.util.Collections; + import static com.gooddata.connector.Status.Code.ERROR; import static com.gooddata.connector.Status.Code.SYNCHRONIZED; import static com.gooddata.connector.Status.Code.UPLOADING; @@ -32,65 +34,67 @@ public void testShouldDeserialize() throws Exception { assertThat(process.getStatus().getCode(), is(ERROR.name())); assertThat(process.getStatus().getDetail(), is("GDC-INTERNAL-ERROR")); assertThat(process.getStatus().getDescription(), is(nullValue())); + assertThat(process.getUri(), is("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/FINISHED_PROCESS_ID")); + assertThat(process.getId(), is("FINISHED_PROCESS_ID")); } @Test public void testIsFinishedOnError() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(ERROR.name(), "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(true)); } @Test public void testIsFinishedOnSynchronized() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(SYNCHRONIZED.name(), "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(SYNCHRONIZED.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(true)); } @Test public void testIsFinishedOnUploading() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(UPLOADING.name(), "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(UPLOADING.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(false)); } @Test public void testIsFinishedOnNullCode() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(null, "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(null, "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(false)); } @Test public void testIsFinishedOnUnknownCode() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(false)); } @Test public void testIsFailedOnError() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(ERROR.name(), "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(true)); } @Test public void testIsFailedOnUserError() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(USER_ERROR.name(), "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(USER_ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(true)); } @Test public void testIsFailedOnSynchronized() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(SYNCHRONIZED.name(), "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(SYNCHRONIZED.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(false)); } @Test public void testIsFailedOnNullCode() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(null, "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(null, "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(false)); } @Test public void testIsFailedOnUnknownCode() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(false)); } diff --git a/src/test/java/com/gooddata/connector/ProcessStatusTest.java b/src/test/java/com/gooddata/connector/ProcessStatusTest.java index 51e7c7ed0..c2738cf29 100644 --- a/src/test/java/com/gooddata/connector/ProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/ProcessStatusTest.java @@ -22,6 +22,8 @@ public void shouldDeserialize() throws Exception { assertThat(process.getStatus().getCode(), is(ERROR.name())); assertThat(process.getStatus().getDetail(), is("GDC-INTERNAL-ERROR")); assertThat(process.getStatus().getDescription(), is("Data load unsuccessful. Please check your settings and try again or contact us at support@gooddata.com")); + assertThat(process.getUri(), is("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS_ID")); + assertThat(process.getId(), is("PROCESS_ID")); } } diff --git a/src/test/resources/connector/integration-scheduled-process.json b/src/test/resources/connector/integration-scheduled-process.json new file mode 100644 index 000000000..9303c1c7e --- /dev/null +++ b/src/test/resources/connector/integration-scheduled-process.json @@ -0,0 +1,48 @@ +{ + "integration" : { + "projectTemplate" : "/projectTemplates/template", + "active" : true, + "lastFinishedProcess" : { + "status" : { + "code" : "ERROR", + "detail" : "GDC-INTERNAL-ERROR", + "description" : "Data load unsuccessful. Please check your settings and try again or contact us at support@gooddata.com" + }, + "started" : "2014-05-30T07:50:15.000Z", + "finished" : "2014-05-30T07:50:50.000Z", + "links" : { + "self" : "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/FINISHED_PROCESS_ID" + } + }, + "lastSuccessfulProcess" : { + "status" : { + "code" : "SYNCHRONIZED", + "detail" : null, + "description" : null + }, + "started" : "2014-04-30T07:50:15.000Z", + "finished" : "2014-04-30T07:50:50.000Z", + "links" : { + "self" : "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/SUCCESSFUL_PROCESS_ID" + } + }, + "runningProcess" : { + "status" : { + "code" : "SCHEDULED", + "detail" : "", + "description" : "" + }, + "started" : "2014-04-30T07:50:15.000Z", + "finished" : null, + "links" : { + "self" : "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS_ID" + } + }, + "links" : { + "self" : "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration", + "processes" : "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes", + "configuration" : "/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/settings" + }, + "ui" : { } + } +} From a4e56d2cd841761f337f6a4c270fc6d795e1135b Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 18 Nov 2015 10:36:47 +0100 Subject: [PATCH 002/934] [maven-release-plugin] prepare release gooddata-java-0.23.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6a03c61d3..a55cfaf06 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ cz.geek gooddata-java - 0.22.2-SNAPSHOT + 0.23.0 ${project.artifactId} GoodData Java SDK From e1a11d374cab9cdf768d65bbefc71e1b155d34af Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 18 Nov 2015 10:36:49 +0100 Subject: [PATCH 003/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a55cfaf06..4bf7c73df 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ cz.geek gooddata-java - 0.23.0 + 0.23.1-SNAPSHOT ${project.artifactId} GoodData Java SDK From 11f850dae1906cc373b2893cff853d7258207ea8 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 18 Nov 2015 10:46:10 +0100 Subject: [PATCH 004/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f70c986a..ae36e559d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from cz.geek gooddata-java - 0.21.0 + 0.23.0 ``` From f98c6e0ae3f5e5303829df0625e35dc04cb6e164 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 18 Nov 2015 16:48:34 +0100 Subject: [PATCH 005/934] upgrade gooddata http client to fix thread and logout issues --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4bf7c73df..a775c05ca 100644 --- a/pom.xml +++ b/pom.xml @@ -237,7 +237,7 @@ com.gooddata gooddata-http-client - 0.8.3 + 0.9.2 commons-lang From 4c162f838a0953d0ac2d868b9c1874d5161b55ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C5=A0tumpf?= Date: Thu, 12 Nov 2015 12:26:29 +0100 Subject: [PATCH 006/934] migrate to Jackson 2.5.4 --- README.md | 2 +- pom.xml | 19 ++++++------ .../java/com/gooddata/AbstractService.java | 2 +- src/main/java/com/gooddata/GoodData.java | 29 +------------------ .../java/com/gooddata/account/Account.java | 14 ++++----- .../collections/PageableListDeserializer.java | 22 +++++++------- .../collections/PageableListSerializer.java | 15 +++++++--- .../java/com/gooddata/collections/Paging.java | 18 ++++++------ .../com/gooddata/connector/Integration.java | 14 ++++----- .../connector/IntegrationProcessStatus.java | 12 ++++---- .../gooddata/connector/ProcessExecution.java | 10 +++---- .../com/gooddata/connector/ProcessStatus.java | 12 ++++---- .../java/com/gooddata/connector/Settings.java | 10 +++---- .../java/com/gooddata/connector/Status.java | 8 ++--- .../gooddata/connector/Zendesk4Settings.java | 4 +-- .../dataload/processes/DataloadProcess.java | 14 ++++----- .../dataload/processes/DataloadProcesses.java | 10 +++---- .../dataload/processes/ProcessExecution.java | 8 ++--- .../processes/ProcessExecutionDetail.java | 16 +++++----- .../processes/ProcessExecutionTask.java | 10 +++---- .../gooddata/dataload/processes/Schedule.java | 18 +++++++----- .../dataload/processes/Schedules.java | 8 ++--- .../java/com/gooddata/dataset/Dataset.java | 6 ++-- .../com/gooddata/dataset/DatasetManifest.java | 16 +++++----- .../gooddata/dataset/DatasetManifests.java | 4 +-- .../java/com/gooddata/dataset/Datasets.java | 12 ++++---- .../java/com/gooddata/dataset/EtlMode.java | 12 ++++---- .../com/gooddata/dataset/EtlModeType.java | 2 +- .../java/com/gooddata/dataset/FailPart.java | 4 +-- .../java/com/gooddata/dataset/FailStatus.java | 12 ++++---- .../java/com/gooddata/dataset/LookupMode.java | 2 +- src/main/java/com/gooddata/dataset/Pull.java | 4 +-- .../java/com/gooddata/dataset/PullTask.java | 10 +++---- .../com/gooddata/dataset/PullTaskStatus.java | 6 ++-- .../java/com/gooddata/dataset/TaskState.java | 12 ++++---- .../java/com/gooddata/gdc/AbstractMaql.java | 10 +++---- src/main/java/com/gooddata/gdc/AsyncTask.java | 14 ++++----- .../java/com/gooddata/gdc/ErrorStructure.java | 8 ++--- .../java/com/gooddata/gdc/FeatureFlags.java | 8 ++--- src/main/java/com/gooddata/gdc/Gdc.java | 14 ++++----- src/main/java/com/gooddata/gdc/GdcError.java | 12 ++++---- .../java/com/gooddata/gdc/LinkEntries.java | 6 ++-- .../java/com/gooddata/gdc/TaskStatus.java | 12 ++++---- .../java/com/gooddata/gdc/UriResponse.java | 8 ++--- .../java/com/gooddata/md/AbstractObj.java | 4 +-- src/main/java/com/gooddata/md/Attachment.java | 12 ++++---- src/main/java/com/gooddata/md/Attribute.java | 10 +++---- .../com/gooddata/md/AttributeDisplayForm.java | 14 ++++----- .../com/gooddata/md/AttributeElement.java | 8 ++--- .../com/gooddata/md/AttributeElements.java | 12 ++++---- .../com/gooddata/md/DashboardAttachment.java | 4 +-- src/main/java/com/gooddata/md/Dataset.java | 14 ++++----- src/main/java/com/gooddata/md/Dimension.java | 12 ++++---- .../java/com/gooddata/md/DisplayForm.java | 10 +++---- src/main/java/com/gooddata/md/Entry.java | 10 +++---- src/main/java/com/gooddata/md/Expression.java | 8 ++--- src/main/java/com/gooddata/md/Fact.java | 12 ++++---- .../com/gooddata/md/IdentifierAndUri.java | 4 +-- .../java/com/gooddata/md/IdentifierToUri.java | 4 +-- .../com/gooddata/md/IdentifiersAndUris.java | 4 +-- src/main/java/com/gooddata/md/InUseMany.java | 14 ++++----- src/main/java/com/gooddata/md/Key.java | 8 ++--- src/main/java/com/gooddata/md/MaqlAst.java | 6 ++-- src/main/java/com/gooddata/md/Meta.java | 12 ++++---- src/main/java/com/gooddata/md/Metric.java | 12 ++++---- .../java/com/gooddata/md/NestedAttribute.java | 14 ++++----- src/main/java/com/gooddata/md/Query.java | 12 ++++---- .../com/gooddata/md/ReportAttachment.java | 4 +-- .../java/com/gooddata/md/ScheduledMail.java | 12 ++++---- .../com/gooddata/md/ScheduledMailWhen.java | 8 ++--- src/main/java/com/gooddata/md/UseMany.java | 8 ++--- .../java/com/gooddata/md/UseManyEntries.java | 8 ++--- .../gooddata/md/report/AttributeInGrid.java | 12 ++++---- .../java/com/gooddata/md/report/Filter.java | 8 ++--- .../java/com/gooddata/md/report/Grid.java | 8 ++--- .../com/gooddata/md/report/GridElement.java | 8 ++--- .../report/GridReportDefinitionContent.java | 6 ++-- .../OneNumberReportDefinitionContent.java | 6 ++-- .../java/com/gooddata/md/report/Report.java | 14 ++++----- .../gooddata/md/report/ReportDefinition.java | 12 ++++---- .../md/report/ReportDefinitionContent.java | 8 ++--- .../java/com/gooddata/model/DiffRequest.java | 12 ++++---- .../java/com/gooddata/model/MaqlDdlLinks.java | 8 ++--- .../java/com/gooddata/model/ModelDiff.java | 10 +++---- .../java/com/gooddata/project/Project.java | 18 ++++++------ .../gooddata/project/ProjectFeatureFlag.java | 14 ++++----- .../gooddata/project/ProjectFeatureFlags.java | 10 +++---- .../com/gooddata/project/ProjectTemplate.java | 8 ++--- .../gooddata/project/ProjectTemplates.java | 8 ++--- .../project/ProjectValidationResult.java | 6 ++-- ...ProjectValidationResultGdcTimeElParam.java | 8 ++--- .../project/ProjectValidationResultItem.java | 6 ++-- .../ProjectValidationResultObjectParam.java | 8 ++--- .../project/ProjectValidationResultParam.java | 6 ++-- .../ProjectValidationResultSliElParam.java | 8 ++--- .../ProjectValidationResultStringParam.java | 6 ++-- .../project/ProjectValidationResults.java | 12 ++++---- .../project/ProjectValidationType.java | 4 +-- .../gooddata/project/ProjectValidations.java | 8 ++--- .../java/com/gooddata/project/Projects.java | 8 ++--- src/main/java/com/gooddata/project/Role.java | 16 +++++----- src/main/java/com/gooddata/project/Roles.java | 10 +++---- src/main/java/com/gooddata/project/User.java | 14 ++++----- src/main/java/com/gooddata/project/Users.java | 10 +++---- .../gooddata/report/ExecuteDefinition.java | 2 +- .../com/gooddata/report/ExecuteReport.java | 2 +- .../com/gooddata/report/ReportRequest.java | 8 ++--- .../com/gooddata/report/ReportService.java | 4 +-- .../util/BooleanIntegerDeserializer.java | 12 ++++---- .../util/BooleanIntegerSerializer.java | 6 ++-- .../util/BooleanStringDeserializer.java | 12 ++++---- .../util/BooleanStringSerializer.java | 6 ++-- .../com/gooddata/util/GDDateDeserializer.java | 10 +++---- .../com/gooddata/util/GDDateSerializer.java | 6 ++-- .../gooddata/util/GDDateTimeDeserializer.java | 10 +++---- .../gooddata/util/GDDateTimeSerializer.java | 6 ++-- .../util/ISODateTimeDeserializer.java | 10 +++---- .../gooddata/util/ISODateTimeSerializer.java | 6 ++-- .../com/gooddata/warehouse/Warehouse.java | 19 ++++++------ .../com/gooddata/warehouse/WarehouseTask.java | 10 +++---- .../com/gooddata/warehouse/WarehouseUser.java | 16 +++++----- .../gooddata/warehouse/WarehouseUsers.java | 10 +++---- .../com/gooddata/warehouse/Warehouses.java | 10 +++---- .../java/com/gooddata/AbstractGoodDataIT.java | 2 +- .../gooddata/GoodDataRestExceptionTest.java | 2 +- src/test/java/com/gooddata/JsonMatchers.java | 2 +- .../com/gooddata/account/AccountTest.java | 2 +- .../com/gooddata/collections/PagingTest.java | 2 +- .../IntegrationProcessStatusTest.java | 2 +- .../gooddata/connector/IntegrationTest.java | 2 +- .../gooddata/connector/ProcessStatusTest.java | 2 +- .../connector/Zendesk4SettingsTest.java | 2 +- .../processes/DataloadProcessTest.java | 2 +- .../processes/DataloadProcessesTest.java | 2 +- .../processes/ProcessExecutionDetailTest.java | 2 +- .../processes/ProcessExecutionTaskTest.java | 2 +- .../processes/ProcessExecutionTest.java | 2 +- .../dataload/processes/ProcessServiceIT.java | 2 +- .../dataload/processes/ScheduleTest.java | 2 +- .../dataload/processes/SchedulesTest.java | 2 +- .../gooddata/dataset/DatasetManifestTest.java | 2 +- .../com/gooddata/dataset/DatasetsTest.java | 2 +- .../com/gooddata/dataset/FailStatusTest.java | 2 +- .../com/gooddata/dataset/MaqlDmlTest.java | 2 +- .../gooddata/dataset/PullTaskStatusTest.java | 2 +- .../com/gooddata/dataset/PullTaskTest.java | 2 +- .../com/gooddata/dataset/TaskStateTest.java | 2 +- .../java/com/gooddata/gdc/AsyncTaskTest.java | 2 +- .../com/gooddata/gdc/ErrorStructureTest.java | 2 +- .../java/com/gooddata/gdc/GdcErrorTest.java | 2 +- src/test/java/com/gooddata/gdc/GdcTest.java | 2 +- .../com/gooddata/gdc/LinkEntriesTest.java | 2 +- .../java/com/gooddata/gdc/TaskStatusTest.java | 2 +- .../com/gooddata/gdc/UriResponseTest.java | 2 +- .../gooddata/md/AttributeDisplayFormTest.java | 2 +- .../com/gooddata/md/AttributeElementTest.java | 2 +- .../gooddata/md/AttributeElementsTest.java | 2 +- .../java/com/gooddata/md/AttributeTest.java | 2 +- .../java/com/gooddata/md/DatasetTest.java | 2 +- .../java/com/gooddata/md/DimensionTest.java | 2 +- .../java/com/gooddata/md/DisplayFormTest.java | 2 +- src/test/java/com/gooddata/md/EntryTest.java | 2 +- .../java/com/gooddata/md/ExpressionTest.java | 2 +- src/test/java/com/gooddata/md/FactTest.java | 2 +- src/test/java/com/gooddata/md/KeyTest.java | 2 +- src/test/java/com/gooddata/md/MetaTest.java | 2 +- src/test/java/com/gooddata/md/MetricTest.java | 2 +- .../com/gooddata/md/NestedAttributeTest.java | 2 +- src/test/java/com/gooddata/md/ObjTest.java | 4 +-- src/test/java/com/gooddata/md/QueryTest.java | 2 +- .../com/gooddata/md/ScheduledMailTest.java | 2 +- .../md/report/AttributeInGridTest.java | 2 +- .../gooddata/md/report/GridElementTest.java | 2 +- .../GridReportDefinitionContentTest.java | 2 +- .../java/com/gooddata/md/report/GridTest.java | 2 +- .../OneNumberReportDefinitionContentTest.java | 2 +- .../report/ReportDefinitionContentTest.java | 2 +- .../md/report/ReportDefinitionTest.java | 2 +- .../com/gooddata/md/report/ReportTest.java | 2 +- .../com/gooddata/model/DiffRequestTest.java | 2 +- .../com/gooddata/model/MaqlDdlLinksTest.java | 2 +- .../java/com/gooddata/model/MaqlDdlTest.java | 2 +- .../com/gooddata/model/ModelDiffTest.java | 2 +- .../gooddata/project/ProjectServiceIT.java | 2 +- .../gooddata/project/ProjectTemplateTest.java | 2 +- .../project/ProjectTemplatesTest.java | 2 +- .../com/gooddata/project/ProjectTest.java | 12 ++++---- .../ProjectValidationResultItemTest.java | 2 +- .../ProjectValidationResultParamTest.java | 4 +-- .../project/ProjectValidationResultTest.java | 2 +- .../project/ProjectValidationResultsTest.java | 2 +- .../project/ProjectValidationTypeTest.java | 2 +- .../project/ProjectValidationsTest.java | 2 +- .../java/com/gooddata/project/RoleTest.java | 2 +- .../java/com/gooddata/project/RolesTest.java | 2 +- .../java/com/gooddata/project/UserTest.java | 2 +- .../java/com/gooddata/project/UsersTest.java | 2 +- .../gooddata/util/BooleanIntegerClass.java | 8 ++--- .../util/BooleanIntegerDeserializerTest.java | 10 +++---- .../util/BooleanIntegerSerializerTest.java | 8 ++--- .../com/gooddata/util/BooleanStringClass.java | 8 ++--- .../util/BooleanStringDeserializerTest.java | 10 +++---- .../util/BooleanStringSerializerTest.java | 8 ++--- .../java/com/gooddata/util/GDDateClass.java | 8 ++--- .../gooddata/util/GDDateDeserializerTest.java | 6 ++-- .../gooddata/util/GDDateSerializerTest.java | 6 ++-- .../com/gooddata/util/GDDateTimeClass.java | 8 ++--- .../util/GDDateTimeDeserializerTest.java | 6 ++-- .../util/GDDateTimeSerializerTest.java | 6 ++-- .../java/com/gooddata/util/ISODateClass.java | 8 ++--- .../util/ISODateTimeDeserializerTest.java | 6 ++-- .../util/ISODateTimeSerializerTest.java | 6 ++-- .../java/com/gooddata/util/ResourceUtils.java | 2 +- .../gooddata/warehouse/WarehouseTaskTest.java | 2 +- .../com/gooddata/warehouse/WarehouseTest.java | 2 +- .../gooddata/warehouse/WarehouseUserTest.java | 2 +- 216 files changed, 730 insertions(+), 746 deletions(-) diff --git a/README.md b/README.md index ae36e559d..121341c36 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The *GoodData Java SDK* uses: * the [GoodData HTTP client](https://github.com/gooddata/gooddata-http-client) version 0.8.2 or later * the *Apache HTTP Client* version 4.3 or later (for white-labeled domains at least version 4.3.2 is required) * the *Spring Framework* version 3.x -* the *Jackson JSON Processor* version 1.9 +* the *Jackson JSON Processor* version 2.5.4 (*GoodData Java SDK* version 0.x requires version 1.9) * the *Java Development Kit (JDK)* version 7 or later ## License diff --git a/pom.xml b/pom.xml index 4bf7c73df..f8b590ad5 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ UTF-8 UTF-8 4.3.3 - 1.9.12 + 2.5.4 3.2.13.RELEASE 1.1.1 1.5.3 @@ -279,20 +279,19 @@ - org.codehaus.jackson - jackson-core-asl - ${jackson-asl.version} + com.fasterxml.jackson.core + jackson-core + ${jackson.version} - org.codehaus.jackson - jackson-mapper-asl - ${jackson-asl.version} + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} com.fasterxml.jackson.core - jackson-databind - 2.5.2 - test + jackson-annotations + ${jackson.version} com.github.lookfirst diff --git a/src/main/java/com/gooddata/AbstractService.java b/src/main/java/com/gooddata/AbstractService.java index 41c043b1c..a949989ea 100644 --- a/src/main/java/com/gooddata/AbstractService.java +++ b/src/main/java/com/gooddata/AbstractService.java @@ -7,7 +7,7 @@ import static java.lang.String.format; import static org.springframework.http.HttpMethod.GET; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpRequest; diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 91ce4b44e..b135b13ed 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -27,17 +27,9 @@ import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.http.converter.ByteArrayHttpMessageConverter; -import org.springframework.http.converter.FormHttpMessageConverter; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.ResourceHttpMessageConverter; -import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; import org.springframework.web.client.RestTemplate; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; import static com.gooddata.util.Validate.notEmpty; import static java.util.Collections.singletonMap; @@ -199,26 +191,7 @@ private RestTemplate createRestTemplate(String login, String password, String ho restTemplate.setInterceptors(Arrays.asList( new HeaderSettingRequestInterceptor(singletonMap("Accept", getAcceptHeaderValue())))); - // avoid jackson2 auto-detection and ensure jackson1 converter is present - final List> partConverters = new ArrayList<>(); - partConverters.add(new ByteArrayHttpMessageConverter()); - final StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); - stringHttpMessageConverter.setWriteAcceptCharset(false); - partConverters.add(stringHttpMessageConverter); - partConverters.add(new ResourceHttpMessageConverter()); - partConverters.add(new MappingJacksonHttpMessageConverter()); - final FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter(); - formHttpMessageConverter.setPartConverters(partConverters); - - final List> messageConverters = new ArrayList<>(); - messageConverters.add(new ByteArrayHttpMessageConverter()); - messageConverters.add(new StringHttpMessageConverter()); - messageConverters.add(new ResourceHttpMessageConverter()); - messageConverters.add(formHttpMessageConverter); - messageConverters.add(new MappingJacksonHttpMessageConverter()); - restTemplate.setMessageConverters(messageConverters); - - restTemplate.setErrorHandler(new ResponseErrorHandler(messageConverters)); + restTemplate.setErrorHandler(new ResponseErrorHandler(restTemplate.getMessageConverters())); return restTemplate; } diff --git a/src/main/java/com/gooddata/account/Account.java b/src/main/java/com/gooddata/account/Account.java index 3f3a82916..50d311dbe 100644 --- a/src/main/java/com/gooddata/account/Account.java +++ b/src/main/java/com/gooddata/account/Account.java @@ -3,13 +3,13 @@ */ package com.gooddata.account; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; /** diff --git a/src/main/java/com/gooddata/collections/PageableListDeserializer.java b/src/main/java/com/gooddata/collections/PageableListDeserializer.java index dba36960e..cbb611a3c 100644 --- a/src/main/java/com/gooddata/collections/PageableListDeserializer.java +++ b/src/main/java/com/gooddata/collections/PageableListDeserializer.java @@ -1,12 +1,13 @@ package com.gooddata.collections; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.JsonProcessingException; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.jsontype.TypeDeserializer; import java.io.IOException; import java.util.ArrayList; @@ -49,12 +50,12 @@ public T deserialize(final JsonParser jp, final DeserializationContext context) final ObjectMapper objectMapper = (ObjectMapper) jp.getCodec(); final JsonNode pagingNode = root.get(PAGING_NODE); - final Paging paging = pagingNode == null ? null : objectMapper.readValue(pagingNode, Paging.class); + final Paging paging = pagingNode == null ? null : objectMapper.convertValue(pagingNode, Paging.class); final JsonNode linksNode = root.get(LINKS_NODE); final Map links; if (linksNode != null) { - links = objectMapper.readValue(linksNode, LINKS_TYPE); + links = objectMapper.convertValue(linksNode, LINKS_TYPE); } else { links = null; } @@ -66,9 +67,10 @@ public T deserialize(final JsonParser jp, final DeserializationContext context) } else { items = new ArrayList<>(itemsNode.size()); for (JsonNode item : itemsNode) { - items.add(objectMapper.readValue(item, elementType)); + items.add(objectMapper.convertValue(item, elementType)); } } return createList(items, paging, links); } + } diff --git a/src/main/java/com/gooddata/collections/PageableListSerializer.java b/src/main/java/com/gooddata/collections/PageableListSerializer.java index e459e220f..e9dffd73b 100644 --- a/src/main/java/com/gooddata/collections/PageableListSerializer.java +++ b/src/main/java/com/gooddata/collections/PageableListSerializer.java @@ -3,10 +3,11 @@ */ package com.gooddata.collections; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.ObjectCodec; -import org.codehaus.jackson.map.JsonSerializer; -import org.codehaus.jackson.map.SerializerProvider; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.jsontype.TypeSerializer; import java.io.IOException; @@ -49,6 +50,12 @@ public void serialize(final PageableList value, final JsonGenerator jgen, fin jgen.writeEndObject(); } + @Override + public void serializeWithType(final PageableList value, final JsonGenerator gen, final SerializerProvider provider, + final TypeSerializer typeSer) throws IOException { + serialize(value, gen, provider); + } + private void writeObjectOrEmpty(final JsonGenerator jgen, final ObjectCodec codec, final String name, final Object object) throws IOException { jgen.writeFieldName(name); if (object != null) { diff --git a/src/main/java/com/gooddata/collections/Paging.java b/src/main/java/com/gooddata/collections/Paging.java index 782fb21f2..1105be3da 100644 --- a/src/main/java/com/gooddata/collections/Paging.java +++ b/src/main/java/com/gooddata/collections/Paging.java @@ -1,14 +1,14 @@ package com.gooddata.collections; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeInfo.As; -import org.codehaus.jackson.annotate.JsonTypeInfo.Id; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Description of the current collection page. diff --git a/src/main/java/com/gooddata/connector/Integration.java b/src/main/java/com/gooddata/connector/Integration.java index f965b97eb..b7e85d3d0 100644 --- a/src/main/java/com/gooddata/connector/Integration.java +++ b/src/main/java/com/gooddata/connector/Integration.java @@ -3,13 +3,13 @@ */ package com.gooddata.connector; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java index 4826a467e..c5d914d9d 100644 --- a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java +++ b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java @@ -5,12 +5,12 @@ import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import org.springframework.web.util.UriTemplate; diff --git a/src/main/java/com/gooddata/connector/ProcessExecution.java b/src/main/java/com/gooddata/connector/ProcessExecution.java index df17e4557..89e044223 100644 --- a/src/main/java/com/gooddata/connector/ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/ProcessExecution.java @@ -3,11 +3,11 @@ */ package com.gooddata.connector; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Connector process execution (i.e. definition for single ETL run). Serialization only. diff --git a/src/main/java/com/gooddata/connector/ProcessStatus.java b/src/main/java/com/gooddata/connector/ProcessStatus.java index c8f8885b7..7f2ece5a4 100644 --- a/src/main/java/com/gooddata/connector/ProcessStatus.java +++ b/src/main/java/com/gooddata/connector/ProcessStatus.java @@ -4,12 +4,12 @@ package com.gooddata.connector; import com.gooddata.util.ISODateTimeDeserializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.joda.time.DateTime; import java.util.Map; diff --git a/src/main/java/com/gooddata/connector/Settings.java b/src/main/java/com/gooddata/connector/Settings.java index 932086637..45c3e2ca1 100644 --- a/src/main/java/com/gooddata/connector/Settings.java +++ b/src/main/java/com/gooddata/connector/Settings.java @@ -3,11 +3,11 @@ */ package com.gooddata.connector; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Connector integration settings. diff --git a/src/main/java/com/gooddata/connector/Status.java b/src/main/java/com/gooddata/connector/Status.java index 4586ac9f6..f6d6f5aaf 100644 --- a/src/main/java/com/gooddata/connector/Status.java +++ b/src/main/java/com/gooddata/connector/Status.java @@ -1,9 +1,9 @@ package com.gooddata.connector; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import static com.gooddata.connector.Status.Code.ERROR; import static com.gooddata.connector.Status.Code.SYNCHRONIZED; diff --git a/src/main/java/com/gooddata/connector/Zendesk4Settings.java b/src/main/java/com/gooddata/connector/Zendesk4Settings.java index 02336dae5..cd3b33a40 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4Settings.java +++ b/src/main/java/com/gooddata/connector/Zendesk4Settings.java @@ -3,8 +3,8 @@ */ package com.gooddata.connector; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.connector.ConnectorType.ZENDESK4; diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index 314e60237..8954a3eaf 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -3,13 +3,13 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.util.CollectionUtils; import org.springframework.web.util.UriTemplate; diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java index c44790be8..13dca611c 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java @@ -4,11 +4,11 @@ package com.gooddata.dataload.processes; import com.gooddata.account.Account; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import org.springframework.web.util.UriTemplate; import java.util.Collection; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java index 852aec405..16111e034 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java @@ -3,10 +3,10 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java index b199e8c8c..3ad500aba 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java @@ -6,14 +6,14 @@ import com.gooddata.gdc.ErrorStructure; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import java.net.URI; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java index 150347bdb..d51d3e758 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java @@ -1,10 +1,10 @@ package com.gooddata.dataload.processes; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.Map; diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index aeaf2ccb4..b50ae59f0 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -1,14 +1,14 @@ package com.gooddata.dataload.processes; import com.gooddata.util.ISODateTimeDeserializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.springframework.web.util.UriTemplate; @@ -93,6 +93,7 @@ public void setState(final String state) { this.state = notEmpty(state, "state"); } + @JsonIgnore public void setState(final ScheduleState state) { this.state = notNull(state, "state").name(); } @@ -154,6 +155,7 @@ public void setTimezone(final String timezone) { this.timezone = timezone; } + @JsonIgnore public void setTimezone(final DateTimeZone timezone) { this.timezone = notNull(timezone, "timezone").getID(); } diff --git a/src/main/java/com/gooddata/dataload/processes/Schedules.java b/src/main/java/com/gooddata/dataload/processes/Schedules.java index 25e283cbd..ade4d3af9 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedules.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedules.java @@ -5,10 +5,10 @@ import com.gooddata.collections.PageableList; import com.gooddata.collections.Paging; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.springframework.web.util.UriTemplate; import java.util.List; diff --git a/src/main/java/com/gooddata/dataset/Dataset.java b/src/main/java/com/gooddata/dataset/Dataset.java index 939239d6c..daab0dd44 100644 --- a/src/main/java/com/gooddata/dataset/Dataset.java +++ b/src/main/java/com/gooddata/dataset/Dataset.java @@ -1,8 +1,8 @@ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; /** * Dataset diff --git a/src/main/java/com/gooddata/dataset/DatasetManifest.java b/src/main/java/com/gooddata/dataset/DatasetManifest.java index e8cca9d2a..bd550678b 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifest.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifest.java @@ -5,14 +5,14 @@ import com.gooddata.util.BooleanIntegerDeserializer; import com.gooddata.util.BooleanIntegerSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.io.InputStream; import java.util.List; diff --git a/src/main/java/com/gooddata/dataset/DatasetManifests.java b/src/main/java/com/gooddata/dataset/DatasetManifests.java index eec6baf53..267cfc816 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifests.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifests.java @@ -4,8 +4,8 @@ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Collection; diff --git a/src/main/java/com/gooddata/dataset/Datasets.java b/src/main/java/com/gooddata/dataset/Datasets.java index ead3116be..33bd79151 100644 --- a/src/main/java/com/gooddata/dataset/Datasets.java +++ b/src/main/java/com/gooddata/dataset/Datasets.java @@ -3,12 +3,12 @@ */ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.List; diff --git a/src/main/java/com/gooddata/dataset/EtlMode.java b/src/main/java/com/gooddata/dataset/EtlMode.java index c8ac53c6c..0796c6b31 100644 --- a/src/main/java/com/gooddata/dataset/EtlMode.java +++ b/src/main/java/com/gooddata/dataset/EtlMode.java @@ -1,11 +1,11 @@ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; @JsonTypeName("etlMode") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) diff --git a/src/main/java/com/gooddata/dataset/EtlModeType.java b/src/main/java/com/gooddata/dataset/EtlModeType.java index f4803bd6f..f6f27d9d0 100644 --- a/src/main/java/com/gooddata/dataset/EtlModeType.java +++ b/src/main/java/com/gooddata/dataset/EtlModeType.java @@ -1,6 +1,6 @@ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonValue; +import com.fasterxml.jackson.annotation.JsonValue; /** * Enum containing ETL mode types. diff --git a/src/main/java/com/gooddata/dataset/FailPart.java b/src/main/java/com/gooddata/dataset/FailPart.java index cb629f2db..b5fb688b5 100644 --- a/src/main/java/com/gooddata/dataset/FailPart.java +++ b/src/main/java/com/gooddata/dataset/FailPart.java @@ -1,8 +1,8 @@ package com.gooddata.dataset; import com.gooddata.gdc.ErrorStructure; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; /** * Describe status of uploaded parts diff --git a/src/main/java/com/gooddata/dataset/FailStatus.java b/src/main/java/com/gooddata/dataset/FailStatus.java index 04ce34f93..9f503f768 100644 --- a/src/main/java/com/gooddata/dataset/FailStatus.java +++ b/src/main/java/com/gooddata/dataset/FailStatus.java @@ -3,12 +3,12 @@ import com.gooddata.gdc.ErrorStructure; import com.gooddata.util.GDDateTimeDeserializer; import com.gooddata.util.GDDateTimeSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import java.util.ArrayList; diff --git a/src/main/java/com/gooddata/dataset/LookupMode.java b/src/main/java/com/gooddata/dataset/LookupMode.java index f5b88a8aa..b3753f2e8 100644 --- a/src/main/java/com/gooddata/dataset/LookupMode.java +++ b/src/main/java/com/gooddata/dataset/LookupMode.java @@ -1,6 +1,6 @@ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonValue; +import com.fasterxml.jackson.annotation.JsonValue; /** * Enum containing ETL lookup modes. diff --git a/src/main/java/com/gooddata/dataset/Pull.java b/src/main/java/com/gooddata/dataset/Pull.java index 7e7a8206c..50449a96e 100644 --- a/src/main/java/com/gooddata/dataset/Pull.java +++ b/src/main/java/com/gooddata/dataset/Pull.java @@ -3,8 +3,8 @@ */ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * ETL Pull DTO (for internal use). diff --git a/src/main/java/com/gooddata/dataset/PullTask.java b/src/main/java/com/gooddata/dataset/PullTask.java index 54ffb0806..f11bb11c3 100644 --- a/src/main/java/com/gooddata/dataset/PullTask.java +++ b/src/main/java/com/gooddata/dataset/PullTask.java @@ -3,11 +3,11 @@ */ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; /** * ETL Pull task (for internal use). diff --git a/src/main/java/com/gooddata/dataset/PullTaskStatus.java b/src/main/java/com/gooddata/dataset/PullTaskStatus.java index f973dc3a3..bafcd69b4 100644 --- a/src/main/java/com/gooddata/dataset/PullTaskStatus.java +++ b/src/main/java/com/gooddata/dataset/PullTaskStatus.java @@ -3,9 +3,9 @@ */ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; /** * ETL Pull task status (for internal use). diff --git a/src/main/java/com/gooddata/dataset/TaskState.java b/src/main/java/com/gooddata/dataset/TaskState.java index 77721b942..12b8e5a99 100644 --- a/src/main/java/com/gooddata/dataset/TaskState.java +++ b/src/main/java/com/gooddata/dataset/TaskState.java @@ -4,12 +4,12 @@ package com.gooddata.dataset; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * ETL Pull task status (for internal use). diff --git a/src/main/java/com/gooddata/gdc/AbstractMaql.java b/src/main/java/com/gooddata/gdc/AbstractMaql.java index 80ff3e8da..9da7746a8 100644 --- a/src/main/java/com/gooddata/gdc/AbstractMaql.java +++ b/src/main/java/com/gooddata/gdc/AbstractMaql.java @@ -3,11 +3,11 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Abstract MAQL statement. diff --git a/src/main/java/com/gooddata/gdc/AsyncTask.java b/src/main/java/com/gooddata/gdc/AsyncTask.java index 137ddcdba..f5718edbd 100644 --- a/src/main/java/com/gooddata/gdc/AsyncTask.java +++ b/src/main/java/com/gooddata/gdc/AsyncTask.java @@ -3,13 +3,13 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Asynchronous task containing link for polling. diff --git a/src/main/java/com/gooddata/gdc/ErrorStructure.java b/src/main/java/com/gooddata/gdc/ErrorStructure.java index 4049a37bb..1d573b883 100644 --- a/src/main/java/com/gooddata/gdc/ErrorStructure.java +++ b/src/main/java/com/gooddata/gdc/ErrorStructure.java @@ -1,9 +1,9 @@ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import static com.gooddata.util.Validate.notNull; import static java.util.Arrays.copyOf; diff --git a/src/main/java/com/gooddata/gdc/FeatureFlags.java b/src/main/java/com/gooddata/gdc/FeatureFlags.java index 112aaac0a..088a1d1dd 100644 --- a/src/main/java/com/gooddata/gdc/FeatureFlags.java +++ b/src/main/java/com/gooddata/gdc/FeatureFlags.java @@ -3,10 +3,10 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonAnySetter; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import org.springframework.web.util.UriTemplate; import java.util.ArrayList; diff --git a/src/main/java/com/gooddata/gdc/Gdc.java b/src/main/java/com/gooddata/gdc/Gdc.java index 9489a0ff5..6b0ba4811 100644 --- a/src/main/java/com/gooddata/gdc/Gdc.java +++ b/src/main/java/com/gooddata/gdc/Gdc.java @@ -3,13 +3,13 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.List; diff --git a/src/main/java/com/gooddata/gdc/GdcError.java b/src/main/java/com/gooddata/gdc/GdcError.java index 5f17b9391..0bcba98c9 100644 --- a/src/main/java/com/gooddata/gdc/GdcError.java +++ b/src/main/java/com/gooddata/gdc/GdcError.java @@ -3,12 +3,12 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * GoodData REST API error structure. diff --git a/src/main/java/com/gooddata/gdc/LinkEntries.java b/src/main/java/com/gooddata/gdc/LinkEntries.java index 38dd4ab52..1e6d96b96 100644 --- a/src/main/java/com/gooddata/gdc/LinkEntries.java +++ b/src/main/java/com/gooddata/gdc/LinkEntries.java @@ -3,9 +3,9 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; diff --git a/src/main/java/com/gooddata/gdc/TaskStatus.java b/src/main/java/com/gooddata/gdc/TaskStatus.java index 3b0fb8942..8f5d08d11 100644 --- a/src/main/java/com/gooddata/gdc/TaskStatus.java +++ b/src/main/java/com/gooddata/gdc/TaskStatus.java @@ -1,11 +1,11 @@ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/com/gooddata/gdc/UriResponse.java b/src/main/java/com/gooddata/gdc/UriResponse.java index a7d17f8f7..439ed40f2 100644 --- a/src/main/java/com/gooddata/gdc/UriResponse.java +++ b/src/main/java/com/gooddata/gdc/UriResponse.java @@ -3,10 +3,10 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Response containing URI diff --git a/src/main/java/com/gooddata/md/AbstractObj.java b/src/main/java/com/gooddata/md/AbstractObj.java index 5564e9366..b0847d8dd 100644 --- a/src/main/java/com/gooddata/md/AbstractObj.java +++ b/src/main/java/com/gooddata/md/AbstractObj.java @@ -3,8 +3,8 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import org.joda.time.DateTime; import static com.gooddata.util.Validate.noNullElements; diff --git a/src/main/java/com/gooddata/md/Attachment.java b/src/main/java/com/gooddata/md/Attachment.java index 71338bf92..5e4f9e67b 100644 --- a/src/main/java/com/gooddata/md/Attachment.java +++ b/src/main/java/com/gooddata/md/Attachment.java @@ -3,12 +3,12 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonSubTypes; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Common ancestor to {@link ScheduledMail} attachments. diff --git a/src/main/java/com/gooddata/md/Attribute.java b/src/main/java/com/gooddata/md/Attribute.java index a04cf860f..f4a24dfe5 100644 --- a/src/main/java/com/gooddata/md/Attribute.java +++ b/src/main/java/com/gooddata/md/Attribute.java @@ -5,11 +5,11 @@ import static java.util.Arrays.asList; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collections; diff --git a/src/main/java/com/gooddata/md/AttributeDisplayForm.java b/src/main/java/com/gooddata/md/AttributeDisplayForm.java index 5ee597dc1..64b477111 100644 --- a/src/main/java/com/gooddata/md/AttributeDisplayForm.java +++ b/src/main/java/com/gooddata/md/AttributeDisplayForm.java @@ -2,13 +2,13 @@ import com.gooddata.util.BooleanIntegerDeserializer; import com.gooddata.util.BooleanIntegerSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Display form of attribute diff --git a/src/main/java/com/gooddata/md/AttributeElement.java b/src/main/java/com/gooddata/md/AttributeElement.java index 85476ae61..6268fcafc 100644 --- a/src/main/java/com/gooddata/md/AttributeElement.java +++ b/src/main/java/com/gooddata/md/AttributeElement.java @@ -4,10 +4,10 @@ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Represent one element of attribute values diff --git a/src/main/java/com/gooddata/md/AttributeElements.java b/src/main/java/com/gooddata/md/AttributeElements.java index de89ed1ed..02f464ca1 100644 --- a/src/main/java/com/gooddata/md/AttributeElements.java +++ b/src/main/java/com/gooddata/md/AttributeElements.java @@ -7,12 +7,12 @@ import static org.apache.commons.lang.Validate.notNull; import org.apache.commons.lang.Validate; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import java.util.List; diff --git a/src/main/java/com/gooddata/md/DashboardAttachment.java b/src/main/java/com/gooddata/md/DashboardAttachment.java index 000edfd99..ecf13b113 100644 --- a/src/main/java/com/gooddata/md/DashboardAttachment.java +++ b/src/main/java/com/gooddata/md/DashboardAttachment.java @@ -3,8 +3,8 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Arrays; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index edba2af59..d3cbca018 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -6,13 +6,13 @@ import com.gooddata.util.BooleanStringDeserializer; import com.gooddata.util.BooleanStringSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collections; import java.util.List; diff --git a/src/main/java/com/gooddata/md/Dimension.java b/src/main/java/com/gooddata/md/Dimension.java index 8aface3df..991ec0417 100644 --- a/src/main/java/com/gooddata/md/Dimension.java +++ b/src/main/java/com/gooddata/md/Dimension.java @@ -3,12 +3,12 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/com/gooddata/md/DisplayForm.java b/src/main/java/com/gooddata/md/DisplayForm.java index 52be9573f..334c214c6 100644 --- a/src/main/java/com/gooddata/md/DisplayForm.java +++ b/src/main/java/com/gooddata/md/DisplayForm.java @@ -3,11 +3,11 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Display form diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 293da0afe..0c84b193f 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -1,11 +1,11 @@ package com.gooddata.md; import com.gooddata.util.*; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; /** diff --git a/src/main/java/com/gooddata/md/Expression.java b/src/main/java/com/gooddata/md/Expression.java index 917b7fe42..e1cbc4bbc 100644 --- a/src/main/java/com/gooddata/md/Expression.java +++ b/src/main/java/com/gooddata/md/Expression.java @@ -3,10 +3,10 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Expression of fact diff --git a/src/main/java/com/gooddata/md/Fact.java b/src/main/java/com/gooddata/md/Fact.java index b6055155f..df7c6471f 100644 --- a/src/main/java/com/gooddata/md/Fact.java +++ b/src/main/java/com/gooddata/md/Fact.java @@ -3,12 +3,12 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/IdentifierAndUri.java b/src/main/java/com/gooddata/md/IdentifierAndUri.java index 4ec6e3938..68b46db1b 100644 --- a/src/main/java/com/gooddata/md/IdentifierAndUri.java +++ b/src/main/java/com/gooddata/md/IdentifierAndUri.java @@ -1,7 +1,7 @@ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; /** * Encapsulates identifier and its uri. diff --git a/src/main/java/com/gooddata/md/IdentifierToUri.java b/src/main/java/com/gooddata/md/IdentifierToUri.java index 1cdb6d92e..7cc1a5be9 100644 --- a/src/main/java/com/gooddata/md/IdentifierToUri.java +++ b/src/main/java/com/gooddata/md/IdentifierToUri.java @@ -1,7 +1,7 @@ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/IdentifiersAndUris.java b/src/main/java/com/gooddata/md/IdentifiersAndUris.java index 8fc829234..5cf3c8d9c 100644 --- a/src/main/java/com/gooddata/md/IdentifiersAndUris.java +++ b/src/main/java/com/gooddata/md/IdentifiersAndUris.java @@ -1,7 +1,7 @@ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; diff --git a/src/main/java/com/gooddata/md/InUseMany.java b/src/main/java/com/gooddata/md/InUseMany.java index 2f00ffb8b..252e9162a 100644 --- a/src/main/java/com/gooddata/md/InUseMany.java +++ b/src/main/java/com/gooddata/md/InUseMany.java @@ -2,13 +2,13 @@ import com.gooddata.util.BooleanStringDeserializer; import com.gooddata.util.BooleanStringSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.HashSet; diff --git a/src/main/java/com/gooddata/md/Key.java b/src/main/java/com/gooddata/md/Key.java index efbc3cd6d..11e7f27f4 100644 --- a/src/main/java/com/gooddata/md/Key.java +++ b/src/main/java/com/gooddata/md/Key.java @@ -1,9 +1,9 @@ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Key (primary/foreign) of attribute diff --git a/src/main/java/com/gooddata/md/MaqlAst.java b/src/main/java/com/gooddata/md/MaqlAst.java index 0a40bdd51..745beed1a 100644 --- a/src/main/java/com/gooddata/md/MaqlAst.java +++ b/src/main/java/com/gooddata/md/MaqlAst.java @@ -3,9 +3,9 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; /** * MAQL AST representation diff --git a/src/main/java/com/gooddata/md/Meta.java b/src/main/java/com/gooddata/md/Meta.java index 3d37181f4..e87e3b462 100644 --- a/src/main/java/com/gooddata/md/Meta.java +++ b/src/main/java/com/gooddata/md/Meta.java @@ -4,12 +4,12 @@ package com.gooddata.md; import com.gooddata.util.*; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion; import org.joda.time.DateTime; import java.io.Serializable; diff --git a/src/main/java/com/gooddata/md/Metric.java b/src/main/java/com/gooddata/md/Metric.java index 3e8909936..6d1573771 100644 --- a/src/main/java/com/gooddata/md/Metric.java +++ b/src/main/java/com/gooddata/md/Metric.java @@ -3,12 +3,12 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Metric diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index 068a890be..3b81a85df 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -3,13 +3,13 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/com/gooddata/md/Query.java b/src/main/java/com/gooddata/md/Query.java index 899fcd826..d58102a90 100644 --- a/src/main/java/com/gooddata/md/Query.java +++ b/src/main/java/com/gooddata/md/Query.java @@ -1,11 +1,11 @@ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/ReportAttachment.java b/src/main/java/com/gooddata/md/ReportAttachment.java index 627f3857b..687edabf2 100644 --- a/src/main/java/com/gooddata/md/ReportAttachment.java +++ b/src/main/java/com/gooddata/md/ReportAttachment.java @@ -4,8 +4,8 @@ package com.gooddata.md; import com.gooddata.report.ReportExportFormat; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/com/gooddata/md/ScheduledMail.java b/src/main/java/com/gooddata/md/ScheduledMail.java index 153f25c57..34037be48 100644 --- a/src/main/java/com/gooddata/md/ScheduledMail.java +++ b/src/main/java/com/gooddata/md/ScheduledMail.java @@ -5,12 +5,12 @@ import com.gooddata.md.report.ReportDefinition; import com.gooddata.report.ReportExportFormat; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.LocalDate; import java.util.*; diff --git a/src/main/java/com/gooddata/md/ScheduledMailWhen.java b/src/main/java/com/gooddata/md/ScheduledMailWhen.java index 39651fc06..5b6504e69 100644 --- a/src/main/java/com/gooddata/md/ScheduledMailWhen.java +++ b/src/main/java/com/gooddata/md/ScheduledMailWhen.java @@ -5,10 +5,10 @@ import com.gooddata.util.GDDateDeserializer; import com.gooddata.util.GDDateSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.LocalDate; /** diff --git a/src/main/java/com/gooddata/md/UseMany.java b/src/main/java/com/gooddata/md/UseMany.java index 5842bd3a7..1599db03a 100644 --- a/src/main/java/com/gooddata/md/UseMany.java +++ b/src/main/java/com/gooddata/md/UseMany.java @@ -1,9 +1,9 @@ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/UseManyEntries.java b/src/main/java/com/gooddata/md/UseManyEntries.java index 358bf2873..f48c69715 100644 --- a/src/main/java/com/gooddata/md/UseManyEntries.java +++ b/src/main/java/com/gooddata/md/UseManyEntries.java @@ -1,9 +1,9 @@ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 4b4213a26..738863755 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -3,12 +3,12 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/report/Filter.java b/src/main/java/com/gooddata/md/report/Filter.java index 4d75b001d..d2e539756 100644 --- a/src/main/java/com/gooddata/md/report/Filter.java +++ b/src/main/java/com/gooddata/md/report/Filter.java @@ -1,9 +1,9 @@ package com.gooddata.md.report; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/md/report/Grid.java b/src/main/java/com/gooddata/md/report/Grid.java index 804fe8c34..af0f5344a 100644 --- a/src/main/java/com/gooddata/md/report/Grid.java +++ b/src/main/java/com/gooddata/md/report/Grid.java @@ -3,10 +3,10 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/com/gooddata/md/report/GridElement.java b/src/main/java/com/gooddata/md/report/GridElement.java index 9824d83a4..777c87a20 100644 --- a/src/main/java/com/gooddata/md/report/GridElement.java +++ b/src/main/java/com/gooddata/md/report/GridElement.java @@ -3,10 +3,10 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Grid element diff --git a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java index d35955728..dac7fcbbb 100644 --- a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java @@ -4,9 +4,9 @@ package com.gooddata.md.report; import com.gooddata.md.Meta; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java index 0fb8709ce..f548137d3 100644 --- a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java @@ -4,9 +4,9 @@ package com.gooddata.md.report; import com.gooddata.md.Meta; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/com/gooddata/md/report/Report.java b/src/main/java/com/gooddata/md/report/Report.java index a5eedeaea..c910ed035 100644 --- a/src/main/java/com/gooddata/md/report/Report.java +++ b/src/main/java/com/gooddata/md/report/Report.java @@ -7,13 +7,13 @@ import com.gooddata.md.Meta; import com.gooddata.md.Queryable; import com.gooddata.md.Updatable; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/report/ReportDefinition.java b/src/main/java/com/gooddata/md/report/ReportDefinition.java index ed5ca5f8b..610c4c37c 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinition.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinition.java @@ -7,12 +7,12 @@ import com.gooddata.md.Meta; import com.gooddata.md.Queryable; import com.gooddata.md.Updatable; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Map; diff --git a/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java index 8edc42a15..f511d1ed2 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java @@ -3,10 +3,10 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonSubTypes; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; diff --git a/src/main/java/com/gooddata/model/DiffRequest.java b/src/main/java/com/gooddata/model/DiffRequest.java index 44041aff5..d172da952 100644 --- a/src/main/java/com/gooddata/model/DiffRequest.java +++ b/src/main/java/com/gooddata/model/DiffRequest.java @@ -3,12 +3,12 @@ */ package com.gooddata.model; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonRawValue; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRawValue; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/model/MaqlDdlLinks.java b/src/main/java/com/gooddata/model/MaqlDdlLinks.java index 9e599599a..83f7be993 100644 --- a/src/main/java/com/gooddata/model/MaqlDdlLinks.java +++ b/src/main/java/com/gooddata/model/MaqlDdlLinks.java @@ -4,10 +4,10 @@ package com.gooddata.model; import com.gooddata.gdc.LinkEntries; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.List; diff --git a/src/main/java/com/gooddata/model/ModelDiff.java b/src/main/java/com/gooddata/model/ModelDiff.java index da41c2042..009739992 100644 --- a/src/main/java/com/gooddata/model/ModelDiff.java +++ b/src/main/java/com/gooddata/model/ModelDiff.java @@ -3,11 +3,11 @@ */ package com.gooddata.model; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.Collections; import java.util.List; diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index 6b5d57f2b..e08c09ee8 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -7,15 +7,15 @@ import com.gooddata.util.BooleanIntegerDeserializer; import com.gooddata.util.BooleanStringDeserializer; import com.gooddata.util.GDDateTimeDeserializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion; import org.joda.time.DateTime; import org.springframework.web.util.UriTemplate; diff --git a/src/main/java/com/gooddata/project/ProjectFeatureFlag.java b/src/main/java/com/gooddata/project/ProjectFeatureFlag.java index c137bfb1e..3e8b852ae 100644 --- a/src/main/java/com/gooddata/project/ProjectFeatureFlag.java +++ b/src/main/java/com/gooddata/project/ProjectFeatureFlag.java @@ -1,12 +1,12 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/project/ProjectFeatureFlags.java b/src/main/java/com/gooddata/project/ProjectFeatureFlags.java index f84eac4ba..a56efc154 100644 --- a/src/main/java/com/gooddata/project/ProjectFeatureFlags.java +++ b/src/main/java/com/gooddata/project/ProjectFeatureFlags.java @@ -2,11 +2,11 @@ import static org.springframework.util.CollectionUtils.isEmpty; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import org.springframework.web.util.UriTemplate; import java.util.ArrayList; diff --git a/src/main/java/com/gooddata/project/ProjectTemplate.java b/src/main/java/com/gooddata/project/ProjectTemplate.java index 00977ceff..dc1c06d17 100644 --- a/src/main/java/com/gooddata/project/ProjectTemplate.java +++ b/src/main/java/com/gooddata/project/ProjectTemplate.java @@ -3,10 +3,10 @@ */ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Project template. diff --git a/src/main/java/com/gooddata/project/ProjectTemplates.java b/src/main/java/com/gooddata/project/ProjectTemplates.java index 91b2dd9be..e581ac371 100644 --- a/src/main/java/com/gooddata/project/ProjectTemplates.java +++ b/src/main/java/com/gooddata/project/ProjectTemplates.java @@ -3,10 +3,10 @@ */ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResult.java b/src/main/java/com/gooddata/project/ProjectValidationResult.java index 6d206fa7e..cbc68e73a 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResult.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResult.java @@ -1,8 +1,8 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java index beaf7c0e5..383583e13 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java @@ -1,9 +1,9 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.List; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultItem.java b/src/main/java/com/gooddata/project/ProjectValidationResultItem.java index 0dce72e29..16d14ec8c 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultItem.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultItem.java @@ -1,8 +1,8 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java index eb2c642a0..7b3e72b56 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java @@ -1,9 +1,9 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; @JsonTypeName("object") @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultParam.java index 0c93f14bd..aabc34bb2 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultParam.java @@ -1,8 +1,8 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonSubTypes; -import org.codehaus.jackson.annotate.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; /** * Represents validation result message param, must be of certain type. diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java index a0f0daf06..b3708eadf 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java @@ -1,9 +1,9 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.List; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java index 73e2195ac..c83a5f14c 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java @@ -1,8 +1,8 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeName; @JsonTypeName("common") @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/src/main/java/com/gooddata/project/ProjectValidationResults.java b/src/main/java/com/gooddata/project/ProjectValidationResults.java index 5a2a6e7df..240a6c4df 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResults.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResults.java @@ -1,12 +1,12 @@ package com.gooddata.project; import com.gooddata.util.BooleanIntegerDeserializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import java.util.LinkedList; import java.util.List; diff --git a/src/main/java/com/gooddata/project/ProjectValidationType.java b/src/main/java/com/gooddata/project/ProjectValidationType.java index 422cff02f..65e3419d6 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationType.java +++ b/src/main/java/com/gooddata/project/ProjectValidationType.java @@ -1,7 +1,7 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; /** * Represents project validation type. diff --git a/src/main/java/com/gooddata/project/ProjectValidations.java b/src/main/java/com/gooddata/project/ProjectValidations.java index 6a7e3d25d..74f6afac8 100644 --- a/src/main/java/com/gooddata/project/ProjectValidations.java +++ b/src/main/java/com/gooddata/project/ProjectValidations.java @@ -1,9 +1,9 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.HashSet; import java.util.Set; diff --git a/src/main/java/com/gooddata/project/Projects.java b/src/main/java/com/gooddata/project/Projects.java index 6ce535240..a39f7b4ec 100644 --- a/src/main/java/com/gooddata/project/Projects.java +++ b/src/main/java/com/gooddata/project/Projects.java @@ -3,10 +3,10 @@ */ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index 7f04d0f89..719c5dd29 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -3,14 +3,14 @@ import com.gooddata.md.Meta; import com.gooddata.util.BooleanStringDeserializer; import com.gooddata.util.BooleanStringSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import java.util.Collections; diff --git a/src/main/java/com/gooddata/project/Roles.java b/src/main/java/com/gooddata/project/Roles.java index 2e44b8a72..85754bc39 100644 --- a/src/main/java/com/gooddata/project/Roles.java +++ b/src/main/java/com/gooddata/project/Roles.java @@ -1,10 +1,10 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import org.springframework.web.util.UriTemplate; import java.util.Set; diff --git a/src/main/java/com/gooddata/project/User.java b/src/main/java/com/gooddata/project/User.java index 6ceb4a8ac..3a50b06ff 100644 --- a/src/main/java/com/gooddata/project/User.java +++ b/src/main/java/com/gooddata/project/User.java @@ -1,13 +1,13 @@ package com.gooddata.project; import com.gooddata.md.Meta; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import java.util.HashMap; diff --git a/src/main/java/com/gooddata/project/Users.java b/src/main/java/com/gooddata/project/Users.java index a866f5838..6704d24a4 100644 --- a/src/main/java/com/gooddata/project/Users.java +++ b/src/main/java/com/gooddata/project/Users.java @@ -5,11 +5,11 @@ import com.gooddata.collections.PageableList; import com.gooddata.collections.Paging; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeInfo.Id; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.springframework.web.util.UriTemplate; import java.util.List; diff --git a/src/main/java/com/gooddata/report/ExecuteDefinition.java b/src/main/java/com/gooddata/report/ExecuteDefinition.java index cec602c19..7e43f7b2c 100644 --- a/src/main/java/com/gooddata/report/ExecuteDefinition.java +++ b/src/main/java/com/gooddata/report/ExecuteDefinition.java @@ -1,7 +1,7 @@ package com.gooddata.report; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/report/ExecuteReport.java b/src/main/java/com/gooddata/report/ExecuteReport.java index 467aa34c5..79c521f76 100644 --- a/src/main/java/com/gooddata/report/ExecuteReport.java +++ b/src/main/java/com/gooddata/report/ExecuteReport.java @@ -1,7 +1,7 @@ package com.gooddata.report; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/report/ReportRequest.java b/src/main/java/com/gooddata/report/ReportRequest.java index 63aeb075b..be8d46f71 100644 --- a/src/main/java/com/gooddata/report/ReportRequest.java +++ b/src/main/java/com/gooddata/report/ReportRequest.java @@ -3,10 +3,10 @@ */ package com.gooddata.report; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Report execution request. diff --git a/src/main/java/com/gooddata/report/ReportService.java b/src/main/java/com/gooddata/report/ReportService.java index d39a780ff..a45169d6b 100644 --- a/src/main/java/com/gooddata/report/ReportService.java +++ b/src/main/java/com/gooddata/report/ReportService.java @@ -12,8 +12,8 @@ import com.gooddata.gdc.UriResponse; import com.gooddata.md.report.Report; import com.gooddata.md.report.ReportDefinition; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.node.ObjectNode; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.springframework.http.HttpEntity; import org.springframework.http.ResponseEntity; import org.springframework.http.client.ClientHttpResponse; diff --git a/src/main/java/com/gooddata/util/BooleanIntegerDeserializer.java b/src/main/java/com/gooddata/util/BooleanIntegerDeserializer.java index 5e5ace167..6195cea69 100644 --- a/src/main/java/com/gooddata/util/BooleanIntegerDeserializer.java +++ b/src/main/java/com/gooddata/util/BooleanIntegerDeserializer.java @@ -2,11 +2,11 @@ import static com.gooddata.util.Validate.notNull; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; -import org.codehaus.jackson.map.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonMappingException; import java.io.IOException; @@ -22,7 +22,7 @@ public Boolean deserialize(JsonParser jp, DeserializationContext ctx) throws IOE final JsonNode root = jp.readValueAsTree(); notNull(root, "jsonNode"); if (root.isInt()) { - return ONE.equals(root.getNumberValue()); + return ONE.equals(root.numberValue()); } else { throw new JsonMappingException("Expected int value: " + root.asText(), jp.getCurrentLocation()); } diff --git a/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java b/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java index b8007ed3a..cc8b3ed99 100644 --- a/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java +++ b/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java @@ -1,8 +1,8 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.map.JsonSerializer; -import org.codehaus.jackson.map.SerializerProvider; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; diff --git a/src/main/java/com/gooddata/util/BooleanStringDeserializer.java b/src/main/java/com/gooddata/util/BooleanStringDeserializer.java index c460c4926..34ea28358 100644 --- a/src/main/java/com/gooddata/util/BooleanStringDeserializer.java +++ b/src/main/java/com/gooddata/util/BooleanStringDeserializer.java @@ -2,11 +2,11 @@ import static com.gooddata.util.Validate.notNull; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; -import org.codehaus.jackson.map.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonMappingException; import java.io.IOException; @@ -20,7 +20,7 @@ public Boolean deserialize(JsonParser jp, DeserializationContext ctx) throws IOE final JsonNode root = jp.readValueAsTree(); notNull(root, "jsonNode"); if (root.isTextual()) { - return "1".equals(root.getTextValue()); + return "1".equals(root.textValue()); } else { throw new JsonMappingException("Expected textual value: " + root.asText(), jp.getCurrentLocation()); } diff --git a/src/main/java/com/gooddata/util/BooleanStringSerializer.java b/src/main/java/com/gooddata/util/BooleanStringSerializer.java index 265144338..4bf8fd161 100644 --- a/src/main/java/com/gooddata/util/BooleanStringSerializer.java +++ b/src/main/java/com/gooddata/util/BooleanStringSerializer.java @@ -1,8 +1,8 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.map.JsonSerializer; -import org.codehaus.jackson.map.SerializerProvider; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; diff --git a/src/main/java/com/gooddata/util/GDDateDeserializer.java b/src/main/java/com/gooddata/util/GDDateDeserializer.java index 9eb02ee96..cc3677f4d 100644 --- a/src/main/java/com/gooddata/util/GDDateDeserializer.java +++ b/src/main/java/com/gooddata/util/GDDateDeserializer.java @@ -3,10 +3,10 @@ */ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; @@ -31,7 +31,7 @@ public LocalDate deserialize(JsonParser jp, DeserializationContext ctx) throws I if (root == null || root.isNull()) { return null; } - return FORMATTER.parseLocalDate(root.getTextValue()); + return FORMATTER.parseLocalDate(root.textValue()); } } diff --git a/src/main/java/com/gooddata/util/GDDateSerializer.java b/src/main/java/com/gooddata/util/GDDateSerializer.java index c8a1afd55..a1e8dc7c7 100644 --- a/src/main/java/com/gooddata/util/GDDateSerializer.java +++ b/src/main/java/com/gooddata/util/GDDateSerializer.java @@ -3,9 +3,9 @@ */ package com.gooddata.util; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.map.JsonSerializer; -import org.codehaus.jackson.map.SerializerProvider; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; import org.joda.time.LocalDate; import java.io.IOException; diff --git a/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java b/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java index bdef9df53..5f17e7abc 100644 --- a/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java +++ b/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java @@ -1,9 +1,9 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; import org.joda.time.DateTime; import java.io.IOException; @@ -21,6 +21,6 @@ public DateTime deserialize(JsonParser jp, DeserializationContext ctx) throws IO if (root == null || root.isNull()) { return null; } - return FORMATTER.parseDateTime(root.getTextValue()); + return FORMATTER.parseDateTime(root.textValue()); } } diff --git a/src/main/java/com/gooddata/util/GDDateTimeSerializer.java b/src/main/java/com/gooddata/util/GDDateTimeSerializer.java index 450930813..556c2cafd 100644 --- a/src/main/java/com/gooddata/util/GDDateTimeSerializer.java +++ b/src/main/java/com/gooddata/util/GDDateTimeSerializer.java @@ -1,8 +1,8 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.map.JsonSerializer; -import org.codehaus.jackson.map.SerializerProvider; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormatter; diff --git a/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java b/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java index a6aad2205..186895615 100644 --- a/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java +++ b/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java @@ -2,10 +2,10 @@ import java.io.IOException; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; import org.joda.time.DateTime; import static com.gooddata.util.ISODateTimeSerializer.FORMATTER; @@ -21,7 +21,7 @@ public DateTime deserialize(JsonParser jp, DeserializationContext ctx) throws IO if (root == null || root.isNull()) { return null; } - return FORMATTER.parseDateTime(root.getTextValue()); + return FORMATTER.parseDateTime(root.textValue()); } } \ No newline at end of file diff --git a/src/main/java/com/gooddata/util/ISODateTimeSerializer.java b/src/main/java/com/gooddata/util/ISODateTimeSerializer.java index 17805c125..1a6d5a2e3 100644 --- a/src/main/java/com/gooddata/util/ISODateTimeSerializer.java +++ b/src/main/java/com/gooddata/util/ISODateTimeSerializer.java @@ -1,8 +1,8 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.map.JsonSerializer; -import org.codehaus.jackson.map.SerializerProvider; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormatter; diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index e0649597d..e97adc864 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -1,19 +1,19 @@ package com.gooddata.warehouse; import static com.gooddata.util.Validate.notNull; -import static org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion.NON_NULL; +import static com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion.NON_NULL; import com.gooddata.project.Environment; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import org.springframework.web.util.UriTemplate; @@ -138,6 +138,7 @@ public void setEnvironment(final String environment) { this.environment = environment; } + @JsonIgnore public void setEnvironment(final Environment environment) { notNull(environment, "environment"); setEnvironment(environment.name()); diff --git a/src/main/java/com/gooddata/warehouse/WarehouseTask.java b/src/main/java/com/gooddata/warehouse/WarehouseTask.java index 2fcd6aa15..de8e6c41e 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseTask.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseTask.java @@ -1,10 +1,10 @@ package com.gooddata.warehouse; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.Map; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUser.java b/src/main/java/com/gooddata/warehouse/WarehouseUser.java index adfda6eb3..7c7c26a7e 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUser.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUser.java @@ -1,18 +1,18 @@ package com.gooddata.warehouse; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import java.util.Map; import static com.gooddata.util.Validate.notNull; -import static org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion.NON_NULL; +import static com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion.NON_NULL; /** * Warehouse user diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUsers.java b/src/main/java/com/gooddata/warehouse/WarehouseUsers.java index 419b881da..2a55c6670 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUsers.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUsers.java @@ -2,11 +2,11 @@ import com.gooddata.collections.PageableList; import com.gooddata.collections.Paging; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import java.util.List; diff --git a/src/main/java/com/gooddata/warehouse/Warehouses.java b/src/main/java/com/gooddata/warehouse/Warehouses.java index af7464a5f..38b0c61de 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouses.java +++ b/src/main/java/com/gooddata/warehouse/Warehouses.java @@ -3,11 +3,11 @@ import com.gooddata.collections.PageableList; import com.gooddata.collections.PageableListSerializer; import com.gooddata.collections.Paging; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.List; import java.util.Map; diff --git a/src/test/java/com/gooddata/AbstractGoodDataIT.java b/src/test/java/com/gooddata/AbstractGoodDataIT.java index d8f8e8e81..5c0736dda 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataIT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataIT.java @@ -6,7 +6,7 @@ import com.gooddata.util.ResourceUtils; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; diff --git a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java index 1f67fb2ee..cc286d299 100644 --- a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java +++ b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java @@ -1,7 +1,7 @@ package com.gooddata; import com.gooddata.gdc.GdcError; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/JsonMatchers.java b/src/test/java/com/gooddata/JsonMatchers.java index 290bd80f9..bb957b4b2 100644 --- a/src/test/java/com/gooddata/JsonMatchers.java +++ b/src/test/java/com/gooddata/JsonMatchers.java @@ -4,7 +4,7 @@ import net.javacrumbs.jsonunit.core.Configuration; import net.javacrumbs.jsonunit.core.Option; import net.javacrumbs.jsonunit.core.internal.Diff; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Factory; diff --git a/src/test/java/com/gooddata/account/AccountTest.java b/src/test/java/com/gooddata/account/AccountTest.java index 35a886e35..24ea11b53 100644 --- a/src/test/java/com/gooddata/account/AccountTest.java +++ b/src/test/java/com/gooddata/account/AccountTest.java @@ -1,6 +1,6 @@ package com.gooddata.account; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/collections/PagingTest.java b/src/test/java/com/gooddata/collections/PagingTest.java index 7c2b09ac1..c47f5bfb9 100644 --- a/src/test/java/com/gooddata/collections/PagingTest.java +++ b/src/test/java/com/gooddata/collections/PagingTest.java @@ -1,6 +1,6 @@ package com.gooddata.collections; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java index 2824ced83..cfccf9f29 100644 --- a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.connector; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/connector/IntegrationTest.java b/src/test/java/com/gooddata/connector/IntegrationTest.java index 6b06ffe2b..d3aa02784 100644 --- a/src/test/java/com/gooddata/connector/IntegrationTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationTest.java @@ -1,6 +1,6 @@ package com.gooddata.connector; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/connector/ProcessStatusTest.java b/src/test/java/com/gooddata/connector/ProcessStatusTest.java index c2738cf29..d51d285cc 100644 --- a/src/test/java/com/gooddata/connector/ProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/ProcessStatusTest.java @@ -1,6 +1,6 @@ package com.gooddata.connector; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.connector.Status.Code.ERROR; diff --git a/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java b/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java index 8ba60ae34..45a0ac655 100644 --- a/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java +++ b/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.connector; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java index 46b175831..54ff2e6f4 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java @@ -6,7 +6,7 @@ import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.hamcrest.MatcherAssert.assertThat; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; public class DataloadProcessTest { diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java index 3a5366b32..010642fc8 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.dataload.processes; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java index e07699954..d5d5f4659 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java @@ -1,6 +1,6 @@ package com.gooddata.dataload.processes; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java index c1f854526..f846ccb13 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java @@ -3,7 +3,7 @@ import static org.hamcrest.core.Is.is; import static org.hamcrest.MatcherAssert.*; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; public class ProcessExecutionTaskTest { diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java index d8c4fff0e..e93ca303d 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java @@ -3,7 +3,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.MatcherAssert.assertThat; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.util.HashMap; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java index 7e947ae0d..ade1d99e7 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java @@ -5,7 +5,7 @@ import com.gooddata.collections.PageableList; import com.gooddata.project.Project; import com.gooddata.util.ResourceUtils; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index 622c7ace5..df016cd89 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -1,6 +1,6 @@ package com.gooddata.dataload.processes; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.collection.IsMapContaining; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; diff --git a/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java b/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java index 062f1fc42..c12bab0fc 100644 --- a/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java +++ b/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java @@ -1,6 +1,6 @@ package com.gooddata.dataload.processes; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/dataset/DatasetManifestTest.java b/src/test/java/com/gooddata/dataset/DatasetManifestTest.java index caf9523d0..c99ee88ed 100644 --- a/src/test/java/com/gooddata/dataset/DatasetManifestTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetManifestTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.dataset; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/dataset/DatasetsTest.java b/src/test/java/com/gooddata/dataset/DatasetsTest.java index ce5b5e100..b87eb7926 100644 --- a/src/test/java/com/gooddata/dataset/DatasetsTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetsTest.java @@ -1,6 +1,6 @@ package com.gooddata.dataset; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/dataset/FailStatusTest.java b/src/test/java/com/gooddata/dataset/FailStatusTest.java index 52bb6b135..d98b76c20 100644 --- a/src/test/java/com/gooddata/dataset/FailStatusTest.java +++ b/src/test/java/com/gooddata/dataset/FailStatusTest.java @@ -1,7 +1,7 @@ package com.gooddata.dataset; import com.gooddata.gdc.ErrorStructure; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.hamcrest.Matchers; diff --git a/src/test/java/com/gooddata/dataset/MaqlDmlTest.java b/src/test/java/com/gooddata/dataset/MaqlDmlTest.java index a229e1816..6b21c9442 100644 --- a/src/test/java/com/gooddata/dataset/MaqlDmlTest.java +++ b/src/test/java/com/gooddata/dataset/MaqlDmlTest.java @@ -4,7 +4,7 @@ package com.gooddata.dataset; import org.apache.commons.io.IOUtils; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/dataset/PullTaskStatusTest.java b/src/test/java/com/gooddata/dataset/PullTaskStatusTest.java index 9a4dfc15a..5ebc3aafd 100644 --- a/src/test/java/com/gooddata/dataset/PullTaskStatusTest.java +++ b/src/test/java/com/gooddata/dataset/PullTaskStatusTest.java @@ -1,6 +1,6 @@ package com.gooddata.dataset; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/dataset/PullTaskTest.java b/src/test/java/com/gooddata/dataset/PullTaskTest.java index e9bf7d021..d4c3761e1 100644 --- a/src/test/java/com/gooddata/dataset/PullTaskTest.java +++ b/src/test/java/com/gooddata/dataset/PullTaskTest.java @@ -1,6 +1,6 @@ package com.gooddata.dataset; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/dataset/TaskStateTest.java b/src/test/java/com/gooddata/dataset/TaskStateTest.java index 73ed4d31c..c581c0eb0 100644 --- a/src/test/java/com/gooddata/dataset/TaskStateTest.java +++ b/src/test/java/com/gooddata/dataset/TaskStateTest.java @@ -4,7 +4,7 @@ package com.gooddata.dataset; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.IOException; diff --git a/src/test/java/com/gooddata/gdc/AsyncTaskTest.java b/src/test/java/com/gooddata/gdc/AsyncTaskTest.java index fd82c8cea..495e4e6ed 100644 --- a/src/test/java/com/gooddata/gdc/AsyncTaskTest.java +++ b/src/test/java/com/gooddata/gdc/AsyncTaskTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/gdc/ErrorStructureTest.java b/src/test/java/com/gooddata/gdc/ErrorStructureTest.java index d595edcbb..b889d7bd7 100644 --- a/src/test/java/com/gooddata/gdc/ErrorStructureTest.java +++ b/src/test/java/com/gooddata/gdc/ErrorStructureTest.java @@ -1,6 +1,6 @@ package com.gooddata.gdc; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/gdc/GdcErrorTest.java b/src/test/java/com/gooddata/gdc/GdcErrorTest.java index 55f85df78..ceecf239a 100644 --- a/src/test/java/com/gooddata/gdc/GdcErrorTest.java +++ b/src/test/java/com/gooddata/gdc/GdcErrorTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/gdc/GdcTest.java b/src/test/java/com/gooddata/gdc/GdcTest.java index 0eedba857..ac1f3ac0e 100644 --- a/src/test/java/com/gooddata/gdc/GdcTest.java +++ b/src/test/java/com/gooddata/gdc/GdcTest.java @@ -1,6 +1,6 @@ package com.gooddata.gdc; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java index dc0dda0c3..a2254328c 100644 --- a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java +++ b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/gdc/TaskStatusTest.java b/src/test/java/com/gooddata/gdc/TaskStatusTest.java index 41815adf2..f251b6e1f 100644 --- a/src/test/java/com/gooddata/gdc/TaskStatusTest.java +++ b/src/test/java/com/gooddata/gdc/TaskStatusTest.java @@ -1,6 +1,6 @@ package com.gooddata.gdc; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.testng.Assert.*; diff --git a/src/test/java/com/gooddata/gdc/UriResponseTest.java b/src/test/java/com/gooddata/gdc/UriResponseTest.java index fda26115a..bbe38e214 100644 --- a/src/test/java/com/gooddata/gdc/UriResponseTest.java +++ b/src/test/java/com/gooddata/gdc/UriResponseTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.gdc; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java index 594ab6e0c..f7a9ecfc7 100644 --- a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java +++ b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java @@ -1,6 +1,6 @@ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/AttributeElementTest.java b/src/test/java/com/gooddata/md/AttributeElementTest.java index d744e7360..ff89a556d 100644 --- a/src/test/java/com/gooddata/md/AttributeElementTest.java +++ b/src/test/java/com/gooddata/md/AttributeElementTest.java @@ -8,7 +8,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/AttributeElementsTest.java b/src/test/java/com/gooddata/md/AttributeElementsTest.java index bc5ea5d54..2375e3c4d 100644 --- a/src/test/java/com/gooddata/md/AttributeElementsTest.java +++ b/src/test/java/com/gooddata/md/AttributeElementsTest.java @@ -9,7 +9,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/AttributeTest.java b/src/test/java/com/gooddata/md/AttributeTest.java index 052b2f6c2..cf0a58859 100644 --- a/src/test/java/com/gooddata/md/AttributeTest.java +++ b/src/test/java/com/gooddata/md/AttributeTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.Matchers; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/md/DatasetTest.java b/src/test/java/com/gooddata/md/DatasetTest.java index b111f15ee..cd9cd0ab4 100644 --- a/src/test/java/com/gooddata/md/DatasetTest.java +++ b/src/test/java/com/gooddata/md/DatasetTest.java @@ -11,7 +11,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/DimensionTest.java b/src/test/java/com/gooddata/md/DimensionTest.java index 44a7a8262..2adc3853e 100644 --- a/src/test/java/com/gooddata/md/DimensionTest.java +++ b/src/test/java/com/gooddata/md/DimensionTest.java @@ -9,7 +9,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/DisplayFormTest.java b/src/test/java/com/gooddata/md/DisplayFormTest.java index 6448a64a0..371b9f2f9 100644 --- a/src/test/java/com/gooddata/md/DisplayFormTest.java +++ b/src/test/java/com/gooddata/md/DisplayFormTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/EntryTest.java b/src/test/java/com/gooddata/md/EntryTest.java index 19e392201..6d15b4804 100644 --- a/src/test/java/com/gooddata/md/EntryTest.java +++ b/src/test/java/com/gooddata/md/EntryTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/md/ExpressionTest.java b/src/test/java/com/gooddata/md/ExpressionTest.java index 1fc90352b..a058d0c33 100644 --- a/src/test/java/com/gooddata/md/ExpressionTest.java +++ b/src/test/java/com/gooddata/md/ExpressionTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/md/FactTest.java b/src/test/java/com/gooddata/md/FactTest.java index 5df9141a4..88ae457d0 100644 --- a/src/test/java/com/gooddata/md/FactTest.java +++ b/src/test/java/com/gooddata/md/FactTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/md/KeyTest.java b/src/test/java/com/gooddata/md/KeyTest.java index 26d4e4d57..c1149e812 100644 --- a/src/test/java/com/gooddata/md/KeyTest.java +++ b/src/test/java/com/gooddata/md/KeyTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/md/MetaTest.java b/src/test/java/com/gooddata/md/MetaTest.java index 7e1612ba0..c1c945934 100644 --- a/src/test/java/com/gooddata/md/MetaTest.java +++ b/src/test/java/com/gooddata/md/MetaTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/md/MetricTest.java b/src/test/java/com/gooddata/md/MetricTest.java index ca63d0c79..84d4b24c5 100644 --- a/src/test/java/com/gooddata/md/MetricTest.java +++ b/src/test/java/com/gooddata/md/MetricTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/md/NestedAttributeTest.java b/src/test/java/com/gooddata/md/NestedAttributeTest.java index dc6ab75ee..bdbefb314 100644 --- a/src/test/java/com/gooddata/md/NestedAttributeTest.java +++ b/src/test/java/com/gooddata/md/NestedAttributeTest.java @@ -8,7 +8,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.Matchers; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/md/ObjTest.java b/src/test/java/com/gooddata/md/ObjTest.java index cb933e531..7465f6d5a 100644 --- a/src/test/java/com/gooddata/md/ObjTest.java +++ b/src/test/java/com/gooddata/md/ObjTest.java @@ -3,8 +3,8 @@ */ package com.gooddata.md; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/md/QueryTest.java b/src/test/java/com/gooddata/md/QueryTest.java index 81b5f92ac..6ad9aec4d 100644 --- a/src/test/java/com/gooddata/md/QueryTest.java +++ b/src/test/java/com/gooddata/md/QueryTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/md/ScheduledMailTest.java b/src/test/java/com/gooddata/md/ScheduledMailTest.java index 4b567767e..985ed6be5 100644 --- a/src/test/java/com/gooddata/md/ScheduledMailTest.java +++ b/src/test/java/com/gooddata/md/ScheduledMailTest.java @@ -5,7 +5,7 @@ import com.gooddata.JsonMatchers; import com.gooddata.report.ReportExportFormat; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.LocalDate; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java index 14e52558f..064dc1d34 100644 --- a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java +++ b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/report/GridElementTest.java b/src/test/java/com/gooddata/md/report/GridElementTest.java index 21e48edfc..19be6e010 100644 --- a/src/test/java/com/gooddata/md/report/GridElementTest.java +++ b/src/test/java/com/gooddata/md/report/GridElementTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java index 6460225f0..cdc6f548b 100644 --- a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index edc0e9399..4916e620e 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.util.Collection; diff --git a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java index 89e3427a9..b97789cac 100644 --- a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java index a0cceca06..b2df4f354 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java index 59716db6f..90072a0c6 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/md/report/ReportTest.java b/src/test/java/com/gooddata/md/report/ReportTest.java index 97d48b914..356beb04d 100644 --- a/src/test/java/com/gooddata/md/report/ReportTest.java +++ b/src/test/java/com/gooddata/md/report/ReportTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.md.report; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/model/DiffRequestTest.java b/src/test/java/com/gooddata/model/DiffRequestTest.java index 9967f48c9..66bd76090 100644 --- a/src/test/java/com/gooddata/model/DiffRequestTest.java +++ b/src/test/java/com/gooddata/model/DiffRequestTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.model; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java index 059bb84d8..c4cfb07d0 100644 --- a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java +++ b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.model; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/model/MaqlDdlTest.java b/src/test/java/com/gooddata/model/MaqlDdlTest.java index e50565c31..483c3ce1b 100644 --- a/src/test/java/com/gooddata/model/MaqlDdlTest.java +++ b/src/test/java/com/gooddata/model/MaqlDdlTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.model; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/model/ModelDiffTest.java b/src/test/java/com/gooddata/model/ModelDiffTest.java index 72a92aa16..626dd79a0 100644 --- a/src/test/java/com/gooddata/model/ModelDiffTest.java +++ b/src/test/java/com/gooddata/model/ModelDiffTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.model; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/project/ProjectServiceIT.java b/src/test/java/com/gooddata/project/ProjectServiceIT.java index 60295bfb8..e15ad7f11 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceIT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceIT.java @@ -8,7 +8,7 @@ import com.gooddata.gdc.FeatureFlags; import com.gooddata.gdc.TaskStatus; import com.gooddata.gdc.UriResponse; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/project/ProjectTemplateTest.java b/src/test/java/com/gooddata/project/ProjectTemplateTest.java index b1f607fb2..38bfe8f0f 100644 --- a/src/test/java/com/gooddata/project/ProjectTemplateTest.java +++ b/src/test/java/com/gooddata/project/ProjectTemplateTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/project/ProjectTemplatesTest.java b/src/test/java/com/gooddata/project/ProjectTemplatesTest.java index f639322dc..3f54ce4a1 100644 --- a/src/test/java/com/gooddata/project/ProjectTemplatesTest.java +++ b/src/test/java/com/gooddata/project/ProjectTemplatesTest.java @@ -3,7 +3,7 @@ */ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/project/ProjectTest.java b/src/test/java/com/gooddata/project/ProjectTest.java index 608b119a8..93912b4b2 100644 --- a/src/test/java/com/gooddata/project/ProjectTest.java +++ b/src/test/java/com/gooddata/project/ProjectTest.java @@ -1,11 +1,11 @@ package com.gooddata.project; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.annotate.JsonTypeInfo; -import org.codehaus.jackson.annotate.JsonTypeName; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java index 69bae8838..ff90a90be 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java index aba3755b5..60846d42e 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java @@ -1,7 +1,7 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.core.type.TypeReference; import org.testng.annotations.Test; import java.util.List; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java index bb9ee6a9f..38e2a6cc5 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java index 06a261882..5fb29b036 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java b/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java index 896edd337..d0de73a3e 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/project/ProjectValidationsTest.java b/src/test/java/com/gooddata/project/ProjectValidationsTest.java index 32c35b00e..9e632c474 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationsTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationsTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/project/RoleTest.java b/src/test/java/com/gooddata/project/RoleTest.java index 4e593f70d..524aaa2a2 100644 --- a/src/test/java/com/gooddata/project/RoleTest.java +++ b/src/test/java/com/gooddata/project/RoleTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.IOException; diff --git a/src/test/java/com/gooddata/project/RolesTest.java b/src/test/java/com/gooddata/project/RolesTest.java index 870511405..8410f1f2c 100644 --- a/src/test/java/com/gooddata/project/RolesTest.java +++ b/src/test/java/com/gooddata/project/RolesTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/project/UserTest.java b/src/test/java/com/gooddata/project/UserTest.java index 5ae4c4fca..2c52644ff 100644 --- a/src/test/java/com/gooddata/project/UserTest.java +++ b/src/test/java/com/gooddata/project/UserTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/project/UsersTest.java b/src/test/java/com/gooddata/project/UsersTest.java index ebbacd737..279197690 100644 --- a/src/test/java/com/gooddata/project/UsersTest.java +++ b/src/test/java/com/gooddata/project/UsersTest.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/util/BooleanIntegerClass.java b/src/test/java/com/gooddata/util/BooleanIntegerClass.java index 0ec6c61ed..1f6acaa2a 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerClass.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerClass.java @@ -1,9 +1,9 @@ package com.gooddata.util; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class BooleanIntegerClass { private final boolean foo; diff --git a/src/test/java/com/gooddata/util/BooleanIntegerDeserializerTest.java b/src/test/java/com/gooddata/util/BooleanIntegerDeserializerTest.java index 8f6d915c7..311368d31 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerDeserializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerDeserializerTest.java @@ -1,8 +1,8 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.JsonMappingException; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; @@ -17,7 +17,7 @@ public void shouldDeserializeTrue() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(true)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").getNumberValue().intValue(), is(1)); + assertThat(node.path("foo").numberValue().intValue(), is(1)); final BooleanIntegerClass moo = MAPPER.readValue(json, BooleanIntegerClass.class); assertThat(moo.isFoo(), is(true)); @@ -28,7 +28,7 @@ public void shouldDeserializeFalse() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(false)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").getNumberValue().intValue(), is(0)); + assertThat(node.path("foo").numberValue().intValue(), is(0)); final BooleanIntegerClass moo = MAPPER.readValue(json, BooleanIntegerClass.class); assertThat(moo.isFoo(), is(false)); diff --git a/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java b/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java index ba2921217..6a70fa107 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java @@ -1,7 +1,7 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; @@ -16,7 +16,7 @@ public void shouldSerializeTrue() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(true)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").getNumberValue().intValue(), is(1)); + assertThat(node.path("foo").numberValue().intValue(), is(1)); } @Test @@ -24,6 +24,6 @@ public void shouldSerializeFalse() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(false)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").getNumberValue().intValue(), is(0)); + assertThat(node.path("foo").numberValue().intValue(), is(0)); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/BooleanStringClass.java b/src/test/java/com/gooddata/util/BooleanStringClass.java index 9821fa6a6..d7b322ebf 100644 --- a/src/test/java/com/gooddata/util/BooleanStringClass.java +++ b/src/test/java/com/gooddata/util/BooleanStringClass.java @@ -1,9 +1,9 @@ package com.gooddata.util; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class BooleanStringClass { private final boolean foo; diff --git a/src/test/java/com/gooddata/util/BooleanStringDeserializerTest.java b/src/test/java/com/gooddata/util/BooleanStringDeserializerTest.java index 33c7bda05..a45d0ddd7 100644 --- a/src/test/java/com/gooddata/util/BooleanStringDeserializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanStringDeserializerTest.java @@ -1,8 +1,8 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.JsonMappingException; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; @@ -17,7 +17,7 @@ public void shouldDeserializeTrue() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanStringClass(true)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").getTextValue(), is("1")); + assertThat(node.path("foo").textValue(), is("1")); final BooleanStringClass moo = MAPPER.readValue(json, BooleanStringClass.class); assertThat(moo.isFoo(), is(true)); @@ -28,7 +28,7 @@ public void shouldDeserializeFalse() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanStringClass(false)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").getTextValue(), is("0")); + assertThat(node.path("foo").textValue(), is("0")); final BooleanStringClass moo = MAPPER.readValue(json, BooleanStringClass.class); assertThat(moo.isFoo(), is(false)); diff --git a/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java b/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java index 5200a22c1..5a2f2f32f 100644 --- a/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java @@ -1,7 +1,7 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; @@ -16,7 +16,7 @@ public void shouldSerializeTrue() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanStringClass(true)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").getTextValue(), is("1")); + assertThat(node.path("foo").textValue(), is("1")); } @Test @@ -24,6 +24,6 @@ public void shouldSerializeFalse() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanStringClass(false)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").getTextValue(), is("0")); + assertThat(node.path("foo").textValue(), is("0")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/GDDateClass.java b/src/test/java/com/gooddata/util/GDDateClass.java index 3fa44ac9f..4c1714faa 100644 --- a/src/test/java/com/gooddata/util/GDDateClass.java +++ b/src/test/java/com/gooddata/util/GDDateClass.java @@ -1,9 +1,9 @@ package com.gooddata.util; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import org.joda.time.LocalDate; diff --git a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java index bf75a2420..8cf5507aa 100644 --- a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java @@ -1,7 +1,7 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; @@ -19,7 +19,7 @@ public void testDeserialize() throws Exception { final String json = MAPPER.writeValueAsString(new GDDateClass(new LocalDate(2012, 3, 20))); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("date").getTextValue(), is("2012-03-20")); + assertThat(node.path("date").textValue(), is("2012-03-20")); final GDDateClass date = MAPPER.readValue(json, GDDateClass.class); assertThat(date.getDate(), is(new LocalDate(2012, 3, 20))); diff --git a/src/test/java/com/gooddata/util/GDDateSerializerTest.java b/src/test/java/com/gooddata/util/GDDateSerializerTest.java index 6ba597c5a..73f1b5ec6 100644 --- a/src/test/java/com/gooddata/util/GDDateSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateSerializerTest.java @@ -1,7 +1,7 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; @@ -20,6 +20,6 @@ public void testSerialize() throws Exception { final String json = MAPPER.writeValueAsString(foo); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("date").getTextValue(), is("2012-03-20")); + assertThat(node.path("date").textValue(), is("2012-03-20")); } } diff --git a/src/test/java/com/gooddata/util/GDDateTimeClass.java b/src/test/java/com/gooddata/util/GDDateTimeClass.java index f2f081793..0da6b1fdc 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeClass.java +++ b/src/test/java/com/gooddata/util/GDDateTimeClass.java @@ -1,9 +1,9 @@ package com.gooddata.util; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; class GDDateTimeClass { diff --git a/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java index 56259eea4..ec4c5ab7d 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java @@ -1,7 +1,7 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; @@ -18,7 +18,7 @@ public void testDeserialize() throws Exception { final String json = MAPPER.writeValueAsString(new GDDateTimeClass(new DateTime(2012, 3, 20, 14, 31, 5, 3, DateTimeZone.UTC))); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("date").getTextValue(), is("2012-03-20 14:31:05")); + assertThat(node.path("date").textValue(), is("2012-03-20 14:31:05")); final GDDateTimeClass date = MAPPER.readValue(json, GDDateTimeClass.class); assertThat(date.getDate(), is(new DateTime(2012, 3, 20, 14, 31, 5, DateTimeZone.UTC))); diff --git a/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java b/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java index 627671753..aa6f5a522 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java @@ -1,7 +1,7 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; @@ -19,6 +19,6 @@ public void testSerialize() throws Exception { final String json = MAPPER.writeValueAsString(foo); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("date").getTextValue(), is("2012-03-20 14:31:05")); + assertThat(node.path("date").textValue(), is("2012-03-20 14:31:05")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/ISODateClass.java b/src/test/java/com/gooddata/util/ISODateClass.java index 6fa23b791..f3d742008 100644 --- a/src/test/java/com/gooddata/util/ISODateClass.java +++ b/src/test/java/com/gooddata/util/ISODateClass.java @@ -1,9 +1,9 @@ package com.gooddata.util; -import org.codehaus.jackson.annotate.JsonCreator; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; class ISODateClass { diff --git a/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java b/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java index 499d2df54..53a04606b 100644 --- a/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java +++ b/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java @@ -1,7 +1,7 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; @@ -19,7 +19,7 @@ public void testDeserialize() throws Exception { final String json = MAPPER.writeValueAsString(new ISODateClass(expected)); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("date").getTextValue(), is("2012-03-20T14:31:05.003Z")); + assertThat(node.path("date").textValue(), is("2012-03-20T14:31:05.003Z")); final ISODateClass moo = MAPPER.readValue(json, ISODateClass.class); assertThat(moo.getDate(), is(expected)); diff --git a/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java b/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java index 0f1eab9ac..606dec32e 100644 --- a/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java +++ b/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java @@ -1,7 +1,7 @@ package com.gooddata.util; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; @@ -19,6 +19,6 @@ public void testSerialize() throws Exception { final String json = MAPPER.writeValueAsString(foo); final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("date").getTextValue(), is("2012-03-20T14:31:05.003Z")); + assertThat(node.path("date").textValue(), is("2012-03-20T14:31:05.003Z")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/ResourceUtils.java b/src/test/java/com/gooddata/util/ResourceUtils.java index 63792c9fc..287766864 100644 --- a/src/test/java/com/gooddata/util/ResourceUtils.java +++ b/src/test/java/com/gooddata/util/ResourceUtils.java @@ -9,7 +9,7 @@ import static java.lang.String.format; import org.apache.commons.io.IOUtils; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java index bfc496698..893e4e90f 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java @@ -3,7 +3,7 @@ import static org.hamcrest.core.Is.is; import static org.hamcrest.MatcherAssert.*; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTest.java index 2d92784fd..18a0866e9 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTest.java @@ -6,7 +6,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import com.gooddata.project.Environment; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java index 8002d77bc..2cb76b5d9 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java @@ -1,6 +1,6 @@ package com.gooddata.warehouse; -import org.codehaus.jackson.map.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.util.LinkedHashMap; From 8ed66aa0f5526e7ed2c9a4263d42f9dbb40cfdc6 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 19 Nov 2015 10:28:08 +0100 Subject: [PATCH 007/934] change group id add link to upgrading Group id and version in readme will be changed once released Close #242 --- README.md | 4 +++- pom.xml | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 121341c36..f841627a3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ and currently the SDK is transitioned to be an official GoodData project. ## Usage -See [Wiki](https://github.com/martiner/gooddata-java/wiki) for [Code Examples](https://github.com/martiner/gooddata-java/wiki/Code-Examples) +See [Wiki](https://github.com/martiner/gooddata-java/wiki) for +[Upgrading Guide](https://github.com/martiner/gooddata-java/wiki/Upgrading-GoodData-Java-SDK), +[Code Examples](https://github.com/martiner/gooddata-java/wiki/Code-Examples) and [Extensibility How-To](https://github.com/martiner/gooddata-java/wiki/Extending-GoodData-Java-SDK). The *GoodData Java SDK* is available in Maven Central Repository, to use it from Maven add to `pom.xml`: diff --git a/pom.xml b/pom.xml index 77aaae571..66e4188f0 100644 --- a/pom.xml +++ b/pom.xml @@ -2,9 +2,9 @@ 4.0.0 - cz.geek + com.gooddata gooddata-java - 0.23.1-SNAPSHOT + 1.0.0-SNAPSHOT ${project.artifactId} GoodData Java SDK From b7e8926a794165d1476ddad215cb87af47dbf7ab Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 20 Nov 2015 09:58:42 +0100 Subject: [PATCH 008/934] fix: use fixed version of gooddata-http-client with correct logout request recongnition The 0.9.2 version has fixed logout, but only for calls of execute method with host. 0.9.3 correctly detects also the situation when full uri is given in http method. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 66e4188f0..4f9e9d206 100644 --- a/pom.xml +++ b/pom.xml @@ -237,7 +237,7 @@ com.gooddata gooddata-http-client - 0.9.2 + 0.9.3 commons-lang From 515fc2a4e37fa54445b028da6e006915814dfe6c Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Sat, 15 Aug 2015 12:36:36 +0200 Subject: [PATCH 009/934] Use GoodData HTTP client in DataStoreService Replace user+login authentication with GoodData authentication which is a prerequisite for authentitacion with SST --- src/main/java/com/gooddata/GoodData.java | 13 +- .../com/gooddata/gdc/DataStoreService.java | 271 +++++++++++++++++- 2 files changed, 272 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index b135b13ed..eaef2ce84 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -164,16 +164,17 @@ protected GoodData(String hostname, String login, String password, int port, Str notEmpty(login, "login"); notEmpty(password, "password"); notEmpty(protocol, "protocol"); - final HttpClientBuilder httpClientBuilder = createHttpClientBuilder(settings); + final HttpClient httpClient = createHttpClient(login, password, hostname, port, protocol, + createHttpClientBuilder(settings)); - restTemplate = createRestTemplate(login, password, hostname, httpClientBuilder, port, protocol); + restTemplate = createRestTemplate(hostname, httpClient, port, protocol); accountService = new AccountService(getRestTemplate()); projectService = new ProjectService(getRestTemplate(), accountService); metadataService = new MetadataService(getRestTemplate()); modelService = new ModelService(getRestTemplate()); gdcService = new GdcService(getRestTemplate()); - dataStoreService = new DataStoreService(httpClientBuilder, gdcService, new HttpHost(hostname, port, protocol).toURI(), login, password); + dataStoreService = new DataStoreService(httpClient, gdcService, new HttpHost(hostname, port, protocol).toURI()); datasetService = new DatasetService(getRestTemplate(), dataStoreService); reportService = new ReportService(getRestTemplate()); processService = new ProcessService(getRestTemplate(), accountService, dataStoreService); @@ -181,12 +182,10 @@ protected GoodData(String hostname, String login, String password, int port, Str connectorService = new ConnectorService(getRestTemplate(), projectService); } - private RestTemplate createRestTemplate(String login, String password, String hostname, HttpClientBuilder builder, - int port, String protocol) { - final HttpClient client = createHttpClient(login, password, hostname, port, protocol, builder); + private RestTemplate createRestTemplate(String hostname, HttpClient httpClient, int port, String protocol) { final UriPrefixingClientHttpRequestFactory factory = new UriPrefixingClientHttpRequestFactory( - new HttpComponentsClientHttpRequestFactory(client), hostname, port, protocol); + new HttpComponentsClientHttpRequestFactory(httpClient), hostname, port, protocol); final RestTemplate restTemplate = new RestTemplate(factory); restTemplate.setInterceptors(Arrays.asList( new HeaderSettingRequestInterceptor(singletonMap("Accept", getAcceptHeaderValue())))); diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index 9ac1d58c8..8f1e13e53 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -6,11 +6,30 @@ import com.github.sardine.Sardine; import com.github.sardine.impl.SardineImpl; import com.gooddata.UriPrefixer; +import org.apache.commons.lang.Validate; +import org.apache.http.Header; +import org.apache.http.HeaderIterator; +import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; +import org.apache.http.ProtocolVersion; +import org.apache.http.StatusLine; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.params.HttpParams; +import org.apache.http.protocol.HttpContext; import java.io.IOException; import java.io.InputStream; import java.net.URI; +import java.util.Locale; import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; @@ -28,16 +47,14 @@ public class DataStoreService { /** * Creates new DataStoreService - * @param httClientBuilder httpClientBuilder to build datastore connection + * @param httpClient httpClient to make datastore connection * @param gdcService used to obtain datastore URI * @param gdcUri complete GDC URI used to prefix possibly relative datastore path - * @param user datastore user - * @param pass datastore password */ - public DataStoreService(HttpClientBuilder httClientBuilder, GdcService gdcService, String gdcUri, String user, String pass) { + public DataStoreService(HttpClient httpClient, GdcService gdcService, String gdcUri) { this.gdcService = notNull(gdcService, "gdcService"); this.gdcUri = URI.create(notEmpty(gdcUri, "gdcUri")); - sardine = new SardineImpl(httClientBuilder, user, pass); + sardine = new SardineImpl(new CustomHttpClientBuilder(httpClient)); } private UriPrefixer getPrefixer() { @@ -109,4 +126,248 @@ public void delete(String path) { throw new DataStoreException("Unable to delete " + uri, e); } } + + /** + * This class is needed to provide Sardine with instance of {@link CloseableHttpClient}, because + * used {@link com.gooddata.http.client.GoodDataHttpClient} is not Closeable at all (on purpose). + * Thanks to that we can use proper GoodData authentication mechanism instead of basic auth. + * + * It creates simple closeable wrapper around plain {@link HttpClient} where {@code close()} + * is implemented as noop (respectively for the response used). + */ + private static class CustomHttpClientBuilder extends HttpClientBuilder { + + private final HttpClient client; + + private CustomHttpClientBuilder(HttpClient client) { + this.client = client; + } + + @Override + public CloseableHttpClient build() { + return new FakeCloseableHttpClient(client); + } + } + + private static class FakeCloseableHttpClient extends CloseableHttpClient { + private final HttpClient client; + + private FakeCloseableHttpClient(HttpClient client) { + notNull(client, "client can't be null"); + this.client = client; + } + + @Override + protected CloseableHttpResponse doExecute(HttpHost target, HttpRequest request, HttpContext context) throws IOException, ClientProtocolException { + // nothing to do - this method is never called, because we override all methods from CloseableHttpClient + return null; + } + + @Override + public void close() throws IOException { + // nothing to close - wrappedClient doesn't have to implement CloseableHttpClient + } + + @Override + @Deprecated + public HttpParams getParams() { + return client.getParams(); + } + + @Override + @Deprecated + public ClientConnectionManager getConnectionManager() { + return client.getConnectionManager(); + } + + @Override + public CloseableHttpResponse execute(HttpUriRequest request) throws IOException, ClientProtocolException { + return new FakeCloseableHttpResponse(client.execute(request)); + } + + @Override + public CloseableHttpResponse execute(HttpUriRequest request, HttpContext context) throws IOException, ClientProtocolException { + return new FakeCloseableHttpResponse(client.execute(request, context)); + } + + @Override + public CloseableHttpResponse execute(HttpHost target, HttpRequest request) throws IOException, ClientProtocolException { + return new FakeCloseableHttpResponse(client.execute(target, request)); + } + + @Override + public CloseableHttpResponse execute(HttpHost target, HttpRequest request, HttpContext context) throws IOException, ClientProtocolException { + return new FakeCloseableHttpResponse(client.execute(target, request, context)); + } + + @Override + public T execute(HttpUriRequest request, ResponseHandler responseHandler) throws IOException, ClientProtocolException { + return client.execute(request, responseHandler); + } + + @Override + public T execute(HttpUriRequest request, ResponseHandler responseHandler, HttpContext context) throws IOException, ClientProtocolException { + return client.execute(request, responseHandler, context); + } + + @Override + public T execute(HttpHost target, HttpRequest request, ResponseHandler responseHandler) throws IOException, ClientProtocolException { + return client.execute(target, request, responseHandler); + } + + @Override + public T execute(HttpHost target, HttpRequest request, ResponseHandler responseHandler, HttpContext context) throws IOException, ClientProtocolException { + return client.execute(target, request, responseHandler, context); + } + } + + private static class FakeCloseableHttpResponse implements CloseableHttpResponse { + + private final HttpResponse wrappedResponse; + + public FakeCloseableHttpResponse(HttpResponse wrappedResponse) { + Validate.notNull(wrappedResponse, "wrappedResponse cannot be null!"); + this.wrappedResponse = wrappedResponse; + } + + @Override + public void close() throws IOException { + // nothing to close - wrappedClient doesn't have to implement CloseableHttpResponse + } + + @Override + public StatusLine getStatusLine() { + return wrappedResponse.getStatusLine(); + } + + @Override + public void setStatusLine(StatusLine statusline) { + wrappedResponse.setStatusLine(statusline); + } + + @Override + public void setStatusLine(ProtocolVersion ver, int code) { + wrappedResponse.setStatusLine(ver, code); + } + + @Override + public void setStatusLine(ProtocolVersion ver, int code, String reason) { + wrappedResponse.setStatusLine(ver, code, reason); + } + + @Override + public void setStatusCode(int code) throws IllegalStateException { + wrappedResponse.setStatusCode(code); + } + + @Override + public void setReasonPhrase(String reason) throws IllegalStateException { + wrappedResponse.setReasonPhrase(reason); + } + + @Override + public HttpEntity getEntity() { + return wrappedResponse.getEntity(); + } + + @Override + public void setEntity(HttpEntity entity) { + wrappedResponse.setEntity(entity); + } + + @Override + public Locale getLocale() { + return wrappedResponse.getLocale(); + } + + @Override + public void setLocale(Locale loc) { + wrappedResponse.setLocale(loc); + } + + @Override + public ProtocolVersion getProtocolVersion() { + return wrappedResponse.getProtocolVersion(); + } + + @Override + public boolean containsHeader(String name) { + return wrappedResponse.containsHeader(name); + } + + @Override + public Header[] getHeaders(String name) { + return wrappedResponse.getHeaders(name); + } + + @Override + public Header getFirstHeader(String name) { + return wrappedResponse.getFirstHeader(name); + } + + @Override + public Header getLastHeader(String name) { + return wrappedResponse.getLastHeader(name); + } + + @Override + public Header[] getAllHeaders() { + return wrappedResponse.getAllHeaders(); + } + + @Override + public void addHeader(Header header) { + wrappedResponse.addHeader(header); + } + + @Override + public void addHeader(String name, String value) { + wrappedResponse.addHeader(name, value); + } + + @Override + public void setHeader(Header header) { + wrappedResponse.setHeader(header); + } + + @Override + public void setHeader(String name, String value) { + wrappedResponse.setHeader(name, value); + } + + @Override + public void setHeaders(Header[] headers) { + wrappedResponse.setHeaders(headers); + } + + @Override + public void removeHeader(Header header) { + wrappedResponse.removeHeader(header); + } + + @Override + public void removeHeaders(String name) { + wrappedResponse.removeHeaders(name); + } + + @Override + public HeaderIterator headerIterator() { + return wrappedResponse.headerIterator(); + } + + @Override + public HeaderIterator headerIterator(String name) { + return wrappedResponse.headerIterator(name); + } + + @Override + public HttpParams getParams() { + return wrappedResponse.getParams(); + } + + @Override + public void setParams(HttpParams params) { + wrappedResponse.setParams(params); + } + } } From 0f4a1ac8f8688a71199cb4088f238c18be145093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C5=A0tumpf?= Date: Thu, 19 Nov 2015 18:01:16 +0100 Subject: [PATCH 010/934] FEATURE: add JDBC connection URL to Warehouse instance Conflicts: pom.xml --- src/main/java/com/gooddata/GoodData.java | 2 +- .../com/gooddata/warehouse/Warehouse.java | 42 +++++++++---------- .../gooddata/warehouse/WarehouseService.java | 31 +++----------- .../warehouse/WarehouseServiceAT.java | 2 +- .../warehouse/WarehouseServiceIT.java | 7 +++- .../com/gooddata/warehouse/WarehouseTest.java | 7 +++- .../warehouse/warehouse-null-token.json | 1 + src/test/resources/warehouse/warehouse.json | 1 + src/test/resources/warehouse/warehouses.json | 2 + 9 files changed, 41 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 91ce4b44e..30960b150 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -185,7 +185,7 @@ protected GoodData(String hostname, String login, String password, int port, Str datasetService = new DatasetService(getRestTemplate(), dataStoreService); reportService = new ReportService(getRestTemplate()); processService = new ProcessService(getRestTemplate(), accountService, dataStoreService); - warehouseService = new WarehouseService(getRestTemplate(), hostname, port); + warehouseService = new WarehouseService(getRestTemplate()); connectorService = new ConnectorService(getRestTemplate(), projectService); } diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index e0649597d..1b2f04225 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -32,7 +32,6 @@ public class Warehouse { public static final String URI = Warehouses.URI + "/{" + ID_PARAM + "}"; public static final UriTemplate TEMPLATE = new UriTemplate(URI); - public static final UriTemplate JDBC_CONNECTION_TEMPLATE = new UriTemplate("jdbc:gdc:datawarehouse://{host}:{port}/gdc/datawarehouse/instances/{id}"); private static final String SELF_LINK = "self"; private static final String STATUS_ENABLED = "ENABLED"; @@ -48,9 +47,7 @@ public class Warehouse { private String status; private String environment; private Map links; - - private String warehouseHost; - private int warehousePort = 443; + private String connectionUrl; public Warehouse(String title, String authToken) { this(title, authToken, null); @@ -64,12 +61,13 @@ public Warehouse(String title, String authToken, String description) { @JsonCreator public Warehouse(@JsonProperty("title") String title, @JsonProperty("authorizationToken") String authToken, - @JsonProperty("description") String description, - @JsonProperty("created") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime created, - @JsonProperty("updated") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime updated, - @JsonProperty("createdBy") String createdBy, @JsonProperty("updatedBy") String updatedBy, - @JsonProperty("status") String status, @JsonProperty("environment") String environment, - @JsonProperty("links") Map links) { + @JsonProperty("description") String description, + @JsonProperty("created") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime created, + @JsonProperty("updated") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime updated, + @JsonProperty("createdBy") String createdBy, @JsonProperty("updatedBy") String updatedBy, + @JsonProperty("status") String status, @JsonProperty("environment") String environment, + @JsonProperty("connectionUrl") String connectionUrl, + @JsonProperty("links") Map links) { this(title, authToken, description); this.created = created; this.updated = updated; @@ -77,6 +75,7 @@ public Warehouse(@JsonProperty("title") String title, @JsonProperty("authorizati this.updatedBy = updatedBy; this.status = status; this.environment = environment; + this.connectionUrl = connectionUrl; this.links = links; } @@ -92,6 +91,13 @@ public String getDescription() { return description; } + /** + * Gets the JDBC connection string. + * + * @return JDBC connection string + */ + public String getConnectionUrl() { return connectionUrl; } + public void setTitle(String title) { this.title = title; } @@ -122,14 +128,6 @@ public String getStatus() { return status; } - void setWarehouseHost(String warehouseHost) { - this.warehouseHost = warehouseHost; - } - - void setWarehousePort(int warehousePort) { - this.warehousePort = warehousePort; - } - public String getEnvironment() { return environment; } @@ -149,15 +147,13 @@ public Map getLinks() { /** * Get jdbc connection string. Works only on Warehouse loaded from API (using WarehouseService). + * @deprecated Use {@link #getConnectionUrl()} instead. * @return jdbc connection string */ @JsonIgnore + @Deprecated public String getJdbcConnectionString() { - if (warehouseHost == null) { - throw new IllegalStateException("Please set warehouseHost " + - "to be able to construct jdbc connection string"); - } - return JDBC_CONNECTION_TEMPLATE.expand(warehouseHost, warehousePort, getId()).toString(); + return getConnectionUrl(); } @JsonIgnore diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index 5f978d8a2..a9a1037c1 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -10,6 +10,7 @@ import com.gooddata.collections.PageableList; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; +import org.springframework.util.StringUtils; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -25,21 +26,14 @@ */ public class WarehouseService extends AbstractService { - private final String warehouseHost; - private final int warehousePort; - /** * Sets RESTful HTTP Spring template. Should be called from constructor of concrete service extending * this abstract one. * * @param restTemplate RESTful HTTP Spring template - * @param warehouseHost host to connect warehouses - * @param warehousePort port to connect warehouses */ - public WarehouseService(RestTemplate restTemplate, String warehouseHost, int warehousePort) { + public WarehouseService(RestTemplate restTemplate) { super(restTemplate); - this.warehouseHost = notNull(warehouseHost, "warehouseHost"); - this.warehousePort = warehousePort; } /** @@ -80,7 +74,7 @@ protected void onFinish() { public void handlePollResult(WarehouseTask pollResult) { try { final Warehouse warehouse = restTemplate.getForObject(pollResult.getWarehouseLink(), Warehouse.class); - setResult(setWarehouseConnection(warehouse)); + setResult(warehouse); } catch (GoodDataException | RestClientException e) { throw new GoodDataException("Warehouse creation finished, but can't get created warehouse, uri: " + pollResult.getWarehouseLink(), e); @@ -116,7 +110,7 @@ public void removeWarehouse(Warehouse warehouse) { public Warehouse getWarehouseByUri(String uri) { notEmpty(uri, "uri"); try { - return setWarehouseConnection(restTemplate.getForObject(uri, Warehouse.class)); + return restTemplate.getForObject(uri, Warehouse.class); } catch (GoodDataRestException e) { if (HttpStatus.NOT_FOUND.value() == e.getStatusCode()) { throw new WarehouseNotFoundException(uri, e); @@ -171,7 +165,7 @@ private PageableList listWarehouses(final URI uri) { if (result == null) { return new PageableList<>(); } - return setWarehouseConnection(result); + return result; } catch (GoodDataException | RestClientException e) { throw new GoodDataException("Unable to list Warehouses", e); } @@ -257,19 +251,4 @@ public Warehouse updateWarehouse(Warehouse toUpdate) { return getWarehouseByUri(toUpdate.getUri()); } - - private Warehouse setWarehouseConnection(Warehouse warehouse) { - notNull(warehouse, "warehouse"); - warehouse.setWarehouseHost(warehouseHost); - warehouse.setWarehousePort(warehousePort); - return warehouse; - } - - private PageableList setWarehouseConnection(PageableList warehouses) { - notNull(warehouses, "warehouses"); - for (Warehouse warehouse : warehouses) { - setWarehouseConnection(warehouse); - } - return warehouses; - } } diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java index fac69398b..56c8c15f6 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java @@ -39,7 +39,7 @@ public void createWarehouse() throws Exception { final Warehouse wh = new Warehouse(title, warehouseToken); wh.setEnvironment(Environment.TESTING); warehouse = service.createWarehouse(wh).get(); - String jdbc = warehouse.getJdbcConnectionString(); + String jdbc = warehouse.getConnectionUrl(); } @Test(groups = "warehouse", dependsOnMethods = "createWarehouse") diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java index f3d42e372..e7ef9e1d7 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java @@ -34,6 +34,8 @@ public class WarehouseServiceIT extends AbstractGoodDataIT { private static final String WAREHOUSE_URI = Warehouse.TEMPLATE.expand(WAREHOUSE_ID).toString(); private static final String WAREHOUSE_USER_URI = WarehouseUsers.TEMPLATE.expand(WAREHOUSE_ID).toString(); + private static final String CONNECTION_URL = "CONNECTION_URL"; + private WarehouseTask pollingTask; private WarehouseTask finishedTask; private Warehouse warehouse; @@ -71,7 +73,7 @@ public void shouldCreateWarehouse() throws Exception { final Warehouse created = gd.getWarehouseService().createWarehouse(new Warehouse(TITLE, "{Token}", "Storage")).get(); assertThat(created, notNullValue()); assertThat(created.getTitle(), is(TITLE)); - assertThat(created.getJdbcConnectionString(), is("jdbc:gdc:datawarehouse://localhost:" + port() + WAREHOUSE_URI)); + assertThat(created.getConnectionUrl(), is(CONNECTION_URL)); } @Test(expectedExceptions = GoodDataException.class) @@ -103,6 +105,8 @@ public void shouldListWarehouses() throws Exception { final PageableList list = gd.getWarehouseService().listWarehouses(); assertThat(list, notNullValue()); assertThat(list, hasSize(2)); + assertThat(list.get(0).getConnectionUrl(), notNullValue()); + assertThat(list.get(1).getConnectionUrl(), notNullValue()); } @Test @@ -128,6 +132,7 @@ public void shouldGetWarehouse() throws Exception { final Warehouse warehouse = gd.getWarehouseService().getWarehouseById(WAREHOUSE_ID); assertThat(warehouse, notNullValue()); assertThat(warehouse.getTitle(), is(TITLE)); + assertThat(warehouse.getConnectionUrl(), notNullValue()); } @Test diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTest.java index 2d92784fd..7f548ace0 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTest.java @@ -26,6 +26,7 @@ public class WarehouseTest { public static final String CREATED_BY = "/gdc/account/profile/createdBy"; public static final String UPDATED_BY = "/gdc/account/profile/updatedBy"; public static final String STATUS = "ENABLED"; + public static final String CONNECTION_URL = "CONNECTION_URL"; public static final Map LINKS = new LinkedHashMap() {{ put("self", "/gdc/datawarehouse/instances/instanceId"); put("parent", "/gdc/datawarehouse/instances"); @@ -42,13 +43,13 @@ public void testSerializationForInstanceCreation() throws Exception { @Test public void testSerialization() throws Exception { - final Warehouse warehouse = new Warehouse(TITLE, TOKEN, DESCRIPTION, CREATED, UPDATED, CREATED_BY, UPDATED_BY, STATUS, ENVIRONMENT, LINKS); + final Warehouse warehouse = new Warehouse(TITLE, TOKEN, DESCRIPTION, CREATED, UPDATED, CREATED_BY, UPDATED_BY, STATUS, ENVIRONMENT, CONNECTION_URL, LINKS); assertThat(warehouse, serializesToJson("/warehouse/warehouse.json")); } @Test public void testSerializationWithNullToken() throws Exception { - final Warehouse warehouse = new Warehouse(TITLE, null, DESCRIPTION, CREATED, UPDATED, CREATED_BY, UPDATED_BY, STATUS, ENVIRONMENT, LINKS); + final Warehouse warehouse = new Warehouse(TITLE, null, DESCRIPTION, CREATED, UPDATED, CREATED_BY, UPDATED_BY, STATUS, ENVIRONMENT, CONNECTION_URL, LINKS); assertThat(warehouse, serializesToJson("/warehouse/warehouse-null-token.json")); } @@ -67,6 +68,7 @@ public void testDeserialization() throws Exception { assertThat(warehouse.getUpdated(), is(UPDATED)); assertThat(warehouse.getStatus(), is(STATUS)); assertThat(warehouse.getLinks(), is(LINKS)); + assertThat(warehouse.getConnectionUrl(), is(CONNECTION_URL)); } @Test @@ -84,5 +86,6 @@ public void testDeserializationWithNullToken() throws Exception { assertThat(warehouse.getUpdated(), is(UPDATED)); assertThat(warehouse.getStatus(), is(STATUS)); assertThat(warehouse.getLinks(), is(LINKS)); + assertThat(warehouse.getConnectionUrl(), is(CONNECTION_URL)); } } diff --git a/src/test/resources/warehouse/warehouse-null-token.json b/src/test/resources/warehouse/warehouse-null-token.json index 708b11db6..4bafa4c50 100644 --- a/src/test/resources/warehouse/warehouse-null-token.json +++ b/src/test/resources/warehouse/warehouse-null-token.json @@ -8,6 +8,7 @@ "createdBy" : "/gdc/account/profile/createdBy", "updatedBy" : "/gdc/account/profile/updatedBy", "environment" : "TESTING", + "connectionUrl" : "CONNECTION_URL", "links" : { "self" : "/gdc/datawarehouse/instances/instanceId", "parent" : "/gdc/datawarehouse/instances", diff --git a/src/test/resources/warehouse/warehouse.json b/src/test/resources/warehouse/warehouse.json index 29deb45e5..971150215 100644 --- a/src/test/resources/warehouse/warehouse.json +++ b/src/test/resources/warehouse/warehouse.json @@ -9,6 +9,7 @@ "createdBy" : "/gdc/account/profile/createdBy", "updatedBy" : "/gdc/account/profile/updatedBy", "environment" : "TESTING", + "connectionUrl" : "CONNECTION_URL", "links" : { "self" : "/gdc/datawarehouse/instances/instanceId", "parent" : "/gdc/datawarehouse/instances", diff --git a/src/test/resources/warehouse/warehouses.json b/src/test/resources/warehouse/warehouses.json index 919eca8ef..f9deee1f8 100644 --- a/src/test/resources/warehouse/warehouses.json +++ b/src/test/resources/warehouse/warehouses.json @@ -10,6 +10,7 @@ "updated" : "2014-03-17T13:02:41.000Z", "createdBy" : "/gdc/account/profile/{profile-id}", "updatedBy" : "/gdc/account/profile/{profile-id}", + "connectionUrl" : "test", "links" : { "self" : "/gdc/datawarehouse/instances/{instance-id}", "parent" : "/gdc/datawarehouse/instances", @@ -27,6 +28,7 @@ "updated" : "2014-04-09T22:10:26.000Z", "createdBy" : "/gdc/account/profile/{profile-id}", "updatedBy" : "/gdc/account/profile/{profile-id}", + "connectionUrl" : "test", "links" : { "self" : "/gdc/datawarehouse/instances/{instance-id}", "parent" : "/gdc/datawarehouse/instances", From 217507560b0a352af9bcb2a952c19a057e2199f7 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 24 Nov 2015 10:18:42 +0100 Subject: [PATCH 011/934] [maven-release-plugin] prepare release gooddata-java-1.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4f9e9d206..53a2c3930 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.0.0-SNAPSHOT + 1.0.0 ${project.artifactId} GoodData Java SDK From 44271f28e067959eb863ba9d36faff5431183b0a Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 24 Nov 2015 10:18:42 +0100 Subject: [PATCH 012/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 53a2c3930..5b4d0d87a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.0.0 + 1.0.1-SNAPSHOT ${project.artifactId} GoodData Java SDK From fa2204327bc2b3b99d111c3a24ffdb81884895fd Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 24 Nov 2015 10:26:10 +0100 Subject: [PATCH 013/934] change group id and version --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f841627a3..9c639b528 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from ```xml - cz.geek + com.gooddata gooddata-java - 0.23.0 + 1.0.0 ``` From a2e138e84ec2a5d93119d15372a6311b82716747 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 30 Nov 2015 13:58:44 +0100 Subject: [PATCH 014/934] [maven-release-plugin] prepare release gooddata-java-1.1.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5b4d0d87a..4a6f81a35 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.0.1-SNAPSHOT + 1.1.0 ${project.artifactId} GoodData Java SDK From 7102222badde8449cb5821f17c8b1817535dd0e3 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 30 Nov 2015 13:58:44 +0100 Subject: [PATCH 015/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4a6f81a35..67fa6a255 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.1.0 + 1.1.1-SNAPSHOT ${project.artifactId} GoodData Java SDK From 2305e4903c30db8eee3ed7b8d9474d6014fa3633 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 30 Nov 2015 14:06:41 +0100 Subject: [PATCH 016/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c639b528..b783a1634 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.0.0 + 1.1.0 ``` From 167cd69933df9f470c981adc03d556e8725e09d8 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 30 Nov 2015 14:08:06 +0100 Subject: [PATCH 017/934] fix: group id in maven badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b783a1634..c6aa0eca5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# GoodData Java SDK [![Build Status](https://travis-ci.org/martiner/gooddata-java.png?branch=master)](https://travis-ci.org/martiner/gooddata-java) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/cz.geek/gooddata-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/cz.geek/gooddata-java) +# GoodData Java SDK [![Build Status](https://travis-ci.org/martiner/gooddata-java.png?branch=master)](https://travis-ci.org/martiner/gooddata-java) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java) The *GoodData Java SDK* encapsulates the REST API provided by the [GoodData](http://www.gooddata.com) platform. The first version was implemented during the [All Data Hackathon](http://hackathon.gooddata.com) April 10 - 11 2014 From 79956f66b416851781a625b5eca4007817df3cd9 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 3 Dec 2015 15:33:19 +0100 Subject: [PATCH 018/934] add folder to facts --- src/main/java/com/gooddata/md/Fact.java | 22 +++++++++++++++++---- src/test/java/com/gooddata/md/FactTest.java | 4 +++- src/test/resources/md/fact-input.json | 3 +++ src/test/resources/md/fact.json | 4 ++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gooddata/md/Fact.java b/src/main/java/com/gooddata/md/Fact.java index df7c6471f..adfe714d8 100644 --- a/src/main/java/com/gooddata/md/Fact.java +++ b/src/main/java/com/gooddata/md/Fact.java @@ -12,7 +12,7 @@ import java.util.Collection; -import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; /** * Fact of GoodData project dataset @@ -32,9 +32,9 @@ private Fact(@JsonProperty("meta") Meta meta, @JsonProperty("content") Content c } /* Just for serialization test */ - Fact(String title, String data, String type) { + Fact(String title, String data, String type, String folder) { super(new Meta(title)); - content = new Content(asList(new Expression(data, type))); + content = new Content(singletonList(new Expression(data, type)), singletonList(folder)); } @JsonIgnore @@ -42,18 +42,32 @@ public Collection getExpressions() { return content.getExpression(); } + @JsonIgnore + public Collection getFolders() { + return content.getFolders(); + } + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private static class Content { @JsonProperty("expr") private final Collection expression; + @JsonProperty("folders") + private final Collection folders; + @JsonCreator - public Content(@JsonProperty("expr") Collection expression) { + public Content(@JsonProperty("expr") Collection expression, @JsonProperty("folders") Collection folders) { this.expression = expression; + this.folders = folders; } public Collection getExpression() { return expression; } + + public Collection getFolders() { + return folders; + } } } diff --git a/src/test/java/com/gooddata/md/FactTest.java b/src/test/java/com/gooddata/md/FactTest.java index 88ae457d0..a8c2fdf58 100644 --- a/src/test/java/com/gooddata/md/FactTest.java +++ b/src/test/java/com/gooddata/md/FactTest.java @@ -20,11 +20,13 @@ public void testDeserialization() throws Exception { assertThat(fact, is(notNullValue())); assertThat(fact.getExpressions(), is(notNullValue())); assertThat(fact.getExpressions(), hasSize(1)); + assertThat(fact.getFolders(), is(notNullValue())); + assertThat(fact.getFolders(), hasSize(2)); } @Test public void testSerialization() throws Exception { - final Fact fact = new Fact("Person Shoe Size", "/gdc/md/PROJECT_ID/obj/COL_ID", "col"); + final Fact fact = new Fact("Person Shoe Size", "/gdc/md/PROJECT_ID/obj/COL_ID", "col", "/gdc/md/PROJECT_ID/obj/FOLDER_ID"); assertThat(fact, serializesToJson("/md/fact-input.json")); } diff --git a/src/test/resources/md/fact-input.json b/src/test/resources/md/fact-input.json index 022d842e4..54fcc4aa9 100644 --- a/src/test/resources/md/fact-input.json +++ b/src/test/resources/md/fact-input.json @@ -6,6 +6,9 @@ "data" : "/gdc/md/PROJECT_ID/obj/COL_ID", "type" : "col" } + ], + "folders" : [ + "/gdc/md/PROJECT_ID/obj/FOLDER_ID" ] }, "meta" : { diff --git a/src/test/resources/md/fact.json b/src/test/resources/md/fact.json index 2a548a13e..c89971215 100644 --- a/src/test/resources/md/fact.json +++ b/src/test/resources/md/fact.json @@ -6,6 +6,10 @@ "data" : "/gdc/md/PROJECT_ID/obj/COL_ID", "type" : "col" } + ], + "folders" : [ + "/gdc/md/PROJECT_ID/obj/FOLDER_ID", + "/gdc/md/PROJECT_ID/obj/FOLDER_ID2" ] }, "meta" : { From 8163088f747f1e11af5b19a4eaeec5bc67f6c39f Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 8 Dec 2015 09:28:58 +0100 Subject: [PATCH 019/934] [maven-release-plugin] prepare release gooddata-java-1.1.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 67fa6a255..9847d08f7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.1.1-SNAPSHOT + 1.1.1 ${project.artifactId} GoodData Java SDK From ccd65d11a212129edd117295d51edbb6680a62bc Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 8 Dec 2015 09:28:58 +0100 Subject: [PATCH 020/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9847d08f7..014d5bc1b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.1.1 + 1.1.2-SNAPSHOT ${project.artifactId} GoodData Java SDK From a335efdf1484f4db872300ca2b4ed0d9d82ad9c6 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 8 Dec 2015 09:52:41 +0100 Subject: [PATCH 021/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c6aa0eca5..89e8d005a 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.1.0 + 1.1.1 ``` From beeff5f64b1dcbe003309e4fe3da2c4a614cff5c Mon Sep 17 00:00:00 2001 From: Jakub Plichta Date: Wed, 6 Jan 2016 13:33:50 +0100 Subject: [PATCH 022/934] Extend GoodDataRestException with error code --- .../com/gooddata/GoodDataRestException.java | 33 +++++++++++++++++-- .../gooddata/GoodDataRestExceptionTest.java | 16 +++++++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gooddata/GoodDataRestException.java b/src/main/java/com/gooddata/GoodDataRestException.java index 7d117f05f..897f2406c 100644 --- a/src/main/java/com/gooddata/GoodDataRestException.java +++ b/src/main/java/com/gooddata/GoodDataRestException.java @@ -20,23 +20,40 @@ public class GoodDataRestException extends GoodDataException { private final String text; + private final String errorCode; + /** * Construct a GoodDataRestException with specified details. - * * @param statusCode the HTTP status code of the response * @param requestId the GoodData request ID (from header) * @param message the detail message * @param component the GoodData component where error occurred * @param errorClass the class of the error + * @param errorCode the code of the error */ public GoodDataRestException(int statusCode, String requestId, String message, String component, - String errorClass) { + String errorClass, String errorCode) { super(statusCode + (requestId != null ? ": [requestId=" + requestId + "] " : ": ") + message); this.statusCode = statusCode; this.requestId = requestId; this.component = component; this.errorClass = errorClass; this.text = message; + this.errorCode = errorCode; + } + + /** + * Construct a GoodDataRestException with specified details. + * + * @param statusCode the HTTP status code of the response + * @param requestId the GoodData request ID (from header) + * @param message the detail message + * @param component the GoodData component where error occurred + * @param errorClass the class of the error + */ + public GoodDataRestException(int statusCode, String requestId, String message, String component, + String errorClass) { + this(statusCode, requestId, message, component, errorClass, null); } /** @@ -52,7 +69,8 @@ public GoodDataRestException(int statusCode, String requestId, String statusText error != null && error.getRequestId() != null ? error.getRequestId() : requestId, error != null && error.getMessage() != null ? error.getFormattedMessage() : statusText, error != null ? error.getComponent() : null, - error != null ? error.getErrorClass() : null); + error != null ? error.getErrorClass() : null, + error != null ? error.getErrorCode() : null); } /** @@ -91,6 +109,15 @@ public String getErrorClass() { return errorClass; } + /** + * Get the code of the error + * + * @return the code of the error + */ + public String getErrorCode() { + return errorCode; + } + /** * Text message describing the error * @return text message diff --git a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java index cc286d299..6bc002b1f 100644 --- a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java +++ b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java @@ -16,6 +16,18 @@ public class GoodDataRestExceptionTest { @Test public void shouldCreateDefaultInstance() throws Exception { + final GoodDataRestException e = new GoodDataRestException(500, "a123", "message", "component", "gdc.error", "code"); + assertThat(e.getMessage(), is("500: [requestId=a123] message")); + assertThat(e.getStatusCode(), is(500)); + assertThat(e.getRequestId(), is("a123")); + assertThat(e.getText(), is("message")); + assertThat(e.getComponent(), is("component")); + assertThat(e.getErrorClass(), is("gdc.error")); + assertThat(e.getErrorCode(), is("code")); + } + + @Test + public void shouldCreateDefaultInstanceWithoutErrorCode() throws Exception { final GoodDataRestException e = new GoodDataRestException(500, "a123", "message", "component", "gdc.error"); assertThat(e.getMessage(), is("500: [requestId=a123] message")); assertThat(e.getStatusCode(), is(500)); @@ -56,6 +68,6 @@ public void shouldCreateInstanceWithGdcError() throws Exception { assertThat(e.getErrorClass(), is("CLASS")); assertThat(e.getComponent(), is("COMPONENT")); assertThat(e.getRequestId(), is("REQ")); - + assertThat(e.getErrorCode(), is("CODE")); } -} \ No newline at end of file +} From db69c39d2b0ab8e8470f57d03d02b5de3895ceda Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 7 Jan 2016 14:13:39 +0100 Subject: [PATCH 023/934] [maven-release-plugin] prepare release gooddata-java-1.1.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 014d5bc1b..995ab2cba 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.1.2-SNAPSHOT + 1.1.2 ${project.artifactId} GoodData Java SDK From 8229e0e48c1a7afe762fff3f0f398c0c11a98df6 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 7 Jan 2016 14:13:40 +0100 Subject: [PATCH 024/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 995ab2cba..5c5c005d5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.1.2 + 1.1.3-SNAPSHOT ${project.artifactId} GoodData Java SDK From 1eaed843426d24b0e891180e9f38a0486a9d3059 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 7 Jan 2016 14:37:21 +0100 Subject: [PATCH 025/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 89e8d005a..23fadd282 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.1.1 + 1.1.2 ``` From 1eb91ccb9f1e29041200ed54337078631fc15ac4 Mon Sep 17 00:00:00 2001 From: Jakub Plichta Date: Tue, 12 Jan 2016 15:16:51 +0100 Subject: [PATCH 026/934] Add support for URI templates to collection pages --- .../java/com/gooddata/collections/Page.java | 25 ++++++++++++++++++ .../com/gooddata/collections/PageRequest.java | 8 +++++- .../com/gooddata/collections/UriPage.java | 26 ++++++++++++++++--- .../gooddata/collections/PageRequestTest.java | 18 ++++++++++++- .../com/gooddata/collections/UriPageTest.java | 26 ++++++++++++++++++- 5 files changed, 96 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gooddata/collections/Page.java b/src/main/java/com/gooddata/collections/Page.java index 08c02317c..ab374e7a5 100644 --- a/src/main/java/com/gooddata/collections/Page.java +++ b/src/main/java/com/gooddata/collections/Page.java @@ -1,5 +1,6 @@ package com.gooddata.collections; +import org.springframework.web.client.RestOperations; import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; @@ -11,9 +12,33 @@ public interface Page { /** * Creates {@link URI} for this page request. + *

+ * Use {@link #updateWithPageParams(UriComponentsBuilder)} if you have URI template and only want to update it with + * page query params. * * @param uriBuilder URI builder used for generating page URI * @return compiled page URI */ URI getPageUri(final UriComponentsBuilder uriBuilder); + + /** + * Updates provided URI builder query params according to this page configuration. + *

+ * As {@link #getPageUri(UriComponentsBuilder)} returns expanded page URI it is not very useful for cases that + * require use of URI template with URI variables. This method allows you to use URI templates and benefit + * from pagination support implemented in {@link Page} implementations. It is especially useful if you need to handle + * multiple requests of the same URI template in the same way - e.g. monitor request made by {@link RestOperations} + * methods. + *

+ * Use this in the situation when you have URI template with placeholders and URI variables separately. + * This method is useful when you have URI template with placeholders and only want to add query parameters based + * on this page to it. + *

+ * Use {@link #getPageUri(UriComponentsBuilder)} if you want to get concrete page URI and don't have URI template. + * + * @param uriBuilder URI builder used for constructing page URI + * @return provided and updated builder instance + * @see RestOperations + */ + UriComponentsBuilder updateWithPageParams(final UriComponentsBuilder uriBuilder); } diff --git a/src/main/java/com/gooddata/collections/PageRequest.java b/src/main/java/com/gooddata/collections/PageRequest.java index 2b4012a46..fa6f6fe59 100644 --- a/src/main/java/com/gooddata/collections/PageRequest.java +++ b/src/main/java/com/gooddata/collections/PageRequest.java @@ -46,11 +46,17 @@ public PageRequest(final int limit) { @Override public URI getPageUri(final UriComponentsBuilder uriBuilder) { notNull(uriBuilder, "uriBuilder"); + final UriComponentsBuilder copy = UriComponentsBuilder.fromUriString(uriBuilder.build().toUriString()); + return updateWithPageParams(copy).build().toUri(); + } + + @Override + public UriComponentsBuilder updateWithPageParams(final UriComponentsBuilder uriBuilder) { if (offset != null) { uriBuilder.queryParam("offset", offset); } uriBuilder.queryParam("limit", limit); - return uriBuilder.build().toUri(); + return uriBuilder; } @Override diff --git a/src/main/java/com/gooddata/collections/UriPage.java b/src/main/java/com/gooddata/collections/UriPage.java index 8905a49a3..f44a1a7d3 100644 --- a/src/main/java/com/gooddata/collections/UriPage.java +++ b/src/main/java/com/gooddata/collections/UriPage.java @@ -1,9 +1,11 @@ package com.gooddata.collections; +import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; -import org.springframework.web.util.UriTemplate; import java.net.URI; +import java.util.List; +import java.util.Map.Entry; import static com.gooddata.util.Validate.notNull; @@ -12,7 +14,7 @@ */ class UriPage implements Page { - private final URI pageUri; + private final UriComponents pageUri; /** * Creates new instance with defined page URI. @@ -20,7 +22,7 @@ class UriPage implements Page { * @param pageUri page URI */ public UriPage(final String pageUri) { - this.pageUri = new UriTemplate(notNull(pageUri, "pageUri")).expand(); + this.pageUri = UriComponentsBuilder.fromUriString(notNull(pageUri, "pageUri")).build(); } /** @@ -31,6 +33,22 @@ public UriPage(final String pageUri) { */ @Override public URI getPageUri(final UriComponentsBuilder uriBuilder) { - return pageUri; + return pageUri.toUri(); + } + + /** + * {@inheritDoc} + *

+ * Note that by using this method you might end up with URI that will be different from the one returned by + * {@link #getPageUri(UriComponentsBuilder)}. Method only copies query parameters and does not care about + * URI path. + */ + @Override + public UriComponentsBuilder updateWithPageParams(final UriComponentsBuilder uriBuilder) { + notNull(uriBuilder, "uriBuilder"); + for (Entry> entry : pageUri.getQueryParams().entrySet()) { + uriBuilder.queryParam(entry.getKey(), entry.getValue().toArray()); + } + return uriBuilder; } } diff --git a/src/test/java/com/gooddata/collections/PageRequestTest.java b/src/test/java/com/gooddata/collections/PageRequestTest.java index d70d0d279..a21c49180 100644 --- a/src/test/java/com/gooddata/collections/PageRequestTest.java +++ b/src/test/java/com/gooddata/collections/PageRequestTest.java @@ -28,4 +28,20 @@ public void testGetPageUriWithStringOffset() throws Exception { assertThat(pageUri, notNullValue()); assertThat(pageUri.toString(), is("test_uri?offset=17&limit=10")); } -} \ No newline at end of file + + @Test + public void testUpdateWithPageParams() throws Exception { + final PageRequest pageRequest = new PageRequest(12, 10); + final UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString("test_uri/{test}"); + final String pageUri = pageRequest.updateWithPageParams(uriBuilder).build().toUriString(); + assertThat(pageUri, is("test_uri/{test}?offset=12&limit=10")); + } + + @Test + public void testUpdateWithPageParamsWithStringOffset() throws Exception { + final PageRequest pageRequest = new PageRequest("17", 10); + final UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString("test_uri/{test}"); + final String pageUri = pageRequest.updateWithPageParams(uriBuilder).build().toUriString(); + assertThat(pageUri, is("test_uri/{test}?offset=17&limit=10")); + } +} diff --git a/src/test/java/com/gooddata/collections/UriPageTest.java b/src/test/java/com/gooddata/collections/UriPageTest.java index a068da13c..bfdefea22 100644 --- a/src/test/java/com/gooddata/collections/UriPageTest.java +++ b/src/test/java/com/gooddata/collections/UriPageTest.java @@ -1,10 +1,19 @@ package com.gooddata.collections; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; import org.testng.annotations.Test; +import java.util.Arrays; +import java.util.Collections; + +import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasEntry; +import static org.springframework.web.util.UriComponentsBuilder.fromUriString; import static org.testng.Assert.fail; public class UriPageTest { @@ -23,4 +32,19 @@ public void testGetPageUri() throws Exception { assertThat(uri.getPageUri(null).toString(), is("uri")); } -} \ No newline at end of file + @Test + public void test() throws Exception { + final UriPage uri = new UriPage("uri?offset=god&limit=10"); + final UriComponentsBuilder builder = fromUriString("/this/is/{template}").query("other=false"); + + uri.updateWithPageParams(builder); + + final UriComponents components = builder.build(); + assertThat(components, is(notNullValue())); + assertThat(components.getPath(), is("/this/is/{template}")); + assertThat(components.getQueryParams(), hasEntry("other", singletonList("false"))); + assertThat(components.getQueryParams(), hasEntry("offset", singletonList("god"))); + assertThat(components.getQueryParams(), hasEntry("limit", singletonList("10"))); + } + +} From 3b6cc3f69ef7e2d907897466b517469f7b854557 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 13 Jan 2016 13:37:19 +0100 Subject: [PATCH 027/934] [maven-release-plugin] prepare release gooddata-java-1.2.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5c5c005d5..fe6338d87 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.1.3-SNAPSHOT + 1.2.0 ${project.artifactId} GoodData Java SDK From c5e6d07e1c0cd3b48d012f169c79705290633a66 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 13 Jan 2016 13:37:19 +0100 Subject: [PATCH 028/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fe6338d87..eae47196d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.2.0 + 1.2.1-SNAPSHOT ${project.artifactId} GoodData Java SDK From cb6937e92af1207f65353944eb1fe044a4c7c715 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 13 Jan 2016 13:42:59 +0100 Subject: [PATCH 029/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 23fadd282..0afcb1fba 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.1.2 + 1.2.0 ``` From 51cb6030bd438edfe62c6a0dfb130d9ce85d22d4 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 15 Jan 2016 21:02:30 +0100 Subject: [PATCH 030/934] bring back jdbc connection template removed villainously by @ostumpf in #246 --- src/main/java/com/gooddata/warehouse/Warehouse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index 019a79819..d84612cae 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -32,6 +32,7 @@ public class Warehouse { public static final String URI = Warehouses.URI + "/{" + ID_PARAM + "}"; public static final UriTemplate TEMPLATE = new UriTemplate(URI); + public static final UriTemplate JDBC_CONNECTION_TEMPLATE = new UriTemplate("jdbc:gdc:datawarehouse://{host}:{port}/gdc/datawarehouse/instances/{id}"); private static final String SELF_LINK = "self"; private static final String STATUS_ENABLED = "ENABLED"; From 0b4ec691e408e08b04cf6ad091cf13b50226d2d6 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 15 Jan 2016 11:14:59 +0100 Subject: [PATCH 031/934] upgrade jackson to 2.7.0 Some optional boolean fields are now handled correctly in case of null value. In cases the getters were public, the "is*" methods were left for backward compatibility. --- README.md | 2 +- pom.xml | 2 +- .../com/gooddata/dataset/DatasetManifest.java | 14 ++++-- src/main/java/com/gooddata/md/Dataset.java | 8 ++-- src/main/java/com/gooddata/md/Entry.java | 43 +++++++++++++++---- 5 files changed, 51 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 0afcb1fba..4facfd885 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ The *GoodData Java SDK* uses: * the [GoodData HTTP client](https://github.com/gooddata/gooddata-http-client) version 0.8.2 or later * the *Apache HTTP Client* version 4.3 or later (for white-labeled domains at least version 4.3.2 is required) * the *Spring Framework* version 3.x -* the *Jackson JSON Processor* version 2.5.4 (*GoodData Java SDK* version 0.x requires version 1.9) +* the *Jackson JSON Processor* version 2.7.0 (*GoodData Java SDK* version 0.x requires version 1.9) * the *Java Development Kit (JDK)* version 7 or later ## License diff --git a/pom.xml b/pom.xml index eae47196d..7c594864c 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ UTF-8 UTF-8 4.3.3 - 2.5.4 + 2.7.0 3.2.13.RELEASE 1.1.1 1.5.3 diff --git a/src/main/java/com/gooddata/dataset/DatasetManifest.java b/src/main/java/com/gooddata/dataset/DatasetManifest.java index bd550678b..46accf68b 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifest.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifest.java @@ -130,14 +130,14 @@ public static class Part { private String uploadMode; private String columnName; private List populates; - private boolean referenceKey; + private Boolean referenceKey; private Map constraints; @JsonCreator Part(@JsonProperty("mode") String uploadMode, @JsonProperty("columnName") String columnName, @JsonProperty("populates") List populates, - @JsonProperty("referenceKey") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean referenceKey, + @JsonProperty("referenceKey") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean referenceKey, @JsonProperty("constraints") Map constraints) { this.uploadMode = uploadMode; this.columnName = columnName; @@ -170,8 +170,16 @@ public void setPopulates(List populates) { this.populates = populates; } - @JsonSerialize(using = BooleanIntegerSerializer.class) + /** + * @return true if the referenceKey is set and is true + */ + @JsonIgnore public boolean isReferenceKey() { + return Boolean.TRUE.equals(referenceKey); + } + + @JsonSerialize(using = BooleanIntegerSerializer.class) + public Boolean getReferenceKey() { return referenceKey; } diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index d3cbca018..412c6d21d 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -76,7 +76,7 @@ public List getAttributes() { @JsonIgnore public boolean hasUploadConfiguration() { - return content.hasUploadConfiguration(); + return Boolean.TRUE.equals(content.hasUploadConfiguration()); } @JsonIgnore @@ -96,7 +96,7 @@ private static class Content { private final List facts; private final List dataLoadingColumns; private final List attributes; - private final boolean hasUploadConfiguration; + private final Boolean hasUploadConfiguration; @JsonCreator private Content(@JsonProperty("ties") List ties, @@ -104,7 +104,7 @@ private Content(@JsonProperty("ties") List ties, @JsonProperty("facts") List facts, @JsonProperty("dataLoadingColumns") List dataLoadingColumns, @JsonProperty("attributes") List attributes, - @JsonProperty("hasUploadConfiguration") @JsonDeserialize(using = BooleanStringDeserializer.class) boolean hasUploadConfiguration) { + @JsonProperty("hasUploadConfiguration") @JsonDeserialize(using = BooleanStringDeserializer.class) Boolean hasUploadConfiguration) { this.ties = ties; this.mode = mode; this.facts = facts; @@ -135,7 +135,7 @@ public List getAttributes() { @JsonProperty("hasUploadConfiguration") @JsonSerialize(using = BooleanStringSerializer.class) - public boolean hasUploadConfiguration() { + public Boolean hasUploadConfiguration() { return hasUploadConfiguration; } } diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 0c84b193f..3d4331606 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -1,5 +1,6 @@ package com.gooddata.md; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.gooddata.util.*; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -21,13 +22,13 @@ public class Entry { private final String category; private final String author; private final String contributor; - private final boolean deprecated; + private final Boolean deprecated; private final String identifier; private final String tags; //TODO collection private final DateTime created; private final DateTime updated; - private final boolean locked; - private final boolean unlisted; + private final Boolean locked; + private final Boolean unlisted; @JsonCreator public Entry(@JsonProperty("link") String link, @@ -36,13 +37,13 @@ public Entry(@JsonProperty("link") String link, @JsonProperty("category") String category, @JsonProperty("author") String author, @JsonProperty("contributor") String contributor, - @JsonProperty("deprecated") @JsonDeserialize(using = BooleanStringDeserializer.class) boolean deprecated, + @JsonProperty("deprecated") @JsonDeserialize(using = BooleanStringDeserializer.class) Boolean deprecated, @JsonProperty("identifier") String identifier, @JsonProperty("tags") String tags, @JsonProperty("created") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime created, @JsonProperty("updated") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime updated, - @JsonProperty("locked") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean locked, - @JsonProperty("unlisted") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean unlisted) { + @JsonProperty("locked") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean locked, + @JsonProperty("unlisted") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean unlisted) { this.link = link; this.title = title; this.summary = summary; @@ -82,8 +83,16 @@ public String getContributor() { return contributor; } - @JsonSerialize(using = BooleanStringSerializer.class) + /** + * @return true if the deprecated is set and is true + */ + @JsonIgnore public boolean isDeprecated() { + return Boolean.TRUE.equals(deprecated); + } + + @JsonSerialize(using = BooleanStringSerializer.class) + public Boolean getDeprecated() { return deprecated; } @@ -105,13 +114,29 @@ public DateTime getUpdated() { return updated; } - @JsonSerialize(using = BooleanIntegerSerializer.class) + /** + * @return true if the locked is set and is true + */ + @JsonIgnore public boolean isLocked() { + return Boolean.TRUE.equals(locked); + } + + @JsonSerialize(using = BooleanIntegerSerializer.class) + public Boolean getLocked() { return locked; } - @JsonSerialize(using = BooleanIntegerSerializer.class) + /** + * @return true if the unlisted is set and is true + */ + @JsonIgnore public boolean isUnlisted() { + return Boolean.TRUE.equals(unlisted); + } + + @JsonSerialize(using = BooleanIntegerSerializer.class) + public Boolean getUnlisted() { return unlisted; } } From 2d30c44831ae9ef53298c2550b0fc6a07da00fe2 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 15 Jan 2016 11:27:24 +0100 Subject: [PATCH 032/934] remove deprecated JsonSerialize.Inclusion it is replaced with @JsonInclude, the benefit is that class level inclusion settings no longer collides with propert level serialization settings --- .../java/com/gooddata/account/Account.java | 4 ++-- .../java/com/gooddata/collections/Paging.java | 4 ++-- .../com/gooddata/connector/Integration.java | 4 ++-- .../connector/IntegrationProcessStatus.java | 3 ++- .../gooddata/connector/ProcessExecution.java | 4 ++-- .../java/com/gooddata/connector/Settings.java | 4 ++-- .../dataload/processes/DataloadProcess.java | 4 ++-- .../gooddata/dataload/processes/Schedule.java | 4 ++-- .../com/gooddata/dataset/DatasetManifest.java | 5 +++-- .../java/com/gooddata/dataset/Datasets.java | 4 ++-- .../java/com/gooddata/dataset/EtlMode.java | 4 ++-- src/main/java/com/gooddata/dataset/Pull.java | 4 ++-- .../java/com/gooddata/dataset/TaskState.java | 4 ++-- .../java/com/gooddata/gdc/AbstractMaql.java | 4 ++-- src/main/java/com/gooddata/gdc/AsyncTask.java | 4 ++-- src/main/java/com/gooddata/gdc/Gdc.java | 4 ++-- src/main/java/com/gooddata/gdc/GdcError.java | 4 ++-- src/main/java/com/gooddata/gdc/TaskStatus.java | 2 -- .../java/com/gooddata/gdc/UriResponse.java | 4 ++-- src/main/java/com/gooddata/md/Attachment.java | 4 ++-- src/main/java/com/gooddata/md/Attribute.java | 4 ++-- .../com/gooddata/md/AttributeDisplayForm.java | 11 ++++++----- .../java/com/gooddata/md/AttributeElement.java | 4 ++-- .../com/gooddata/md/AttributeElements.java | 4 ++-- src/main/java/com/gooddata/md/Dataset.java | 5 +++-- src/main/java/com/gooddata/md/Dimension.java | 4 ++-- src/main/java/com/gooddata/md/DisplayForm.java | 6 +++--- src/main/java/com/gooddata/md/Entry.java | 3 ++- src/main/java/com/gooddata/md/Expression.java | 4 ++-- src/main/java/com/gooddata/md/Fact.java | 6 +++--- src/main/java/com/gooddata/md/InUseMany.java | 3 ++- src/main/java/com/gooddata/md/Key.java | 4 ++-- src/main/java/com/gooddata/md/Meta.java | 18 +++++++++--------- src/main/java/com/gooddata/md/Metric.java | 6 +++--- .../java/com/gooddata/md/NestedAttribute.java | 7 +++---- src/main/java/com/gooddata/md/Query.java | 6 +++--- .../java/com/gooddata/md/ScheduledMail.java | 4 ++-- .../com/gooddata/md/ScheduledMailWhen.java | 4 +++- src/main/java/com/gooddata/md/UseMany.java | 4 ++-- .../java/com/gooddata/md/UseManyEntries.java | 4 ++-- .../gooddata/md/report/AttributeInGrid.java | 4 ++-- .../java/com/gooddata/md/report/Filter.java | 4 ++-- src/main/java/com/gooddata/md/report/Grid.java | 4 ++-- .../com/gooddata/md/report/GridElement.java | 4 ++-- .../md/report/GridReportDefinitionContent.java | 4 ++-- .../OneNumberReportDefinitionContent.java | 8 ++++---- .../java/com/gooddata/md/report/Report.java | 7 +++---- .../gooddata/md/report/ReportDefinition.java | 4 ++-- .../md/report/ReportDefinitionContent.java | 4 ++-- .../java/com/gooddata/model/DiffRequest.java | 4 ++-- .../java/com/gooddata/model/MaqlDdlLinks.java | 4 ++-- .../java/com/gooddata/project/Project.java | 7 +++---- .../gooddata/project/ProjectFeatureFlag.java | 3 ++- .../com/gooddata/project/ProjectTemplate.java | 4 ++-- .../com/gooddata/project/ProjectTemplates.java | 4 ++-- .../gooddata/project/ProjectValidations.java | 4 ++-- .../java/com/gooddata/project/Projects.java | 4 ++-- src/main/java/com/gooddata/project/Role.java | 3 ++- src/main/java/com/gooddata/project/User.java | 7 +++---- .../com/gooddata/report/ReportRequest.java | 4 ++-- .../java/com/gooddata/warehouse/Warehouse.java | 8 ++++---- .../com/gooddata/warehouse/WarehouseUser.java | 5 ++--- 62 files changed, 148 insertions(+), 145 deletions(-) diff --git a/src/main/java/com/gooddata/account/Account.java b/src/main/java/com/gooddata/account/Account.java index 50d311dbe..904131dd5 100644 --- a/src/main/java/com/gooddata/account/Account.java +++ b/src/main/java/com/gooddata/account/Account.java @@ -6,10 +6,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; /** @@ -18,7 +18,7 @@ @JsonTypeName("accountSetting") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Account { public static final String URI = "/gdc/account/profile/{id}"; diff --git a/src/main/java/com/gooddata/collections/Paging.java b/src/main/java/com/gooddata/collections/Paging.java index 1105be3da..ca80477a9 100644 --- a/src/main/java/com/gooddata/collections/Paging.java +++ b/src/main/java/com/gooddata/collections/Paging.java @@ -3,12 +3,12 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo.As; import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Description of the current collection page. @@ -16,7 +16,7 @@ @JsonTypeInfo(include = As.WRAPPER_OBJECT, use = Id.NONE) @JsonTypeName("paging") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Paging { private final String offset; diff --git a/src/main/java/com/gooddata/connector/Integration.java b/src/main/java/com/gooddata/connector/Integration.java index b7e85d3d0..dc715e3f1 100644 --- a/src/main/java/com/gooddata/connector/Integration.java +++ b/src/main/java/com/gooddata/connector/Integration.java @@ -6,10 +6,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import static com.gooddata.util.Validate.notEmpty; @@ -19,7 +19,7 @@ @JsonTypeName("integration") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Integration { public static final String URL = "/gdc/projects/{project}/connectors/{connector}/integration"; diff --git a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java index c5d914d9d..bb325c202 100644 --- a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java +++ b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java @@ -3,6 +3,7 @@ */ package com.gooddata.connector; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; import com.fasterxml.jackson.annotation.JsonCreator; @@ -20,7 +21,7 @@ * Connector process (i.e. single ETL run) status used in integration object. Deserialization only. */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class IntegrationProcessStatus { public static final String URI = "/gdc/projects/{project}/connectors/{connector}/integration/processes/{process}"; diff --git a/src/main/java/com/gooddata/connector/ProcessExecution.java b/src/main/java/com/gooddata/connector/ProcessExecution.java index 89e044223..608f87dd0 100644 --- a/src/main/java/com/gooddata/connector/ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/ProcessExecution.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Connector process execution (i.e. definition for single ETL run). Serialization only. @@ -15,7 +15,7 @@ @JsonTypeName("process") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public interface ProcessExecution { @JsonIgnore diff --git a/src/main/java/com/gooddata/connector/Settings.java b/src/main/java/com/gooddata/connector/Settings.java index 45c3e2ca1..93377b5f8 100644 --- a/src/main/java/com/gooddata/connector/Settings.java +++ b/src/main/java/com/gooddata/connector/Settings.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Connector integration settings. @@ -15,7 +15,7 @@ @JsonTypeName("settings") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public interface Settings { final String URL = "/gdc/projects/{project}/connectors/{connector}/integration/settings"; diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index 8954a3eaf..ae0a7030b 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -6,10 +6,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.util.CollectionUtils; import org.springframework.web.util.UriTemplate; @@ -23,7 +23,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("process") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class DataloadProcess { public static final String URI = "/gdc/projects/{projectId}/dataload/processes/{processId}"; diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index b50ae59f0..24bf66de9 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -1,5 +1,6 @@ package com.gooddata.dataload.processes; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.ISODateTimeDeserializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -8,7 +9,6 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.springframework.web.util.UriTemplate; @@ -26,7 +26,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("schedule") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Schedule { public static final String URI = "/gdc/projects/{projectId}/schedules/{scheduleId}"; diff --git a/src/main/java/com/gooddata/dataset/DatasetManifest.java b/src/main/java/com/gooddata/dataset/DatasetManifest.java index 46accf68b..5b80c9135 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifest.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifest.java @@ -3,6 +3,7 @@ */ package com.gooddata.dataset; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.BooleanIntegerDeserializer; import com.gooddata.util.BooleanIntegerSerializer; import com.fasterxml.jackson.annotation.JsonCreator; @@ -28,7 +29,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("dataSetSLIManifest") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class DatasetManifest { public static final String URI = "/gdc/md/{projectId}/ldm/singleloadinterface/{dataSet}/manifest"; @@ -123,7 +124,7 @@ public void setSource(final InputStream source) { } @JsonIgnoreProperties(ignoreUnknown = true) - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) public static class Part { @JsonProperty("mode") diff --git a/src/main/java/com/gooddata/dataset/Datasets.java b/src/main/java/com/gooddata/dataset/Datasets.java index 33bd79151..433c7971c 100644 --- a/src/main/java/com/gooddata/dataset/Datasets.java +++ b/src/main/java/com/gooddata/dataset/Datasets.java @@ -5,10 +5,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.List; @@ -19,7 +19,7 @@ @JsonTypeName("about") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) // todo this is almost copy of Gdc public class Datasets { diff --git a/src/main/java/com/gooddata/dataset/EtlMode.java b/src/main/java/com/gooddata/dataset/EtlMode.java index 0796c6b31..7f5522084 100644 --- a/src/main/java/com/gooddata/dataset/EtlMode.java +++ b/src/main/java/com/gooddata/dataset/EtlMode.java @@ -2,15 +2,15 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; @JsonTypeName("etlMode") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) class EtlMode { public static final String URL = "/gdc/md/{project}/etl/mode"; diff --git a/src/main/java/com/gooddata/dataset/Pull.java b/src/main/java/com/gooddata/dataset/Pull.java index 50449a96e..64c3a14f1 100644 --- a/src/main/java/com/gooddata/dataset/Pull.java +++ b/src/main/java/com/gooddata/dataset/Pull.java @@ -3,14 +3,14 @@ */ package com.gooddata.dataset; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * ETL Pull DTO (for internal use). * Serialization only. */ -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Pull { public static final String URI = "/gdc/md/{projectId}/etl/pull"; diff --git a/src/main/java/com/gooddata/dataset/TaskState.java b/src/main/java/com/gooddata/dataset/TaskState.java index 12b8e5a99..8b3c21f40 100644 --- a/src/main/java/com/gooddata/dataset/TaskState.java +++ b/src/main/java/com/gooddata/dataset/TaskState.java @@ -6,10 +6,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * ETL Pull task status (for internal use). @@ -18,7 +18,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("taskState") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class TaskState { private static final String OK = "OK"; diff --git a/src/main/java/com/gooddata/gdc/AbstractMaql.java b/src/main/java/com/gooddata/gdc/AbstractMaql.java index 9da7746a8..d0bd55318 100644 --- a/src/main/java/com/gooddata/gdc/AbstractMaql.java +++ b/src/main/java/com/gooddata/gdc/AbstractMaql.java @@ -4,10 +4,10 @@ package com.gooddata.gdc; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Abstract MAQL statement. @@ -15,7 +15,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("manage") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public abstract class AbstractMaql { @JsonProperty("maql") diff --git a/src/main/java/com/gooddata/gdc/AsyncTask.java b/src/main/java/com/gooddata/gdc/AsyncTask.java index f5718edbd..799c7a62e 100644 --- a/src/main/java/com/gooddata/gdc/AsyncTask.java +++ b/src/main/java/com/gooddata/gdc/AsyncTask.java @@ -6,10 +6,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Asynchronous task containing link for polling. @@ -18,7 +18,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("asyncTask") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class AsyncTask { @JsonProperty diff --git a/src/main/java/com/gooddata/gdc/Gdc.java b/src/main/java/com/gooddata/gdc/Gdc.java index 6b0ba4811..cabaa2b34 100644 --- a/src/main/java/com/gooddata/gdc/Gdc.java +++ b/src/main/java/com/gooddata/gdc/Gdc.java @@ -6,10 +6,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.List; @@ -19,7 +19,7 @@ @JsonTypeName("about") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Gdc { /** diff --git a/src/main/java/com/gooddata/gdc/GdcError.java b/src/main/java/com/gooddata/gdc/GdcError.java index 0bcba98c9..8f81d3a2e 100644 --- a/src/main/java/com/gooddata/gdc/GdcError.java +++ b/src/main/java/com/gooddata/gdc/GdcError.java @@ -5,10 +5,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * GoodData REST API error structure. @@ -17,7 +17,7 @@ @JsonTypeName("error") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class GdcError extends ErrorStructure { @JsonCreator diff --git a/src/main/java/com/gooddata/gdc/TaskStatus.java b/src/main/java/com/gooddata/gdc/TaskStatus.java index 8f5d08d11..96e5d1c7f 100644 --- a/src/main/java/com/gooddata/gdc/TaskStatus.java +++ b/src/main/java/com/gooddata/gdc/TaskStatus.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; @@ -17,7 +16,6 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("wTaskStatus") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class TaskStatus { private static final String OK = "OK"; diff --git a/src/main/java/com/gooddata/gdc/UriResponse.java b/src/main/java/com/gooddata/gdc/UriResponse.java index 439ed40f2..9b591c4d8 100644 --- a/src/main/java/com/gooddata/gdc/UriResponse.java +++ b/src/main/java/com/gooddata/gdc/UriResponse.java @@ -5,14 +5,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Response containing URI */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class UriResponse { private final String uri; diff --git a/src/main/java/com/gooddata/md/Attachment.java b/src/main/java/com/gooddata/md/Attachment.java index 5e4f9e67b..179ef3a2f 100644 --- a/src/main/java/com/gooddata/md/Attachment.java +++ b/src/main/java/com/gooddata/md/Attachment.java @@ -5,10 +5,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Common ancestor to {@link ScheduledMail} attachments. @@ -19,7 +19,7 @@ @JsonSubTypes.Type(name = "dashboardAttachment", value = DashboardAttachment.class), @JsonSubTypes.Type(name = "reportAttachment", value = ReportAttachment.class), }) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Attachment { private final String uri; diff --git a/src/main/java/com/gooddata/md/Attribute.java b/src/main/java/com/gooddata/md/Attribute.java index f4a24dfe5..2182bcf23 100644 --- a/src/main/java/com/gooddata/md/Attribute.java +++ b/src/main/java/com/gooddata/md/Attribute.java @@ -6,10 +6,10 @@ import static java.util.Arrays.asList; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collections; @@ -18,7 +18,7 @@ */ @JsonTypeName("attribute") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Attribute extends NestedAttribute implements Queryable, Updatable { @JsonCreator diff --git a/src/main/java/com/gooddata/md/AttributeDisplayForm.java b/src/main/java/com/gooddata/md/AttributeDisplayForm.java index 64b477111..0463befb3 100644 --- a/src/main/java/com/gooddata/md/AttributeDisplayForm.java +++ b/src/main/java/com/gooddata/md/AttributeDisplayForm.java @@ -1,5 +1,6 @@ package com.gooddata.md; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.BooleanIntegerDeserializer; import com.gooddata.util.BooleanIntegerSerializer; import com.fasterxml.jackson.annotation.JsonCreator; @@ -15,7 +16,7 @@ */ @JsonTypeName("attributeDisplayForm") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class AttributeDisplayForm extends DisplayForm implements Updatable { @JsonProperty("content") @@ -35,16 +36,16 @@ private AttributeDisplayForm(@JsonProperty("meta") Meta meta, @JsonProperty("con @JsonIgnore public boolean isDefault() { - return content.isDefault(); + return Boolean.TRUE.equals(content.isDefault()); } - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content extends DisplayForm.Content { private final boolean isDefault; private Content(@JsonProperty("formOf") String formOf, @JsonProperty("expression") String expression, - @JsonProperty("default") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean isDefault, + @JsonProperty("default") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean isDefault, @JsonProperty("ldmexpression") String ldmExpression, @JsonProperty("type") String type) { super(formOf, expression, ldmExpression, type); @@ -53,7 +54,7 @@ private Content(@JsonProperty("formOf") String formOf, @JsonProperty("expression @JsonProperty("default") @JsonSerialize(using = BooleanIntegerSerializer.class) - public boolean isDefault() { + public Boolean isDefault() { return isDefault; } } diff --git a/src/main/java/com/gooddata/md/AttributeElement.java b/src/main/java/com/gooddata/md/AttributeElement.java index 6268fcafc..2a2dca5f7 100644 --- a/src/main/java/com/gooddata/md/AttributeElement.java +++ b/src/main/java/com/gooddata/md/AttributeElement.java @@ -6,14 +6,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Represent one element of attribute values */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class AttributeElement { private final String uri; diff --git a/src/main/java/com/gooddata/md/AttributeElements.java b/src/main/java/com/gooddata/md/AttributeElements.java index 02f464ca1..e3a2b5894 100644 --- a/src/main/java/com/gooddata/md/AttributeElements.java +++ b/src/main/java/com/gooddata/md/AttributeElements.java @@ -9,10 +9,10 @@ import org.apache.commons.lang.Validate; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import java.util.List; @@ -24,7 +24,7 @@ @JsonTypeName("attributeElements") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) class AttributeElements { static final String URI = Obj.OBJ_URI + "/elements"; diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index 412c6d21d..121ce111c 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -4,6 +4,7 @@ package com.gooddata.md; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.BooleanStringDeserializer; import com.gooddata.util.BooleanStringSerializer; import com.fasterxml.jackson.annotation.JsonCreator; @@ -23,7 +24,7 @@ */ @JsonTypeName("dataSet") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Dataset extends AbstractObj implements Queryable, Updatable { private static final String DATA_UPLOADS_LINK = "dataUploads"; @@ -89,7 +90,7 @@ public String getUploadConfigurationLink() { return links != null ? links.get(UPLOAD_CONFIGURATION_LINK) : null; } - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { private final List ties; private final String mode; diff --git a/src/main/java/com/gooddata/md/Dimension.java b/src/main/java/com/gooddata/md/Dimension.java index 991ec0417..cbbcb2777 100644 --- a/src/main/java/com/gooddata/md/Dimension.java +++ b/src/main/java/com/gooddata/md/Dimension.java @@ -5,10 +5,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; @@ -18,7 +18,7 @@ */ @JsonTypeName("dimension") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Dimension extends AbstractObj implements Queryable, Updatable { @JsonProperty("content") diff --git a/src/main/java/com/gooddata/md/DisplayForm.java b/src/main/java/com/gooddata/md/DisplayForm.java index 334c214c6..04926d896 100644 --- a/src/main/java/com/gooddata/md/DisplayForm.java +++ b/src/main/java/com/gooddata/md/DisplayForm.java @@ -6,14 +6,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Display form */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class DisplayForm extends AbstractObj { @JsonProperty("content") @@ -56,7 +56,7 @@ public String getElementsLink() { } @JsonIgnoreProperties(ignoreUnknown = true) - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) protected static class Content { private final String formOf; diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 3d4331606..735bf69e5 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -1,6 +1,7 @@ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.*; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -13,7 +14,7 @@ * Metadata entry (can be named "LINK" in some API docs) */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Entry { private final String link; diff --git a/src/main/java/com/gooddata/md/Expression.java b/src/main/java/com/gooddata/md/Expression.java index e1cbc4bbc..b010b6f28 100644 --- a/src/main/java/com/gooddata/md/Expression.java +++ b/src/main/java/com/gooddata/md/Expression.java @@ -5,14 +5,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Expression of fact */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Expression { private final String data; diff --git a/src/main/java/com/gooddata/md/Fact.java b/src/main/java/com/gooddata/md/Fact.java index adfe714d8..886195312 100644 --- a/src/main/java/com/gooddata/md/Fact.java +++ b/src/main/java/com/gooddata/md/Fact.java @@ -5,10 +5,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; @@ -19,7 +19,7 @@ */ @JsonTypeName("fact") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Fact extends AbstractObj implements Queryable, Updatable { @JsonProperty("content") @@ -47,7 +47,7 @@ public Collection getFolders() { return content.getFolders(); } - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { @JsonProperty("expr") diff --git a/src/main/java/com/gooddata/md/InUseMany.java b/src/main/java/com/gooddata/md/InUseMany.java index 252e9162a..15e39f334 100644 --- a/src/main/java/com/gooddata/md/InUseMany.java +++ b/src/main/java/com/gooddata/md/InUseMany.java @@ -1,5 +1,6 @@ package com.gooddata.md; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.BooleanStringDeserializer; import com.gooddata.util.BooleanStringSerializer; import com.fasterxml.jackson.annotation.JsonCreator; @@ -25,7 +26,7 @@ @JsonTypeName("inUseMany") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) class InUseMany { public static final String USEDBY_URI = "/gdc/md/{projectId}/usedby2"; diff --git a/src/main/java/com/gooddata/md/Key.java b/src/main/java/com/gooddata/md/Key.java index 11e7f27f4..74a6f1011 100644 --- a/src/main/java/com/gooddata/md/Key.java +++ b/src/main/java/com/gooddata/md/Key.java @@ -2,14 +2,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Key (primary/foreign) of attribute */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Key { private final String data; diff --git a/src/main/java/com/gooddata/md/Meta.java b/src/main/java/com/gooddata/md/Meta.java index e87e3b462..60ecfa291 100644 --- a/src/main/java/com/gooddata/md/Meta.java +++ b/src/main/java/com/gooddata/md/Meta.java @@ -3,13 +3,13 @@ */ package com.gooddata.md; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.*; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion; import org.joda.time.DateTime; import java.io.Serializable; @@ -20,7 +20,7 @@ * Metadata meta information (meant just for internal SDK usage) */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Meta implements Serializable { private static final int SUMMARY_MAX_LENGTH = 2048; @@ -103,7 +103,7 @@ public String getContributor() { return contributor; } - @JsonSerialize(using = GDDateTimeSerializer.class, include = Inclusion.NON_NULL) + @JsonSerialize(using = GDDateTimeSerializer.class) public DateTime getCreated() { return created; } @@ -124,7 +124,7 @@ public void setTitle(String title) { this.title = title; } - @JsonSerialize(using = GDDateTimeSerializer.class, include = Inclusion.NON_NULL) + @JsonSerialize(using = GDDateTimeSerializer.class) public DateTime getUpdated() { return updated; } @@ -154,7 +154,7 @@ public String getUri() { * @return true when the linked object is deprecated, null if not set */ @JsonProperty("deprecated") - @JsonSerialize(using = BooleanStringSerializer.class, include = Inclusion.NON_NULL) + @JsonSerialize(using = BooleanStringSerializer.class) public Boolean isDeprecated() { return deprecated; } @@ -178,7 +178,7 @@ public void setIdentifier(String identifier) { * @return true when the linked object is production, null if not set */ @JsonProperty("isProduction") - @JsonSerialize(using = BooleanIntegerSerializer.class, include = Inclusion.NON_NULL) + @JsonSerialize(using = BooleanIntegerSerializer.class) public Boolean isProduction() { return production; } @@ -194,7 +194,7 @@ public void setProduction(final Boolean production) { * @return true when the linked object is locked, null if not set */ @JsonProperty("locked") - @JsonSerialize(using = BooleanIntegerSerializer.class, include = Inclusion.NON_NULL) + @JsonSerialize(using = BooleanIntegerSerializer.class) public Boolean isLocked() { return locked; } @@ -210,7 +210,7 @@ public void setLocked(Boolean locked) { * @return true when the linked object is unlisted, null if not set */ @JsonProperty("unlisted") - @JsonSerialize(using = BooleanIntegerSerializer.class, include = Inclusion.NON_NULL) + @JsonSerialize(using = BooleanIntegerSerializer.class) public Boolean isUnlisted() { return unlisted; } @@ -226,7 +226,7 @@ public void setUnlisted(Boolean unlisted) { * @return true when the linked object is shared, null if not set */ @JsonProperty("sharedWithSomeone") - @JsonSerialize(using = BooleanIntegerSerializer.class, include = Inclusion.NON_NULL) + @JsonSerialize(using = BooleanIntegerSerializer.class) public Boolean isSharedWithSomeone() { return sharedWithSomeone; } diff --git a/src/main/java/com/gooddata/md/Metric.java b/src/main/java/com/gooddata/md/Metric.java index 6d1573771..c7cb40a98 100644 --- a/src/main/java/com/gooddata/md/Metric.java +++ b/src/main/java/com/gooddata/md/Metric.java @@ -5,17 +5,17 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Metric */ @JsonTypeName("metric") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Metric extends AbstractObj implements Queryable, Updatable { @JsonProperty("content") @@ -46,7 +46,7 @@ public MaqlAst getMaqlAst() { return content.getMaqlAst(); } - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { private final String expression; diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index 3b81a85df..710753d3c 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -6,10 +6,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; @@ -19,10 +19,9 @@ /** * Attribute representation which is nested in some other metadata object (i.e. within {@link Dimension}). * Can't be queried, get or updated directly - use {@link Attribute} for these operations. - * Deserialization only. */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class NestedAttribute extends AbstractObj { @JsonProperty("content") @@ -113,7 +112,7 @@ public Collection getGrain() { return content.getGrain(); } - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) protected static class Content { private final Collection pk; private final Collection fk; diff --git a/src/main/java/com/gooddata/md/Query.java b/src/main/java/com/gooddata/md/Query.java index d58102a90..5fa92a96c 100644 --- a/src/main/java/com/gooddata/md/Query.java +++ b/src/main/java/com/gooddata/md/Query.java @@ -2,10 +2,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; @@ -15,7 +15,7 @@ @JsonTypeName("query") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Query { public static final String URI = "/gdc/md/{projectId}/query/{type}"; @@ -47,7 +47,7 @@ public String getTitle() { } @JsonIgnoreProperties(ignoreUnknown = true) - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Meta { private final String category; private final String summary; diff --git a/src/main/java/com/gooddata/md/ScheduledMail.java b/src/main/java/com/gooddata/md/ScheduledMail.java index 34037be48..d8a6d33b2 100644 --- a/src/main/java/com/gooddata/md/ScheduledMail.java +++ b/src/main/java/com/gooddata/md/ScheduledMail.java @@ -3,6 +3,7 @@ */ package com.gooddata.md; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.report.ReportDefinition; import com.gooddata.report.ReportExportFormat; import com.fasterxml.jackson.annotation.JsonCreator; @@ -10,7 +11,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.LocalDate; import java.util.*; @@ -23,7 +23,7 @@ */ @JsonTypeName("scheduledMail") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class ScheduledMail extends AbstractObj implements Queryable, Updatable { @JsonProperty("content") diff --git a/src/main/java/com/gooddata/md/ScheduledMailWhen.java b/src/main/java/com/gooddata/md/ScheduledMailWhen.java index 5b6504e69..f5a9168f0 100644 --- a/src/main/java/com/gooddata/md/ScheduledMailWhen.java +++ b/src/main/java/com/gooddata/md/ScheduledMailWhen.java @@ -3,6 +3,7 @@ */ package com.gooddata.md; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.GDDateDeserializer; import com.gooddata.util.GDDateSerializer; import com.fasterxml.jackson.annotation.JsonCreator; @@ -37,7 +38,8 @@ public ScheduledMailWhen() {} public String getRecurrency() { return recurrency; } - @JsonSerialize(using = GDDateSerializer.class, include = JsonSerialize.Inclusion.NON_NULL) + @JsonSerialize(using = GDDateSerializer.class) + @JsonInclude(JsonInclude.Include.NON_NULL) public LocalDate getStartDate() { return startDate; } public String getTimeZone() { return timeZone; } diff --git a/src/main/java/com/gooddata/md/UseMany.java b/src/main/java/com/gooddata/md/UseMany.java index 1599db03a..f8e09b3ab 100644 --- a/src/main/java/com/gooddata/md/UseMany.java +++ b/src/main/java/com/gooddata/md/UseMany.java @@ -2,8 +2,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; @@ -13,7 +13,7 @@ * UsedBy/Using batch result */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) class UseMany { private final Collection useMany; diff --git a/src/main/java/com/gooddata/md/UseManyEntries.java b/src/main/java/com/gooddata/md/UseManyEntries.java index f48c69715..74d74c9ee 100644 --- a/src/main/java/com/gooddata/md/UseManyEntries.java +++ b/src/main/java/com/gooddata/md/UseManyEntries.java @@ -2,13 +2,13 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) class UseManyEntries { private final String uri; diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 738863755..07b1e62f5 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -5,10 +5,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.ArrayList; import java.util.Collection; @@ -20,7 +20,7 @@ @JsonTypeName("attribute") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class AttributeInGrid extends GridElement { private Collection> totals; diff --git a/src/main/java/com/gooddata/md/report/Filter.java b/src/main/java/com/gooddata/md/report/Filter.java index d2e539756..1282dba65 100644 --- a/src/main/java/com/gooddata/md/report/Filter.java +++ b/src/main/java/com/gooddata/md/report/Filter.java @@ -2,8 +2,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import static com.gooddata.util.Validate.notEmpty; @@ -11,7 +11,7 @@ * Filter (in report definition) */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Filter { private final String expression; diff --git a/src/main/java/com/gooddata/md/report/Grid.java b/src/main/java/com/gooddata/md/report/Grid.java index af0f5344a..a231d5bf0 100644 --- a/src/main/java/com/gooddata/md/report/Grid.java +++ b/src/main/java/com/gooddata/md/report/Grid.java @@ -5,8 +5,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; @@ -18,7 +18,7 @@ * Grid content (in report definition) */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Grid { private final Collection columns; diff --git a/src/main/java/com/gooddata/md/report/GridElement.java b/src/main/java/com/gooddata/md/report/GridElement.java index 777c87a20..759e8a554 100644 --- a/src/main/java/com/gooddata/md/report/GridElement.java +++ b/src/main/java/com/gooddata/md/report/GridElement.java @@ -5,8 +5,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Grid element @@ -14,7 +14,7 @@ * one time in rows or columns) */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class GridElement { private final String uri; diff --git a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java index dac7fcbbb..291154046 100644 --- a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java @@ -3,10 +3,10 @@ */ package com.gooddata.md.report; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.Meta; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; @@ -15,7 +15,7 @@ /** * Grid report definition */ -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class GridReportDefinitionContent extends ReportDefinitionContent { public static final String FORMAT = "grid"; diff --git a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java index f548137d3..e81b5e77c 100644 --- a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java @@ -3,10 +3,10 @@ */ package com.gooddata.md.report; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.Meta; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; @@ -15,7 +15,7 @@ /** * One number report definition */ -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class OneNumberReportDefinitionContent extends ReportDefinitionContent { public static final String FORMAT = "oneNumber"; @@ -44,7 +44,7 @@ public OneNumberVisualization getOneNumber() { return oneNumber; } - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class OneNumberVisualization { private final OneNumberLabels labels; @@ -59,7 +59,7 @@ public OneNumberLabels getLabels() { } } - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class OneNumberLabels { private final String description; diff --git a/src/main/java/com/gooddata/md/report/Report.java b/src/main/java/com/gooddata/md/report/Report.java index c910ed035..058224a07 100644 --- a/src/main/java/com/gooddata/md/report/Report.java +++ b/src/main/java/com/gooddata/md/report/Report.java @@ -3,17 +3,16 @@ */ package com.gooddata.md.report; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.AbstractObj; import com.gooddata.md.Meta; import com.gooddata.md.Queryable; import com.gooddata.md.Updatable; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; @@ -24,7 +23,7 @@ */ @JsonTypeName("report") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Report extends AbstractObj implements Queryable, Updatable { @JsonProperty("content") @@ -56,7 +55,7 @@ public Collection getDomains() { return content.getDomains(); } - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { private final Collection definitions; private final Collection domains; diff --git a/src/main/java/com/gooddata/md/report/ReportDefinition.java b/src/main/java/com/gooddata/md/report/ReportDefinition.java index 610c4c37c..1a95adab2 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinition.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinition.java @@ -3,6 +3,7 @@ */ package com.gooddata.md.report; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.AbstractObj; import com.gooddata.md.Meta; import com.gooddata.md.Queryable; @@ -12,7 +13,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Map; @@ -21,7 +21,7 @@ */ @JsonTypeName("reportDefinition") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class ReportDefinition extends AbstractObj implements Queryable, Updatable { private static final String EXPLAIN_LINK = "explain2"; diff --git a/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java index f511d1ed2..a828bc034 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java @@ -4,9 +4,9 @@ package com.gooddata.md.report; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; @@ -20,7 +20,7 @@ value = OneNumberReportDefinitionContent.class) //TODO chart }) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public abstract class ReportDefinitionContent { private final String format; diff --git a/src/main/java/com/gooddata/model/DiffRequest.java b/src/main/java/com/gooddata/model/DiffRequest.java index d172da952..a4ffc3632 100644 --- a/src/main/java/com/gooddata/model/DiffRequest.java +++ b/src/main/java/com/gooddata/model/DiffRequest.java @@ -4,11 +4,11 @@ package com.gooddata.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonRawValue; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import static com.gooddata.util.Validate.notNull; @@ -18,7 +18,7 @@ */ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("diffRequest") -@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS) +@JsonInclude(JsonInclude.Include.ALWAYS) @JsonIgnoreProperties(ignoreUnknown = true) public class DiffRequest { diff --git a/src/main/java/com/gooddata/model/MaqlDdlLinks.java b/src/main/java/com/gooddata/model/MaqlDdlLinks.java index 83f7be993..230e01914 100644 --- a/src/main/java/com/gooddata/model/MaqlDdlLinks.java +++ b/src/main/java/com/gooddata/model/MaqlDdlLinks.java @@ -3,11 +3,11 @@ */ package com.gooddata.model; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.gdc.LinkEntries; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.List; @@ -16,7 +16,7 @@ * Deserialization only. */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) class MaqlDdlLinks extends LinkEntries { private static final String TASKS_STATUS = "tasks-status"; diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index e08c09ee8..5325ed02a 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -3,6 +3,7 @@ */ package com.gooddata.project; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.Meta; import com.gooddata.util.BooleanIntegerDeserializer; import com.gooddata.util.BooleanStringDeserializer; @@ -14,8 +15,6 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion; import org.joda.time.DateTime; import org.springframework.web.util.UriTemplate; @@ -32,7 +31,7 @@ @JsonTypeName("project") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Project { public static final String PROJECTS_URI = "/gdc/account/profile/{id}/projects"; @@ -262,7 +261,7 @@ public void setEnvironment(final Environment environment) { } @JsonIgnoreProperties(ignoreUnknown = true) - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class ProjectContent { @JsonProperty("authorizationToken") diff --git a/src/main/java/com/gooddata/project/ProjectFeatureFlag.java b/src/main/java/com/gooddata/project/ProjectFeatureFlag.java index 3e8b852ae..7d07a4847 100644 --- a/src/main/java/com/gooddata/project/ProjectFeatureFlag.java +++ b/src/main/java/com/gooddata/project/ProjectFeatureFlag.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -18,7 +19,7 @@ @JsonTypeName("featureFlag") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class ProjectFeatureFlag { public static final String FEATURE_FLAG_URI = ProjectFeatureFlags.FEATURE_FLAGS_URI + "/{featureFlag}"; diff --git a/src/main/java/com/gooddata/project/ProjectTemplate.java b/src/main/java/com/gooddata/project/ProjectTemplate.java index dc1c06d17..06c8eb916 100644 --- a/src/main/java/com/gooddata/project/ProjectTemplate.java +++ b/src/main/java/com/gooddata/project/ProjectTemplate.java @@ -5,15 +5,15 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Project template. * Deserialization only. */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class ProjectTemplate { public static final String URI = "/gdc/md/{projectId}/templates"; diff --git a/src/main/java/com/gooddata/project/ProjectTemplates.java b/src/main/java/com/gooddata/project/ProjectTemplates.java index e581ac371..fec9a875a 100644 --- a/src/main/java/com/gooddata/project/ProjectTemplates.java +++ b/src/main/java/com/gooddata/project/ProjectTemplates.java @@ -5,8 +5,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; @@ -15,7 +15,7 @@ * Deserialization only. */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) class ProjectTemplates { private final Collection templatesInfo; diff --git a/src/main/java/com/gooddata/project/ProjectValidations.java b/src/main/java/com/gooddata/project/ProjectValidations.java index 74f6afac8..f2eae87ca 100644 --- a/src/main/java/com/gooddata/project/ProjectValidations.java +++ b/src/main/java/com/gooddata/project/ProjectValidations.java @@ -2,8 +2,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.HashSet; import java.util.Set; @@ -15,7 +15,7 @@ * Helper dto, to fetch available validations or start validations. */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) class ProjectValidations { public static final String URI = "/gdc/md/{projectId}/validate"; diff --git a/src/main/java/com/gooddata/project/Projects.java b/src/main/java/com/gooddata/project/Projects.java index a39f7b4ec..a59e28c04 100644 --- a/src/main/java/com/gooddata/project/Projects.java +++ b/src/main/java/com/gooddata/project/Projects.java @@ -5,15 +5,15 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; /** */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Projects { public static final String URI = "/gdc/projects"; diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index 719c5dd29..272d0d8d3 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -1,5 +1,6 @@ package com.gooddata.project; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.Meta; import com.gooddata.util.BooleanStringDeserializer; import com.gooddata.util.BooleanStringSerializer; @@ -26,7 +27,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("projectRole") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Role { public static final String URI = "/gdc/projects/{projectId}/roles/{roleId}"; public static final UriTemplate TEMPLATE = new UriTemplate(URI); diff --git a/src/main/java/com/gooddata/project/User.java b/src/main/java/com/gooddata/project/User.java index 3a50b06ff..a85121613 100644 --- a/src/main/java/com/gooddata/project/User.java +++ b/src/main/java/com/gooddata/project/User.java @@ -1,13 +1,12 @@ package com.gooddata.project; import com.gooddata.md.Meta; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import java.util.HashMap; @@ -20,7 +19,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("user") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class User { private UserContent content; @@ -59,7 +58,7 @@ public String getPhoneNumber() { } @JsonIgnoreProperties(ignoreUnknown = true) - @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) private static class UserContent { @JsonProperty("email") diff --git a/src/main/java/com/gooddata/report/ReportRequest.java b/src/main/java/com/gooddata/report/ReportRequest.java index be8d46f71..2cb422132 100644 --- a/src/main/java/com/gooddata/report/ReportRequest.java +++ b/src/main/java/com/gooddata/report/ReportRequest.java @@ -4,9 +4,9 @@ package com.gooddata.report; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Report execution request. @@ -15,7 +15,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("report_req") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) abstract class ReportRequest { public static final String URI = "/gdc/xtab2/executor3"; diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index 019a79819..143224732 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -1,8 +1,8 @@ package com.gooddata.warehouse; import static com.gooddata.util.Validate.notNull; -import static com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion.NON_NULL; +import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.project.Environment; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; @@ -25,7 +25,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("instance") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class Warehouse { private static final String ID_PARAM = "id"; @@ -106,12 +106,12 @@ public void setDescription(String description) { this.description = description; } - @JsonSerialize(using = ISODateTimeSerializer.class, include = NON_NULL) + @JsonSerialize(using = ISODateTimeSerializer.class) public DateTime getCreated() { return created; } - @JsonSerialize(using = ISODateTimeSerializer.class, include = NON_NULL) + @JsonSerialize(using = ISODateTimeSerializer.class) public DateTime getUpdated() { return updated; } diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUser.java b/src/main/java/com/gooddata/warehouse/WarehouseUser.java index 7c7c26a7e..bb1a96bba 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUser.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUser.java @@ -3,16 +3,15 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import java.util.Map; import static com.gooddata.util.Validate.notNull; -import static com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion.NON_NULL; /** * Warehouse user @@ -20,7 +19,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("user") @JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = NON_NULL) +@JsonInclude(JsonInclude.Include.NON_NULL) public class WarehouseUser { public static final String URI = WarehouseUsers.URI + "/{userId}"; From 435bf91ce554e1c66c1b4b45067953e4030dde02 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 15 Jan 2016 11:28:17 +0100 Subject: [PATCH 033/934] remove unused import in dtos --- src/main/java/com/gooddata/md/AttributeElements.java | 2 -- src/main/java/com/gooddata/md/NestedAttribute.java | 5 ----- src/main/java/com/gooddata/project/ProjectFeatureFlags.java | 1 - src/main/java/com/gooddata/project/User.java | 4 ---- 4 files changed, 12 deletions(-) diff --git a/src/main/java/com/gooddata/md/AttributeElements.java b/src/main/java/com/gooddata/md/AttributeElements.java index e3a2b5894..866e4342a 100644 --- a/src/main/java/com/gooddata/md/AttributeElements.java +++ b/src/main/java/com/gooddata/md/AttributeElements.java @@ -6,7 +6,6 @@ import static org.apache.commons.lang.Validate.notNull; -import org.apache.commons.lang.Validate; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -16,7 +15,6 @@ import org.springframework.web.util.UriTemplate; import java.util.List; -import java.util.Set; /** * Represents elements of attribute diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index 710753d3c..539f5ffc4 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -8,13 +8,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.Collection; -import java.util.Collections; - -import static java.util.Arrays.asList; /** * Attribute representation which is nested in some other metadata object (i.e. within {@link Dimension}). diff --git a/src/main/java/com/gooddata/project/ProjectFeatureFlags.java b/src/main/java/com/gooddata/project/ProjectFeatureFlags.java index a56efc154..b0022879c 100644 --- a/src/main/java/com/gooddata/project/ProjectFeatureFlags.java +++ b/src/main/java/com/gooddata/project/ProjectFeatureFlags.java @@ -10,7 +10,6 @@ import org.springframework.web.util.UriTemplate; import java.util.ArrayList; -import java.util.Collections; import java.util.List; @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) diff --git a/src/main/java/com/gooddata/project/User.java b/src/main/java/com/gooddata/project/User.java index a85121613..4d5e987c9 100644 --- a/src/main/java/com/gooddata/project/User.java +++ b/src/main/java/com/gooddata/project/User.java @@ -1,17 +1,13 @@ package com.gooddata.project; -import com.gooddata.md.Meta; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import org.springframework.web.util.UriTemplate; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * User. From afdc162a6f3b60682417013b4342a9a26ce8ce76 Mon Sep 17 00:00:00 2001 From: Richard Benkovsky Date: Wed, 20 Jan 2016 08:48:25 +0100 Subject: [PATCH 034/934] DataStoreService is now able to delete WebDav collections. The root cause of the problem was in the 'sardine' library not following HTTP 301 redirects when doing DELETE on resource on WebDav. In case of GD WebDav infrastructure, when you want to delete collection, you need to execute DELETE on resource with trailing '/', otherwise you get HTTP 301 with correct location. Because of that, UriPrefixer was changed to stop removing trailing slash from given URI. --- src/main/java/com/gooddata/GoodData.java | 2 +- src/main/java/com/gooddata/UriPrefixer.java | 2 +- .../com/gooddata/dataset/DatasetService.java | 2 +- .../com/gooddata/gdc/DataStoreService.java | 20 ++++++++++++++++--- .../gooddata/dataset/DatasetServiceIT.java | 5 +++++ .../com/gooddata/gdc/DatastoreServiceAT.java | 17 ++++++++++++++-- 6 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 0fe032e85..6cb1e7671 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -174,7 +174,7 @@ protected GoodData(String hostname, String login, String password, int port, Str metadataService = new MetadataService(getRestTemplate()); modelService = new ModelService(getRestTemplate()); gdcService = new GdcService(getRestTemplate()); - dataStoreService = new DataStoreService(httpClient, gdcService, new HttpHost(hostname, port, protocol).toURI()); + dataStoreService = new DataStoreService(httpClient, getRestTemplate(), gdcService, new HttpHost(hostname, port, protocol).toURI()); datasetService = new DatasetService(getRestTemplate(), dataStoreService); reportService = new ReportService(getRestTemplate()); processService = new ProcessService(getRestTemplate(), accountService, dataStoreService); diff --git a/src/main/java/com/gooddata/UriPrefixer.java b/src/main/java/com/gooddata/UriPrefixer.java index 8378920f3..a3bfe7e95 100644 --- a/src/main/java/com/gooddata/UriPrefixer.java +++ b/src/main/java/com/gooddata/UriPrefixer.java @@ -54,7 +54,7 @@ public URI getUriPrefix() { */ public URI mergeUris(URI uri) { notNull(uri, "uri"); - final String path = trimTrailingCharacter(trimLeadingCharacter(uri.getRawPath(), '/'), '/'); + final String path = trimLeadingCharacter(uri.getRawPath(), '/'); return UriComponentsBuilder.fromUri(uriPrefix) .pathSegment(path) .query(uri.getRawQuery()) diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 188fe989c..2a5dc57e4 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -206,7 +206,7 @@ public void handlePollException(final GoodDataRestException e) { @Override protected void onFinish() { try { - dataStoreService.delete(dirPath.toString() + "/"); + dataStoreService.delete(dirPath.toString()); } catch (DataStoreException ignored) { // todo log? } diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index 8f1e13e53..f2d0d8062 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -25,6 +25,11 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.params.HttpParams; import org.apache.http.protocol.HttpContext; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; import java.io.IOException; import java.io.InputStream; @@ -42,18 +47,22 @@ public class DataStoreService { private final Sardine sardine; private final GdcService gdcService; private final URI gdcUri; + private final RestTemplate restTemplate; + private UriPrefixer prefixer; /** * Creates new DataStoreService * @param httpClient httpClient to make datastore connection + * @param restTemplate restTemplate to make datastore connection * @param gdcService used to obtain datastore URI * @param gdcUri complete GDC URI used to prefix possibly relative datastore path */ - public DataStoreService(HttpClient httpClient, GdcService gdcService, String gdcUri) { + public DataStoreService(HttpClient httpClient, RestTemplate restTemplate, GdcService gdcService, String gdcUri) { this.gdcService = notNull(gdcService, "gdcService"); this.gdcUri = URI.create(notEmpty(gdcUri, "gdcUri")); + this.restTemplate = notNull(restTemplate, "restTemplate"); sardine = new SardineImpl(new CustomHttpClientBuilder(httpClient)); } @@ -121,8 +130,13 @@ public void delete(String path) { notEmpty(path, "path"); final URI uri = getUri(path); try { - sardine.delete(uri.toString()); - } catch (IOException e) { + final ResponseEntity result = restTemplate.exchange(uri, HttpMethod.DELETE, org.springframework.http.HttpEntity.EMPTY, Void.class); + + // in case we get redirect (i.e. when we want to delete collection) we will follow redirect to the new location + if (HttpStatus.MOVED_PERMANENTLY.equals(result.getStatusCode())) { + restTemplate.exchange(result.getHeaders().getLocation(), HttpMethod.DELETE, org.springframework.http.HttpEntity.EMPTY, Void.class); + } + } catch (RestClientException e) { throw new DataStoreException("Unable to delete " + uri, e); } } diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index e3918214d..05f5dc9a0 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -48,6 +48,11 @@ public void setUp() throws Exception { .havingMethodEqualTo("PUT") .respond() .withStatus(200); + onRequest() + .havingPath(startsWith("/uploads/")) + .havingMethodEqualTo("DELETE") + .respond() + .withStatus(200); onRequest() .havingPathEqualTo("/gdc/md/PROJECT_ID/etl/pull") .havingMethodEqualTo("POST") diff --git a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java index 972c09977..a28e38fbe 100644 --- a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java +++ b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java @@ -1,7 +1,7 @@ package com.gooddata.gdc; import com.gooddata.AbstractGoodDataAT; -import com.gooddata.gdc.DataStoreService; +import com.gooddata.GoodDataRestException; import org.apache.commons.io.IOUtils; import org.testng.annotations.Test; @@ -10,18 +10,23 @@ import java.io.InputStream; import java.util.UUID; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.fail; + /** * Data store acceptance test */ public class DatastoreServiceAT extends AbstractGoodDataAT { private String file; + private String directory; @Test(groups = "datastore", dependsOnGroups = "account") public void datastoreUpload() throws Exception { DataStoreService dataStoreService = gd.getDataStoreService(); - file = "/" + UUID.randomUUID().toString() + "/file.csv"; + directory = "/" + UUID.randomUUID().toString(); + file = directory + "/file.csv"; dataStoreService.upload(file, getClass().getResourceAsStream("/person.csv")); } @@ -42,5 +47,13 @@ public void datastoreDownload() throws Exception { public void datastoreDelete() throws Exception { DataStoreService dataStoreService = gd.getDataStoreService(); dataStoreService.delete(this.file); + dataStoreService.delete(this.directory); + + try { + dataStoreService.delete(this.directory); + fail("Exception was expected, as there is nothing to delete"); + } catch (GoodDataRestException e) { + assertEquals(404, e.getStatusCode()); + } } } From fe02451713ef845ec929f7daab19ab67cd071df1 Mon Sep 17 00:00:00 2001 From: Richard Benkovsky Date: Wed, 20 Jan 2016 10:06:18 +0100 Subject: [PATCH 035/934] Cleansing test code Removed unnecessary imports and some unnecessary conditions. --- src/test/java/com/gooddata/AbstractGoodDataAT.java | 8 +++----- src/test/java/com/gooddata/AbstractGoodDataIT.java | 4 ---- src/test/java/com/gooddata/JsonMatchers.java | 2 -- src/test/java/com/gooddata/collections/UriPageTest.java | 5 ----- .../com/gooddata/dataload/processes/ScheduleTest.java | 2 -- src/test/java/com/gooddata/dataset/FailStatusTest.java | 1 - 6 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/test/java/com/gooddata/AbstractGoodDataAT.java b/src/test/java/com/gooddata/AbstractGoodDataAT.java index b881e2c07..9f5f58d8a 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataAT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataAT.java @@ -40,11 +40,9 @@ public static String getProperty(String name) { @AfterSuite public static void removeProjectAndLogout() { - if (gd != null) { - if (project != null) { - gd.getProjectService().removeProject(project); - } - gd.logout(); + if (project != null) { + gd.getProjectService().removeProject(project); } + gd.logout(); } } diff --git a/src/test/java/com/gooddata/AbstractGoodDataIT.java b/src/test/java/com/gooddata/AbstractGoodDataIT.java index 5c0736dda..c4445703d 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataIT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataIT.java @@ -3,16 +3,12 @@ */ package com.gooddata; -import com.gooddata.util.ResourceUtils; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; -import java.io.InputStream; - -import static com.gooddata.util.Validate.notNull; import static net.jadler.Jadler.closeJadler; import static net.jadler.Jadler.initJadler; import static net.jadler.Jadler.port; diff --git a/src/test/java/com/gooddata/JsonMatchers.java b/src/test/java/com/gooddata/JsonMatchers.java index bb957b4b2..0206e1060 100644 --- a/src/test/java/com/gooddata/JsonMatchers.java +++ b/src/test/java/com/gooddata/JsonMatchers.java @@ -1,8 +1,6 @@ package com.gooddata; -import net.javacrumbs.jsonunit.JsonAssert; import net.javacrumbs.jsonunit.core.Configuration; -import net.javacrumbs.jsonunit.core.Option; import net.javacrumbs.jsonunit.core.internal.Diff; import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.BaseMatcher; diff --git a/src/test/java/com/gooddata/collections/UriPageTest.java b/src/test/java/com/gooddata/collections/UriPageTest.java index bfdefea22..7af35a5f7 100644 --- a/src/test/java/com/gooddata/collections/UriPageTest.java +++ b/src/test/java/com/gooddata/collections/UriPageTest.java @@ -4,17 +4,12 @@ import org.springframework.web.util.UriComponentsBuilder; import org.testng.annotations.Test; -import java.util.Arrays; -import java.util.Collections; - import static java.util.Collections.singletonList; -import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasEntry; import static org.springframework.web.util.UriComponentsBuilder.fromUriString; -import static org.testng.Assert.fail; public class UriPageTest { diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index df016cd89..d0ca412fd 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -1,7 +1,6 @@ package com.gooddata.dataload.processes; import com.fasterxml.jackson.databind.ObjectMapper; -import org.hamcrest.collection.IsMapContaining; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.mockito.Matchers; @@ -14,7 +13,6 @@ import java.util.Collections; import static com.gooddata.JsonMatchers.serializesToJson; -import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; diff --git a/src/test/java/com/gooddata/dataset/FailStatusTest.java b/src/test/java/com/gooddata/dataset/FailStatusTest.java index d98b76c20..f9ce811a4 100644 --- a/src/test/java/com/gooddata/dataset/FailStatusTest.java +++ b/src/test/java/com/gooddata/dataset/FailStatusTest.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; -import org.hamcrest.Matchers; import org.testng.annotations.Test; import java.io.InputStream; From 86ef9211ffbceed97b9cd0eaa8852a641d9f40ef Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Tue, 26 Jan 2016 15:02:09 +0100 Subject: [PATCH 036/934] introduce project events trigger --- src/main/java/com/gooddata/GoodData.java | 12 +++ .../notification/NotificationService.java | 40 +++++++++ .../gooddata/notification/ProjectEvent.java | 88 +++++++++++++++++++ .../notification/NotificationServiceAT.java | 19 ++++ .../notification/NotificationServiceIT.java | 38 ++++++++ .../notification/NotificationServiceTest.java | 52 +++++++++++ .../notification/ProjectEventTest.java | 21 +++++ .../resources/notification/projectEvent.json | 8 ++ 8 files changed, 278 insertions(+) create mode 100644 src/main/java/com/gooddata/notification/NotificationService.java create mode 100644 src/main/java/com/gooddata/notification/ProjectEvent.java create mode 100644 src/test/java/com/gooddata/notification/NotificationServiceAT.java create mode 100644 src/test/java/com/gooddata/notification/NotificationServiceIT.java create mode 100644 src/test/java/com/gooddata/notification/NotificationServiceTest.java create mode 100644 src/test/java/com/gooddata/notification/ProjectEventTest.java create mode 100644 src/test/resources/notification/projectEvent.json diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 6cb1e7671..ab3e9ad4f 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -6,6 +6,7 @@ import com.gooddata.account.AccountService; import com.gooddata.connector.ConnectorService; import com.gooddata.dataload.processes.ProcessService; +import com.gooddata.notification.NotificationService; import com.gooddata.util.ResponseErrorHandler; import com.gooddata.warehouse.WarehouseService; import com.gooddata.dataset.DatasetService; @@ -71,6 +72,7 @@ public class GoodData { private final ConnectorService connectorService; private final ProcessService processService; private final WarehouseService warehouseService; + private final NotificationService notificationService; /** * Create instance configured to communicate with GoodData Platform under user with given credentials. @@ -180,6 +182,7 @@ protected GoodData(String hostname, String login, String password, int port, Str processService = new ProcessService(getRestTemplate(), accountService, dataStoreService); warehouseService = new WarehouseService(getRestTemplate()); connectorService = new ConnectorService(getRestTemplate(), projectService); + notificationService = new NotificationService(getRestTemplate()); } private RestTemplate createRestTemplate(String hostname, HttpClient httpClient, int port, String protocol) { @@ -355,4 +358,13 @@ public WarehouseService getWarehouseService() { public ConnectorService getConnectorService() { return connectorService; } + + /** + * Get initialized service for project notifications management. + * + * @return initialized service for project notifications management + */ + public NotificationService getNotificationService() { + return notificationService; + } } diff --git a/src/main/java/com/gooddata/notification/NotificationService.java b/src/main/java/com/gooddata/notification/NotificationService.java new file mode 100644 index 000000000..a4333f460 --- /dev/null +++ b/src/main/java/com/gooddata/notification/NotificationService.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.notification; + +import static com.gooddata.util.Validate.notNull; + +import com.gooddata.AbstractService; +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; +import com.gooddata.project.Project; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +/** + * Service to trigger and manage notifications. + */ +public class NotificationService extends AbstractService { + + public NotificationService(final RestTemplate restTemplate) { + super(restTemplate); + } + + /** + * Triggers given project event. + * + * @param project project of the event + * @param event event to trigger + */ + public void triggerEvent(final Project project, final ProjectEvent event) { + notNull(project, "project can't be null"); + notNull(event, "event can't be null"); + try { + restTemplate.postForEntity(ProjectEvent.URI, event, Void.class, project.getId()); + } catch (GoodDataRestException | RestClientException e) { + throw new GoodDataException("Unable to post project event.", e); + } + } +} diff --git a/src/main/java/com/gooddata/notification/ProjectEvent.java b/src/main/java/com/gooddata/notification/ProjectEvent.java new file mode 100644 index 000000000..1d7e22e88 --- /dev/null +++ b/src/main/java/com/gooddata/notification/ProjectEvent.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.notification; + +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; + +import org.springframework.web.util.UriTemplate; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * Project event. + * + * Serialization only. + */ +@JsonTypeName("projectEvent") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +public class ProjectEvent { + + public static final String URI = "/gdc/projects/{projectId}/notifications/events"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); + + private final String type; + private final Map parameters; + + public ProjectEvent(final String type) { + this(type, new HashMap()); + } + + public ProjectEvent(final String type, final Map parameters) { + notEmpty(type, "type can't be empty"); + notNull(parameters, "parameters can't be null"); + this.type = type; + this.parameters = parameters; + } + + /** + * Set the parameter with given key and value, overwriting the preceding value of the same key (if any). + * @param key parameter key + * @param value parameter value + */ + public void setParameter(final String key, final String value) { + notNull(key, "parameter key can't be null"); + notNull(value, "parameter value can't be null"); + parameters.put(key, value); + } + + @JsonProperty("type") + public String getType() { + return type; + } + + @JsonProperty("parameters") + public Map getParameters() { + return parameters; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof ProjectEvent)) + return false; + + ProjectEvent that = (ProjectEvent) o; + + if (type != null ? !type.equals(that.type) : that.type != null) + return false; + return !(parameters != null ? !parameters.equals(that.parameters) : that.parameters != null); + + } + + @Override + public int hashCode() { + int result = type != null ? type.hashCode() : 0; + result = 31 * result + (parameters != null ? parameters.hashCode() : 0); + return result; + } +} diff --git a/src/test/java/com/gooddata/notification/NotificationServiceAT.java b/src/test/java/com/gooddata/notification/NotificationServiceAT.java new file mode 100644 index 000000000..f147666b4 --- /dev/null +++ b/src/test/java/com/gooddata/notification/NotificationServiceAT.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.notification; + +import static java.util.Collections.singletonMap; + +import com.gooddata.AbstractGoodDataAT; +import org.testng.annotations.Test; + +public class NotificationServiceAT extends AbstractGoodDataAT { + + @Test(groups = "notification", dependsOnGroups = "project") + public void triggerProjectEvent() throws Exception { + gd.getNotificationService().triggerEvent(project, new ProjectEvent("sdk.event.test", singletonMap("test", "map"))); + } + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/notification/NotificationServiceIT.java b/src/test/java/com/gooddata/notification/NotificationServiceIT.java new file mode 100644 index 000000000..de2a20336 --- /dev/null +++ b/src/test/java/com/gooddata/notification/NotificationServiceIT.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.notification; + +import static com.gooddata.util.ResourceUtils.readFromResource; +import static java.util.Collections.singletonMap; +import static net.jadler.Jadler.onRequest; + +import com.gooddata.AbstractGoodDataIT; +import com.gooddata.project.Project; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class NotificationServiceIT extends AbstractGoodDataIT { + + private static final String PROJECT_ID = "PROJECT_ID"; + private static final String PROJECT_EVENT_PATH = ProjectEvent.TEMPLATE.expand(PROJECT_ID).toString(); + + private Project project; + + @BeforeClass + public void setUp() throws Exception { + project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + } + + @Test + public void shouldTriggerEvent() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PROJECT_EVENT_PATH) + .respond() + .withStatus(204); + + gd.getNotificationService().triggerEvent(project, new ProjectEvent("type", singletonMap("key", "value"))); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/notification/NotificationServiceTest.java b/src/test/java/com/gooddata/notification/NotificationServiceTest.java new file mode 100644 index 000000000..053cbff4d --- /dev/null +++ b/src/test/java/com/gooddata/notification/NotificationServiceTest.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.notification; + +import static java.util.Collections.singletonMap; +import static org.mockito.Mockito.*; + +import com.gooddata.project.Project; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.web.client.RestTemplate; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +public class NotificationServiceTest { + + private static final String PROJECT_ID = "TEST_PROJ_ID"; + + @Mock + private Project project; + + @Mock + private RestTemplate restTemplate; + + private NotificationService notificationService; + + @BeforeMethod + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + notificationService = new NotificationService(restTemplate); + when(project.getId()).thenReturn(PROJECT_ID); + } + + @Test + public void testTriggerEvent() throws Exception { + final ProjectEvent projectEvent = new ProjectEvent("type", singletonMap("key", "value")); + notificationService.triggerEvent(project, projectEvent); + verify(restTemplate).postForEntity(eq(ProjectEvent.URI), eq(projectEvent), eq(Void.class), eq(PROJECT_ID)); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testTriggerNullEvent() throws Exception { + notificationService.triggerEvent(project, null); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testTriggerNullProject() throws Exception { + notificationService.triggerEvent(null, mock(ProjectEvent.class)); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/notification/ProjectEventTest.java b/src/test/java/com/gooddata/notification/ProjectEventTest.java new file mode 100644 index 000000000..7e7da6d11 --- /dev/null +++ b/src/test/java/com/gooddata/notification/ProjectEventTest.java @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.notification; + +import static com.gooddata.JsonMatchers.serializesToJson; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.testng.annotations.Test; + +public class ProjectEventTest { + + @Test + public void testSerialization() { + final ProjectEvent projectEvent = new ProjectEvent("etl.test"); + projectEvent.setParameter("text", "cool"); + assertThat(projectEvent, serializesToJson("/notification/projectEvent.json")); + } + +} \ No newline at end of file diff --git a/src/test/resources/notification/projectEvent.json b/src/test/resources/notification/projectEvent.json new file mode 100644 index 000000000..ebc179c7f --- /dev/null +++ b/src/test/resources/notification/projectEvent.json @@ -0,0 +1,8 @@ +{ + "projectEvent": { + "type": "etl.test", + "parameters": { + "text": "cool" + } + } +} \ No newline at end of file From 2850c6743d5136f941800a5835622d36189ffd7c Mon Sep 17 00:00:00 2001 From: Ondrej Benkovsky Date: Fri, 29 Jan 2016 11:21:11 +0100 Subject: [PATCH 037/934] fixed sardine to close connection --- .../com/gooddata/gdc/DataStoreService.java | 2 +- .../java/com/gooddata/gdc/GdcSardine.java | 36 +++++++++++++++++++ .../java/com/gooddata/AbstractGoodDataAT.java | 24 ++++++++++++- .../com/gooddata/gdc/DatastoreServiceAT.java | 24 +++++++++++++ 4 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/gooddata/gdc/GdcSardine.java diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index f2d0d8062..3b6694210 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -63,7 +63,7 @@ public DataStoreService(HttpClient httpClient, RestTemplate restTemplate, GdcSer this.gdcService = notNull(gdcService, "gdcService"); this.gdcUri = URI.create(notEmpty(gdcUri, "gdcUri")); this.restTemplate = notNull(restTemplate, "restTemplate"); - sardine = new SardineImpl(new CustomHttpClientBuilder(httpClient)); + sardine = new GdcSardine(new CustomHttpClientBuilder(httpClient)); } private UriPrefixer getPrefixer() { diff --git a/src/main/java/com/gooddata/gdc/GdcSardine.java b/src/main/java/com/gooddata/gdc/GdcSardine.java new file mode 100644 index 000000000..7f1b3d755 --- /dev/null +++ b/src/main/java/com/gooddata/gdc/GdcSardine.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.gdc; + +import static com.gooddata.util.Validate.notNull; + +import com.github.sardine.impl.SardineImpl; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.impl.client.HttpClientBuilder; + +import java.io.IOException; + +/** + * This class extends SardineImpl, connections were not correctly closed by parent + */ +class GdcSardine extends SardineImpl { + + public GdcSardine(HttpClientBuilder builder) { + super(builder); + } + + /** + * had to be overriden, because parent method did not close connection after execution + */ + @Override + protected T execute(HttpRequestBase request, ResponseHandler responseHandler) throws IOException { + try { + notNull(request,"request must not be null!"); + return super.execute(request, responseHandler); + } finally { + request.releaseConnection(); + } + } +} diff --git a/src/test/java/com/gooddata/AbstractGoodDataAT.java b/src/test/java/com/gooddata/AbstractGoodDataAT.java index 9f5f58d8a..ed711399c 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataAT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataAT.java @@ -1,11 +1,18 @@ package com.gooddata; +import com.gooddata.http.client.GoodDataHttpClient; +import com.gooddata.http.client.LoginSSTRetrievalStrategy; +import com.gooddata.http.client.SSTRetrievalStrategy; import com.gooddata.md.Attribute; import com.gooddata.md.Metric; import com.gooddata.md.ScheduledMail; import com.gooddata.md.report.Report; import com.gooddata.md.report.ReportDefinition; import com.gooddata.project.Project; +import org.apache.http.HttpHost; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.joda.time.LocalDate; import org.testng.annotations.AfterSuite; @@ -18,7 +25,22 @@ public abstract class AbstractGoodDataAT { "sdktest " + new LocalDate() + " " + System.getenv("BUILD_NUMBER"); protected static final GoodData gd = - new GoodData(getProperty("host"), getProperty("login"), getProperty("pass")); + new GoodData(getProperty("host"), getProperty("login"), getProperty("pass")){ + /** + * had to be overriden to access connectionManager, to test how many connections were not closed + */ + @Override + protected HttpClient createHttpClient(String login, String password, String hostname, int port, String protocol, HttpClientBuilder builder) { + PoolingHttpClientConnectionManager httpClientConnectionManager = new PoolingHttpClientConnectionManager(); + final HttpHost host = new HttpHost(hostname, port, protocol); + final HttpClient httpClient = builder.setConnectionManager(httpClientConnectionManager).build(); + final SSTRetrievalStrategy strategy = new LoginSSTRetrievalStrategy(httpClient, host, login, password); + connManager = httpClientConnectionManager; + return new GoodDataHttpClient(httpClient, strategy); + } + }; + + protected static PoolingHttpClientConnectionManager connManager; protected static Project project; diff --git a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java index a28e38fbe..3bc3669b1 100644 --- a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java +++ b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java @@ -10,6 +10,9 @@ import java.io.InputStream; import java.util.UUID; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; import static org.testng.Assert.assertEquals; import static org.testng.Assert.fail; @@ -20,6 +23,7 @@ public class DatastoreServiceAT extends AbstractGoodDataAT { private String file; private String directory; + private static final int ITER_MAX = 10; @Test(groups = "datastore", dependsOnGroups = "account") public void datastoreUpload() throws Exception { @@ -56,4 +60,24 @@ public void datastoreDelete() throws Exception { assertEquals(404, e.getStatusCode()); } } + + @Test(groups = "datastore", dependsOnGroups = "account") + public void datastoreConnectionsClosedAfterMultipleConnections() { + DataStoreService dataStoreService = gd.getDataStoreService(); + directory = "/" + UUID.randomUUID().toString(); + for (int i = 0; i < ITER_MAX; i++) { + dataStoreService.upload(directory + "/file" + i + ".csv", getClass().getResourceAsStream("/person.csv")); + } + assertThat(connManager.getTotalStats().getLeased(), is(equalTo(0))); + } + + @Test(groups = "datastore", dependsOnGroups = "account") + public void datastoreConnectionClosedAfterSingleConnection() throws Exception { + DataStoreService dataStoreService = gd.getDataStoreService(); + + directory = "/" + UUID.randomUUID().toString(); + file = directory + "/file.csv"; + dataStoreService.upload(file, getClass().getResourceAsStream("/person.csv")); + assertThat(connManager.getTotalStats().getLeased(), is(equalTo(0))); + } } From d639c7cb06db614be2425b7ca95c4db0f2e23dfc Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 3 Feb 2016 11:34:35 +0100 Subject: [PATCH 038/934] fix invalid javadocs --- src/main/java/com/gooddata/collections/Page.java | 8 ++++---- src/main/java/com/gooddata/collections/UriPage.java | 2 +- .../java/com/gooddata/connector/ConnectorService.java | 2 +- src/main/java/com/gooddata/md/ReportAttachment.java | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gooddata/collections/Page.java b/src/main/java/com/gooddata/collections/Page.java index ab374e7a5..6216455d7 100644 --- a/src/main/java/com/gooddata/collections/Page.java +++ b/src/main/java/com/gooddata/collections/Page.java @@ -12,7 +12,7 @@ public interface Page { /** * Creates {@link URI} for this page request. - *

+ *

* Use {@link #updateWithPageParams(UriComponentsBuilder)} if you have URI template and only want to update it with * page query params. * @@ -23,17 +23,17 @@ public interface Page { /** * Updates provided URI builder query params according to this page configuration. - *

+ *

* As {@link #getPageUri(UriComponentsBuilder)} returns expanded page URI it is not very useful for cases that * require use of URI template with URI variables. This method allows you to use URI templates and benefit * from pagination support implemented in {@link Page} implementations. It is especially useful if you need to handle * multiple requests of the same URI template in the same way - e.g. monitor request made by {@link RestOperations} * methods. - *

+ *

* Use this in the situation when you have URI template with placeholders and URI variables separately. * This method is useful when you have URI template with placeholders and only want to add query parameters based * on this page to it. - *

+ *

* Use {@link #getPageUri(UriComponentsBuilder)} if you want to get concrete page URI and don't have URI template. * * @param uriBuilder URI builder used for constructing page URI diff --git a/src/main/java/com/gooddata/collections/UriPage.java b/src/main/java/com/gooddata/collections/UriPage.java index f44a1a7d3..19228a4d3 100644 --- a/src/main/java/com/gooddata/collections/UriPage.java +++ b/src/main/java/com/gooddata/collections/UriPage.java @@ -38,7 +38,7 @@ public URI getPageUri(final UriComponentsBuilder uriBuilder) { /** * {@inheritDoc} - *

+ *

* Note that by using this method you might end up with URI that will be different from the one returned by * {@link #getPageUri(UriComponentsBuilder)}. Method only copies query parameters and does not care about * URI path. diff --git a/src/main/java/com/gooddata/connector/ConnectorService.java b/src/main/java/com/gooddata/connector/ConnectorService.java index 23f4f9b90..a60a338a1 100644 --- a/src/main/java/com/gooddata/connector/ConnectorService.java +++ b/src/main/java/com/gooddata/connector/ConnectorService.java @@ -208,7 +208,7 @@ public FutureResult executeProcess(final Project project, final P /** * Gets status of provided connector process. - *

+ *

* You can use process retrieved by getXXXProcess methods on {@link Integration} as well as a result of * {@link ConnectorService#executeProcess(Project, ProcessExecution)}. * diff --git a/src/main/java/com/gooddata/md/ReportAttachment.java b/src/main/java/com/gooddata/md/ReportAttachment.java index 687edabf2..6f2af36a8 100644 --- a/src/main/java/com/gooddata/md/ReportAttachment.java +++ b/src/main/java/com/gooddata/md/ReportAttachment.java @@ -94,7 +94,7 @@ protected ReportAttachment(String uri, Map exportOptions, Report * * * - * @return + * @return map of export options */ public Map getExportOptions() { return exportOptions; } From 3af7bfc29b945d4930010301cc7a0f4d5ca74b09 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 3 Feb 2016 13:59:24 +0100 Subject: [PATCH 039/934] [maven-release-plugin] prepare release gooddata-java-1.2.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7c594864c..a36438f4a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.2.1-SNAPSHOT + 1.2.1 ${project.artifactId} GoodData Java SDK From c97211593d07a83bd135c9a15e74cbe5fb33d2f2 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 3 Feb 2016 13:59:24 +0100 Subject: [PATCH 040/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a36438f4a..bd7ff1de2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.2.1 + 1.2.2-SNAPSHOT ${project.artifactId} GoodData Java SDK From 14c842e545a3e900a234aabfd53f8595e8bf441f Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 3 Feb 2016 15:15:43 +0100 Subject: [PATCH 041/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4facfd885..bcad1a907 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.2.0 + 1.2.1 ``` From 57781c198d40986b3d80fc8fed04e7126b9b07f6 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Wed, 10 Feb 2016 15:11:03 +0100 Subject: [PATCH 042/934] introduce zendesk connector start dates --- .../connector/Zendesk4ProcessExecution.java | 30 +++++++++++++++++++ .../Zendesk4ProcessExecutionTest.java | 10 +++++++ .../process-execution-startDate.json | 6 ++++ 3 files changed, 46 insertions(+) create mode 100644 src/test/resources/connector/process-execution-startDate.json diff --git a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java index 424633714..a2fca64d0 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java @@ -4,14 +4,29 @@ package com.gooddata.connector; import static com.gooddata.connector.ConnectorType.ZENDESK4; +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; + +import java.util.Map; +import java.util.TreeMap; /** * Zendesk 4 (Insights) connector process execution (i.e. definition for single ETL run). Serialization only. */ public class Zendesk4ProcessExecution implements ProcessExecution { + private static final DateTimeFormatter FORMATTER = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC); + private Boolean incremental; + private Map startTimes; + @Override public ConnectorType getConnectorType() { return ZENDESK4; @@ -24,4 +39,19 @@ public Boolean getIncremental() { public void setIncremental(final Boolean incremental) { this.incremental = incremental; } + + @JsonAnyGetter + public Map getStartTimes() { + return startTimes; + } + + + public void setStartTime(final String resource, final DateTime startTime) { + notEmpty(resource, "resource can't be empty"); + notNull(startTime, "startTime can't be null"); + + startTimes = startTimes == null ? new TreeMap() : startTimes; + + startTimes.put(resource + "StartDate", FORMATTER.print(startTime)); + } } diff --git a/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java b/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java index 756a53fef..af8e996aa 100644 --- a/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java @@ -4,6 +4,7 @@ package com.gooddata.connector; import com.gooddata.JsonMatchers; +import org.joda.time.DateTime; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; @@ -23,4 +24,13 @@ public void testShouldSerializeIncremental() throws Exception { assertThat(execution, JsonMatchers.serializesToJson( "/connector/process-execution-incremental.json")); } + + @Test + public void testShouldSerializeStartTimes() throws Exception { + final Zendesk4ProcessExecution execution = new Zendesk4ProcessExecution(); + execution.setIncremental(true); + execution.setStartTime("tickets", new DateTime(0L)); + assertThat(execution, JsonMatchers.serializesToJson( + "/connector/process-execution-startDate.json")); + } } \ No newline at end of file diff --git a/src/test/resources/connector/process-execution-startDate.json b/src/test/resources/connector/process-execution-startDate.json new file mode 100644 index 000000000..3f2042132 --- /dev/null +++ b/src/test/resources/connector/process-execution-startDate.json @@ -0,0 +1,6 @@ +{ + "process": { + "incremental": true, + "ticketsStartDate": "1970-01-01T00:00:00.000Z" + } +} \ No newline at end of file From f831092fd39e1261c07fbd9619615846c1b36279 Mon Sep 17 00:00:00 2001 From: Ondrej Benkovsky Date: Mon, 1 Feb 2016 14:55:33 +0100 Subject: [PATCH 043/934] parser for batch fail status json --- .../com/gooddata/dataset/BatchFailStatus.java | 54 +++++++++++++ .../com/gooddata/dataset/DatasetService.java | 80 ++++++++++++------- .../gooddata/dataset/BatchFailStatusTest.java | 43 ++++++++++ .../gooddata/dataset/DatasetServiceAT.java | 33 ++++++++ .../gooddata/dataset/DatasetServiceIT.java | 50 ++++++++++++ src/test/resources/corruptedPerson.csv | 5 ++ .../resources/dataset/batchFailStatus1.json | 33 ++++++++ .../resources/dataset/batchFailStatus2.json | 9 +++ 8 files changed, 277 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/gooddata/dataset/BatchFailStatus.java create mode 100644 src/test/java/com/gooddata/dataset/BatchFailStatusTest.java create mode 100644 src/test/resources/corruptedPerson.csv create mode 100755 src/test/resources/dataset/batchFailStatus1.json create mode 100644 src/test/resources/dataset/batchFailStatus2.json diff --git a/src/main/java/com/gooddata/dataset/BatchFailStatus.java b/src/main/java/com/gooddata/dataset/BatchFailStatus.java new file mode 100644 index 000000000..924c9cad6 --- /dev/null +++ b/src/main/java/com/gooddata/dataset/BatchFailStatus.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.dataset; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GDDateTimeDeserializer; +import com.gooddata.util.GDDateTimeSerializer; + +import org.joda.time.DateTime; + +import java.util.List; + +/** + * Batch fail status of dataset load. + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class BatchFailStatus { + + private final List failStatuses; + private final List messages; + private final String status; + private final DateTime date; + + @JsonCreator + private BatchFailStatus(@JsonProperty("uploads") List failStatuses, @JsonProperty("messages") List messages, + @JsonProperty("status") String status, @JsonProperty("date") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime date) { + this.failStatuses = failStatuses; + this.messages = messages; + this.status = status; + this.date = date; + } + + public List getFailStatuses() { + return failStatuses; + } + + public List getMessages() { + return messages; + } + + public String getStatus() { + return status; + } + + @JsonSerialize(using = GDDateTimeSerializer.class) + public DateTime getDate() { + return date; + } +} diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 2a5dc57e4..9332208b4 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -35,6 +35,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; import static org.springframework.util.StringUtils.isEmpty; /** @@ -101,7 +102,7 @@ public FutureResult loadDataset(final Project project, final DatasetManife final ByteArrayInputStream inputStream = new ByteArrayInputStream(manifestJson.getBytes(UTF_8)); dataStoreService.upload(dirPath.resolve(MANIFEST_FILE_NAME).toString(), inputStream); - return pullLoad(project, dirPath, manifest.getDataSet()); + return pullLoad(project, dirPath, manifest.getDataSet(), false); } catch (IOException e) { throw new DatasetException("Unable to serialize manifest", manifest.getDataSet(), e); } catch (DataStoreException | GoodDataRestException | RestClientException e) { @@ -156,7 +157,7 @@ public FutureResult loadDatasets(final Project project, final Collection datasets) } } - private FutureResult pullLoad(Project project, final Path dirPath, final String dataset) { - return pullLoad(project, dirPath, asList(dataset)); + private FutureResult pullLoad(Project project, final Path dirPath, final String dataset, boolean isBatchUpload) { + return pullLoad(project, dirPath, singletonList(dataset), isBatchUpload); } - private FutureResult pullLoad(Project project, final Path dirPath, final Collection datasets) { + private FutureResult pullLoad(Project project, final Path dirPath, final Collection datasets, final boolean isBatchUpload) { final PullTask pullTask = restTemplate .postForObject(Pull.URI, new Pull(dirPath.toString()), PullTask.class, project.getId()); return new PollResult<>(this, new SimplePollHandler(pullTask.getUri(), Void.class) { @@ -192,7 +193,7 @@ public boolean isFinished(ClientHttpResponse response) throws IOException { final PullTaskStatus status = extractData(response, PullTaskStatus.class); final boolean finished = status.isFinished(); if (finished && !status.isSuccess()) { - final String message = getErrorMessage(status, dirPath); + final String message = getErrorMessage(status, dirPath, isBatchUpload); throw new DatasetException(message, datasets); } return finished; @@ -215,30 +216,16 @@ protected void onFinish() { } - private String getErrorMessage(final PullTaskStatus status, final Path dirPath) { + private String getErrorMessage(final PullTaskStatus status, final Path dirPath, boolean isBatchUpload) { String message = "status: " + status.getStatus(); try { - final FailStatus failStatus = download(dirPath.resolve(STATUS_FILE_NAME), FailStatus.class); - if (failStatus != null) { - final List errorParts = failStatus.getErrorParts(); - if (!errorParts.isEmpty()) { - final List errors = new ArrayList<>(); - for (FailPart part: errorParts) { - if (part.getLogName() != null) { - try { - final String[] msg = download(dirPath.resolve(part.getLogName()), String[].class); - errors.addAll(asList(msg)); - } catch (IOException | DataStoreException e) { - if (part.getError() != null) { - errors.add(part.getError().getFormattedMessage()); - } - } - } - } - message = errors.toString(); - } else if (failStatus.getError() != null) { - message = failStatus.getError().getFormattedMessage(); - } + Path statusFile = dirPath.resolve(STATUS_FILE_NAME); + if (isBatchUpload) { + final BatchFailStatus batchFailStatus = download(statusFile, BatchFailStatus.class); + message = getBatchFailStatusErrorMsg(dirPath, message, batchFailStatus); + } else { + final FailStatus failStatus = download(statusFile, FailStatus.class); + message = getFailStatusErrorMsg(dirPath, message, failStatus); } } catch (IOException | DataStoreException ignored) { // todo log? @@ -246,6 +233,41 @@ private String getErrorMessage(final PullTaskStatus status, final Path dirPath) return message; } + private String getBatchFailStatusErrorMsg(final Path dirPath, final String defaultMessage, final BatchFailStatus batchFailStatus) { + if (batchFailStatus == null || batchFailStatus.getFailStatuses() == null) { + return defaultMessage; + } + final List messages = new ArrayList<>(); + for (FailStatus failStatus : batchFailStatus.getFailStatuses()) { + messages.add(getFailStatusErrorMsg(dirPath, defaultMessage, failStatus)); + } + return messages.isEmpty() ? defaultMessage : messages.toString(); + } + + private String getFailStatusErrorMsg(final Path dirPath, final String defaultMessage, final FailStatus failStatus) { + if (failStatus == null) { + return defaultMessage; + } + final List errorParts = failStatus.getErrorParts(); + if (errorParts.isEmpty()){ + return (failStatus.getError() != null) ? failStatus.getError().getFormattedMessage() : defaultMessage; + } + final List errors = new ArrayList<>(); + for (FailPart part : errorParts) { + if (part.getLogName() != null) { + try { + final String[] msg = download(dirPath.resolve(part.getLogName()), String[].class); + errors.addAll(asList(msg)); + } catch (IOException | DataStoreException e) { + if (part.getError() != null) { + errors.add(part.getError().getFormattedMessage()); + } + } + } + } + return errors.toString(); + } + private T download(final Path path, final Class type) throws IOException { try (final InputStream input = dataStoreService.download(path.toString())) { return mapper.readValue(input, type); @@ -324,7 +346,6 @@ public void handlePollException(final GoodDataRestException e) { * @param project project to be updated * @param maqlDml update script to be executed in the project * @return poll result - * * @see com.gooddata.model.ModelService#updateProjectModel */ public FutureResult updateProjectData(final Project project, final String maqlDml) { @@ -362,5 +383,4 @@ public void handlePollException(final GoodDataRestException e) { } }); } - } diff --git a/src/test/java/com/gooddata/dataset/BatchFailStatusTest.java b/src/test/java/com/gooddata/dataset/BatchFailStatusTest.java new file mode 100644 index 000000000..705397fa0 --- /dev/null +++ b/src/test/java/com/gooddata/dataset/BatchFailStatusTest.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.dataset; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.hamcrest.Matchers; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.io.InputStream; + +public class BatchFailStatusTest { + @Test + public void testParser() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataset/batchFailStatus1.json"); + final BatchFailStatus value = new ObjectMapper().readValue(stream, BatchFailStatus.class); + assertThat(value, is(notNullValue())); + assertThat(value.getStatus(),is("ERROR")); + assertThat(value.getMessages(),is(Matchers.empty())); + assertThat(value.getDate(),is(new DateTime(2016,2,1,10,12,9, DateTimeZone.UTC))); + assertThat(value.getFailStatuses(),hasSize(2)); + } + + @Test + public void testParser2() throws IOException { + final InputStream stream = getClass().getResourceAsStream("/dataset/batchFailStatus2.json"); + final BatchFailStatus value = new ObjectMapper().readValue(stream, BatchFailStatus.class); + assertThat(value,is(notNullValue())); + assertThat(value.getStatus(),is("ERROR")); + assertThat(value.getMessages(),containsInAnyOrder("test1","test2")); + assertThat(value.getDate(),is(new DateTime(2016,1,1,10,11,15, DateTimeZone.UTC))); + assertThat(value.getFailStatuses(),is(Matchers.empty())); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java index 6afb34cdb..42dde60c4 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java @@ -1,6 +1,12 @@ package com.gooddata.dataset; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.testng.Assert.fail; + import com.gooddata.AbstractGoodDataAT; +import static org.hamcrest.MatcherAssert.assertThat; + import org.testng.annotations.Test; /** @@ -34,5 +40,32 @@ public void updateData() { datasetService.updateProjectData(project, "DELETE FROM {attr.person.name} WHERE {label.person.name} = \"not exists\";"); } + @Test(groups = "dataset", dependsOnGroups = {"md", "datastore"}) + public void loadDatasetFail(){ + final DatasetService datasetService = gd.getDatasetService(); + final DatasetManifest manifest = datasetService.getDatasetManifest(project, "dataset.person"); + try { + datasetService.loadDataset(project, manifest, getClass().getResourceAsStream("/corruptedPerson.csv")).get(); + fail(); + } catch (DatasetException ex){ + assertThat(ex.getMessage(),is(equalTo("Load datasets [dataset.person] failed: Number of columns doesn't corespond on line 3 in dataset.person.csv"))); + } + } + + @Test(groups = "dataset", dependsOnMethods = {"loadDataset"}) + public void loadDatasetBatchFail() throws Exception { + final DatasetService datasetService = gd.getDatasetService(); + final DatasetManifest personManifest = datasetService.getDatasetManifest(project, "dataset.person"); + personManifest.setSource(getClass().getResourceAsStream("/corruptedPerson.csv")); + final DatasetManifest cityManifest = datasetService.getDatasetManifest(project, "dataset.city"); + cityManifest.setSource(getClass().getResourceAsStream("/city.csv")); + + try { + datasetService.loadDatasets(project, personManifest, cityManifest).get(); + fail(); + } catch (DatasetException ex){ + assertThat(ex.getMessage(),is(equalTo("Load datasets [dataset.person, dataset.city] failed: [Number of columns doesn't corespond on line 3 in dataset.person.csv, Number of columns doesn't corespond on line 3 in dataset.person.csv]"))); + } + } } diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index 05f5dc9a0..1e43fac44 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -280,4 +280,54 @@ public void shouldFailUpdateProjectData() throws IOException { gd.getDatasetService().updateProjectData(project, DML_MAQL).get(); } + + @Test + public void shouldReadBatchErrorMessages() throws Exception { + onRequest() + .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/pullTaskStatusError.json")); + onRequest() + .havingPath(containsString("upload_status.json")) + .havingMethodEqualTo("GET") + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/batchFailStatus1.json")); + + final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); + final InputStream source = new ByteArrayInputStream(new byte[]{}); + manifest.setSource(source); + try { + gd.getDatasetService().loadDatasets(project, manifest).get(); + fail("Exception should be thrown"); + } catch (DatasetException e) { + assertThat(e.getMessage(), is("Load datasets [dataset.person] failed: [Manifest consist of columns that are not in single CSV file dataset.stats.csv: f_competitors.nm_name., Manifest consist of columns that are not in single CSV file dataset.stats.csv: f_competitors.nm_name.]")); + } + } + + @Test + public void shouldReadBatchErrorMessagesNoFailStatuses() throws Exception { + onRequest() + .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/pullTaskStatusError.json")); + onRequest() + .havingPath(containsString("upload_status.json")) + .havingMethodEqualTo("GET") + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/batchFailStatus2.json")); + + final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); + final InputStream source = new ByteArrayInputStream(new byte[]{}); + manifest.setSource(source); + try { + gd.getDatasetService().loadDatasets(project, manifest).get(); + fail("Exception should be thrown"); + } catch (DatasetException e) { + assertThat(e.getMessage(), is("Load datasets [dataset.person] failed: status: ERROR")); + } + } } \ No newline at end of file diff --git a/src/test/resources/corruptedPerson.csv b/src/test/resources/corruptedPerson.csv new file mode 100644 index 000000000..d31565503 --- /dev/null +++ b/src/test/resources/corruptedPerson.csv @@ -0,0 +1,5 @@ +f_person.f_shoesize,f_person.nm_name,d_person_role.nm_role,f_person.f_age,d_person_department.nm_department +37,Jane,manager,35,HR +42,developer,25,DevOps +35,Sandy,recruiter,27 +40,Jonathan,developer,50,DevOps diff --git a/src/test/resources/dataset/batchFailStatus1.json b/src/test/resources/dataset/batchFailStatus1.json new file mode 100755 index 000000000..cb135ab94 --- /dev/null +++ b/src/test/resources/dataset/batchFailStatus1.json @@ -0,0 +1,33 @@ +{ + "uploads" : [ + { + "date" : "2016-02-01 10:12:09", + "status" : "ERROR", + "error" : { + "parameters" : [ + "dataset.stats.csv", + "f_competitors.nm_name" + ], + "component" : "GDC::SliToDli", + "errorClass" : "GDC::Exception::User", + "message" : "Manifest consist of columns that are not in single CSV file %s: %s." + } + }, + { + "date" : "2016-02-01 10:12:09", + "status" : "ERROR", + "error" : { + "parameters" : [ + "dataset.stats.csv", + "f_competitors.nm_name" + ], + "component" : "GDC::SliToDli", + "errorClass" : "GDC::Exception::User", + "message" : "Manifest consist of columns that are not in single CSV file %s: %s." + } + } + ], + "messages" : [], + "status" : "ERROR", + "date" : "2016-02-01 10:12:09" +} \ No newline at end of file diff --git a/src/test/resources/dataset/batchFailStatus2.json b/src/test/resources/dataset/batchFailStatus2.json new file mode 100644 index 000000000..e789a3157 --- /dev/null +++ b/src/test/resources/dataset/batchFailStatus2.json @@ -0,0 +1,9 @@ +{ + "uploads": [], + "messages": [ + "test1", + "test2" + ], + "status": "ERROR", + "date": "2016-01-01 10:11:15" +} \ No newline at end of file From afe9f0e2f776271a59c7bae28ccee2cb69f7f9a1 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 11 Feb 2016 13:53:46 +0100 Subject: [PATCH 044/934] [maven-release-plugin] prepare release gooddata-java-1.2.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bd7ff1de2..ed6c76f52 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.2.2-SNAPSHOT + 1.2.2 ${project.artifactId} GoodData Java SDK From b41305444802656ad591ceed822976ad3759ddb6 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 11 Feb 2016 13:53:47 +0100 Subject: [PATCH 045/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ed6c76f52..4917e6bc1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.2.2 + 1.2.3-SNAPSHOT ${project.artifactId} GoodData Java SDK From 419b5fdb690a6caf996bca3b34ccabc27ceb659a Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 11 Feb 2016 14:32:57 +0100 Subject: [PATCH 046/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bcad1a907..7f56be041 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.2.1 + 1.2.2 ``` From 2dd9fc8d789b830d721744a86f480791187b3584 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 11 Feb 2016 14:50:38 +0100 Subject: [PATCH 047/934] add code of conduct --- CODE_OF_CONDUCT.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..a734e49fb --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,5 @@ +# Contributor Code of Conduct + +This project adheres to No Code of Conduct. We are all adults. We accept anyone's contributions. Nothing else matters. + +For more information please visit the [No Code of Conduct](https://github.com/domgetter/NCoC) homepage. From d801f1c772c7cd4d1f569236cb73a9486b1c82ef Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 29 Jan 2016 16:21:57 +0100 Subject: [PATCH 048/934] Report the unauthenticated webdav 500 response conveniently --- .../com/gooddata/gdc/DataStoreService.java | 8 +++++++ .../com/gooddata/gdc/DatastoreServiceAT.java | 23 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index 3b6694210..f5842a5ee 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -4,6 +4,7 @@ package com.gooddata.gdc; import com.github.sardine.Sardine; +import com.github.sardine.impl.SardineException; import com.github.sardine.impl.SardineImpl; import com.gooddata.UriPrefixer; import org.apache.commons.lang.Validate; @@ -100,6 +101,13 @@ public void upload(String path, InputStream stream) { private void upload(URI url, InputStream stream) { try { sardine.put(url.toString(), stream); + } catch (SardineException e) { + if (HttpStatus.INTERNAL_SERVER_ERROR.value() == e.getStatusCode()) { + throw new DataStoreException("Got 500 while uploading to " + url + "." + + "\nThis can be known limitation, see https://github.com/martiner/gooddata-java/wiki/Known-limitations", e); + } else { + throw new DataStoreException("Unable to upload to " + url + " got status " + e.getStatusCode(), e); + } } catch (IOException e) { throw new DataStoreException("Unable to upload to " + url, e); } diff --git a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java index 3bc3669b1..65180c2e0 100644 --- a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java +++ b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java @@ -1,8 +1,11 @@ package com.gooddata.gdc; import com.gooddata.AbstractGoodDataAT; +import com.gooddata.GoodData; import com.gooddata.GoodDataRestException; import org.apache.commons.io.IOUtils; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.File; @@ -25,11 +28,15 @@ public class DatastoreServiceAT extends AbstractGoodDataAT { private String directory; private static final int ITER_MAX = 10; + @BeforeClass + public void setUp() throws Exception { + directory = "/" + UUID.randomUUID().toString(); + } + @Test(groups = "datastore", dependsOnGroups = "account") public void datastoreUpload() throws Exception { DataStoreService dataStoreService = gd.getDataStoreService(); - directory = "/" + UUID.randomUUID().toString(); file = directory + "/file.csv"; dataStoreService.upload(file, getClass().getResourceAsStream("/person.csv")); } @@ -80,4 +87,18 @@ public void datastoreConnectionClosedAfterSingleConnection() throws Exception { dataStoreService.upload(file, getClass().getResourceAsStream("/person.csv")); assertThat(connManager.getTotalStats().getLeased(), is(equalTo(0))); } + + @Test(groups = "datastore", expectedExceptions = DataStoreException.class, + expectedExceptionsMessageRegExp = "(?s).* 500 .*https://github.com/.*/Known-limitations") + public void datastoreUploadWithAuthentication() throws Exception { + final GoodData datastoreGd = new GoodData(getProperty("host"), getProperty("login"), getProperty("pass")); + DataStoreService dataStoreService = datastoreGd.getDataStoreService(); + + try { + final String fileWithAuth = directory + "/fileWithAuth.csv"; + dataStoreService.upload(fileWithAuth, getClass().getResourceAsStream("/person.csv")); + } finally { + datastoreGd.logout(); + } + } } From 5ad2587ae0cc74b04299038bdd0abb841b508f8b Mon Sep 17 00:00:00 2001 From: Peter Plochan Date: Mon, 15 Feb 2016 10:54:02 +0100 Subject: [PATCH 049/934] Add support for partial metadata import/export --- src/main/java/com/gooddata/GoodData.java | 12 ++ .../java/com/gooddata/md/MetadataService.java | 1 - .../md/maintenance/ExportImportException.java | 16 ++ .../md/maintenance/ExportImportService.java | 102 ++++++++++++ .../md/maintenance/PartialMdArtifact.java | 35 ++++ .../md/maintenance/PartialMdExport.java | 86 ++++++++++ .../md/maintenance/PartialMdExportToken.java | 105 ++++++++++++ .../java/com/gooddata/AbstractGoodDataAT.java | 1 + .../java/com/gooddata/gdc/TaskStatusTest.java | 3 +- .../gooddata/md/ExportImportServiceAT.java | 67 ++++++++ .../md/maintenance/ExportImportServiceIT.java | 152 ++++++++++++++++++ .../maintenance/ExportImportServiceTest.java | 54 +++++++ .../md/maintenance/PartialMdArtifactTest.java | 30 ++++ .../md/maintenance/PartialMdExportTest.java | 30 ++++ .../maintenance/PartialMdExportTokenTest.java | 18 +++ .../gooddata/project/ProjectServiceAT.java | 2 - .../task-status.json} | 0 .../partial-export-task-status-fail.json | 17 ++ .../partial-import-task-status-fail.json | 17 ++ .../md/maintenance/partialMDArtifact.json | 8 + .../partialMDExport-defaultVals.json | 8 + .../md/maintenance/partialMDExport.json | 10 ++ .../md/maintenance/partialMDImport.json | 8 + 23 files changed, 777 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/gooddata/md/maintenance/ExportImportException.java create mode 100644 src/main/java/com/gooddata/md/maintenance/ExportImportService.java create mode 100644 src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java create mode 100644 src/main/java/com/gooddata/md/maintenance/PartialMdExport.java create mode 100644 src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java create mode 100644 src/test/java/com/gooddata/md/ExportImportServiceAT.java create mode 100644 src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java create mode 100644 src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java create mode 100644 src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java create mode 100644 src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java create mode 100644 src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java rename src/test/resources/{model/maql-ddl-task-status.json => gdc/task-status.json} (100%) create mode 100644 src/test/resources/md/maintenance/partial-export-task-status-fail.json create mode 100644 src/test/resources/md/maintenance/partial-import-task-status-fail.json create mode 100644 src/test/resources/md/maintenance/partialMDArtifact.json create mode 100644 src/test/resources/md/maintenance/partialMDExport-defaultVals.json create mode 100644 src/test/resources/md/maintenance/partialMDExport.json create mode 100644 src/test/resources/md/maintenance/partialMDImport.json diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index ab3e9ad4f..1b77ed9a1 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -6,6 +6,7 @@ import com.gooddata.account.AccountService; import com.gooddata.connector.ConnectorService; import com.gooddata.dataload.processes.ProcessService; +import com.gooddata.md.maintenance.ExportImportService; import com.gooddata.notification.NotificationService; import com.gooddata.util.ResponseErrorHandler; import com.gooddata.warehouse.WarehouseService; @@ -73,6 +74,7 @@ public class GoodData { private final ProcessService processService; private final WarehouseService warehouseService; private final NotificationService notificationService; + private final ExportImportService exportImportService; /** * Create instance configured to communicate with GoodData Platform under user with given credentials. @@ -183,6 +185,7 @@ protected GoodData(String hostname, String login, String password, int port, Str warehouseService = new WarehouseService(getRestTemplate()); connectorService = new ConnectorService(getRestTemplate(), projectService); notificationService = new NotificationService(getRestTemplate()); + exportImportService = new ExportImportService(getRestTemplate()); } private RestTemplate createRestTemplate(String hostname, HttpClient httpClient, int port, String protocol) { @@ -367,4 +370,13 @@ public ConnectorService getConnectorService() { public NotificationService getNotificationService() { return notificationService; } + + /** + * Get initialized service for metadata export/import. + * + * @return initialized service for metadata export/import + */ + public ExportImportService getExportImportService() { + return exportImportService; + } } diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index 221cd6594..165564c64 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -20,7 +20,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import static com.gooddata.util.Validate.noNullElements; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/md/maintenance/ExportImportException.java b/src/main/java/com/gooddata/md/maintenance/ExportImportException.java new file mode 100644 index 000000000..24f56d6ef --- /dev/null +++ b/src/main/java/com/gooddata/md/maintenance/ExportImportException.java @@ -0,0 +1,16 @@ +package com.gooddata.md.maintenance; + +import com.gooddata.GoodDataException; + +/** + * Exception thrown by ExportImportService when some task failed. + */ +public class ExportImportException extends GoodDataException { + public ExportImportException(String message) { + super(message); + } + + public ExportImportException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/com/gooddata/md/maintenance/ExportImportService.java b/src/main/java/com/gooddata/md/maintenance/ExportImportService.java new file mode 100644 index 000000000..07af4f2e9 --- /dev/null +++ b/src/main/java/com/gooddata/md/maintenance/ExportImportService.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.maintenance; + +import static com.gooddata.util.Validate.notNull; + +import com.gooddata.AbstractPollHandler; +import com.gooddata.AbstractService; +import com.gooddata.FutureResult; +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; +import com.gooddata.PollResult; +import com.gooddata.gdc.TaskStatus; +import com.gooddata.gdc.UriResponse; +import com.gooddata.project.Project; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +/** + * Service providing metadata export/import tasks. + */ +public class ExportImportService extends AbstractService { + + public ExportImportService(RestTemplate restTemplate) { + super(restTemplate); + } + + + /** + * Exports partial metadata from project and returns token identifying this export + * + * @param project project from which metadata should be exported + * @param export export to execute + * @return {@link FutureResult} of the task containing token identifying partial export after the task is completed + * @throws ExportImportException when export resource call fails, polling on export status fails or export status is ERROR + */ + public FutureResult partialExport(Project project, final PartialMdExport export) { + notNull(project, "project"); + notNull(export, "export"); + + final PartialMdArtifact partialMdArtifact; + try { + partialMdArtifact = restTemplate.postForObject(PartialMdExport.URI, export, PartialMdArtifact.class, project.getId()); + } catch (GoodDataRestException | RestClientException e) { + throw new ExportImportException("Unable to export metadata from objects " + export.getUris() + ".", e); + } + + return new PollResult<>(this, new AbstractPollHandler(partialMdArtifact.getStatus().getUri(), + TaskStatus.class, PartialMdExportToken.class) { + @Override + public void handlePollResult(TaskStatus pollResult) { + if (!pollResult.isSuccess()) { + throw new ExportImportException("Partial metadata export failed with errors: " + pollResult.getMessages()); + } + setResult(new PartialMdExportToken(partialMdArtifact.getToken(), export.isExportAttributeProperties())); + } + + @Override + public void handlePollException(GoodDataRestException e) { + throw new ExportImportException("Unable to to export partial metadata.", e); + } + }); + } + + /** + * Imports partial metadata to project based on given token + * + * @param project project to which metadata should be imported + * @param mdExportToken export token to be imported + * @return {@link FutureResult} of the task + * @throws ExportImportException when import resource call fails, polling on import status fails or import status is ERROR + */ + public FutureResult partialImport(Project project, PartialMdExportToken mdExportToken) { + notNull(project, "project"); + notNull(mdExportToken, "mdExportToken"); + + final UriResponse importResponse; + try { + importResponse = restTemplate.postForObject(PartialMdExportToken.URI, mdExportToken, UriResponse.class, project.getId()); + } catch (GoodDataRestException | RestClientException e) { + throw new ExportImportException("Unable to import partial metadata to project '" + project.getUri() + + "' with token '" + mdExportToken.getToken() + "'.", e); + } + + return new PollResult<>(this, new AbstractPollHandler(importResponse.getUri(), TaskStatus.class, Void.class) { + @Override + public void handlePollResult(TaskStatus pollResult) { + if (!pollResult.isSuccess()) { + throw new ExportImportException("Partial metadata import failed with errors: " + pollResult.getMessages()); + } + setResult(null); + } + + @Override + public void handlePollException(GoodDataRestException e) { + throw new ExportImportException("Unable to import partial metadata.", e); + } + }); + } +} diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java new file mode 100644 index 000000000..a3abec75b --- /dev/null +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java @@ -0,0 +1,35 @@ +package com.gooddata.md.maintenance; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.gdc.UriResponse; + +/** + * Partial metadata export result structure. + * For internal use only. + */ +@JsonTypeName("partialMDArtifact") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonInclude(JsonInclude.Include.NON_NULL) +class PartialMdArtifact { + + private final UriResponse status; + private final String token; + + @JsonCreator + public PartialMdArtifact(@JsonProperty("status") UriResponse status, @JsonProperty("token") String token) { + this.status = status; + this.token = token; + } + + public UriResponse getStatus() { + return status; + } + + public String getToken() { + return token; + } +} diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java new file mode 100644 index 000000000..ed72f6b6f --- /dev/null +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java @@ -0,0 +1,86 @@ +package com.gooddata.md.maintenance; + +import static com.gooddata.util.Validate.notEmpty; +import static java.util.Arrays.asList; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.springframework.web.util.UriTemplate; + +import java.util.Collection; +import java.util.HashSet; + +/** + * Partial metadata export configuration structure. + * Serialization only. + */ +@JsonTypeName("partialMDExport") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +public class PartialMdExport { + + public static final String URI = "/gdc/md/{projectId}/maintenance/partialmdexport"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); + + private final Collection uris; + private final boolean crossDataCenterExport; + private final boolean exportAttributeProperties; + + /** + * Creates new PartialMdExport. At least one uri should be given. + * Sets crossDataCenterExport and exportAttributeProperties to false. + * + * @param mdObjectsUris list of uris to metadata objects which should be exported + */ + public PartialMdExport(String... mdObjectsUris) { + this(new HashSet<>(asList(mdObjectsUris))); + } + + /** + * Creates new PartialMdExport. At least one uri should be given. + * Sets crossDataCenterExport and exportAttributeProperties to false. + * + * @param mdObjectsUris list of uris to metadata objects which should be exported + */ + public PartialMdExport(Collection mdObjectsUris) { + this(false, false, mdObjectsUris); + } + + /** + * Creates new PartialMdExport. At least one uri should be given. + * + * @param exportAttributeProperties whether to add necessary data to be able to clone attribute properties + * @param crossDataCenterExport whether export should be usable in any Data Center + * @param mdObjectsUris list of uris to metadata objects which should be exported + */ + public PartialMdExport(boolean exportAttributeProperties, boolean crossDataCenterExport, String... mdObjectsUris) { + this(exportAttributeProperties, crossDataCenterExport, new HashSet<>(asList(mdObjectsUris))); + } + + /** + * Creates new PartialMdExport. At least one uri should be given. + * + * @param exportAttributeProperties whether to add necessary data to be able to clone attribute properties + * @param crossDataCenterExport whether export should be usable in any Data Center + * @param mdObjectsUris list of uris to metadata objects which should be exported + */ + public PartialMdExport(boolean exportAttributeProperties, boolean crossDataCenterExport, Collection mdObjectsUris) { + notEmpty(mdObjectsUris, "uris"); + this.uris = mdObjectsUris; + this.crossDataCenterExport = crossDataCenterExport; + this.exportAttributeProperties = exportAttributeProperties; + } + + public Collection getUris() { + return uris; + } + + public boolean isCrossDataCenterExport() { + return crossDataCenterExport; + } + + public boolean isExportAttributeProperties() { + return exportAttributeProperties; + } +} diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java new file mode 100644 index 000000000..1c928a422 --- /dev/null +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java @@ -0,0 +1,105 @@ +package com.gooddata.md.maintenance; + +import static com.gooddata.util.Validate.notEmpty; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.springframework.web.util.UriTemplate; + +/** + * Partial metadata export token. Serves as configuration structure for import. + * Serialization only. + */ +@JsonTypeName("partialMDImport") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +public class PartialMdExportToken { + + public static final String URI = "/gdc/md/{projectId}/maintenance/partialmdimport"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); + + private final String token; + private boolean overwriteNewer; + private boolean updateLDMObjects; + private boolean importAttributeProperties; + + /** + * Creates new PartialMdExportToken. + *
+ * Sets default values to properties: + *

    + *
  • importAttributeProperties - default false
  • + *
  • overwriteNewer - default true
  • + *
  • updateLDMObjects - default false
  • + *
+ * + * @param token token identifying metadata partially exported from another project + */ + public PartialMdExportToken(String token) { + this(token, false); + } + + /** + * Creates new PartialMdExportToken. For internal purposes only. + *
+ * Sets default values to properties: + *
    + *
  • overwriteNewer - default true
  • + *
  • updateLDMObjects - default false
  • + *
+ * + * @param token token identifying metadata partially exported from another project + * @param importAttributeProperties see {@link #setImportAttributeProperties(boolean)} + */ + PartialMdExportToken(String token, boolean importAttributeProperties) { + this.token = notEmpty(token, "token"); + setImportAttributeProperties(importAttributeProperties); + setOverwriteNewer(true); + setUpdateLDMObjects(false); + } + + public String getToken() { + return token; + } + + public boolean isOverwriteNewer() { + return overwriteNewer; + } + + public boolean isUpdateLDMObjects() { + return updateLDMObjects; + } + + public boolean isImportAttributeProperties() { + return importAttributeProperties; + } + + /** + * Sets the flag {@code overwriteNewer}. + * If {@code true}, UDM/ADM objects are overwritten without checking modification time. + */ + public void setOverwriteNewer(boolean overwriteNewer) { + this.overwriteNewer = overwriteNewer; + } + + /** + * Sets the flag {@code updateLDMObjects}. + * If {@code true}, related LDM objects name, description and tags are overwritten + */ + public void setUpdateLDMObjects(boolean updateLDMObjects) { + this.updateLDMObjects = updateLDMObjects; + } + + /** + * Sets the flag {@code importAttributeProperties}. + * If {@code true}, following attribute properties are cloned: + *
    + *
  • for attribute - import drillDownStepAttributeDF setting
  • + *
  • for attributeDisplayForm - import type setting
  • + *
+ * It also implies {@code 'updateLDMObjects = true'} for all mentioned types.
+ * It will not reliably work (can fail) for exports without {@code 'exportAttributeProperties = true'}. + */ + public void setImportAttributeProperties(boolean importAttributeProperties) { + this.importAttributeProperties = importAttributeProperties; + } +} diff --git a/src/test/java/com/gooddata/AbstractGoodDataAT.java b/src/test/java/com/gooddata/AbstractGoodDataAT.java index ed711399c..23b74f270 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataAT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataAT.java @@ -42,6 +42,7 @@ protected HttpClient createHttpClient(String login, String password, String host protected static PoolingHttpClientConnectionManager connManager; + protected static String projectToken; protected static Project project; protected static String fact; diff --git a/src/test/java/com/gooddata/gdc/TaskStatusTest.java b/src/test/java/com/gooddata/gdc/TaskStatusTest.java index f251b6e1f..a5d0910b9 100644 --- a/src/test/java/com/gooddata/gdc/TaskStatusTest.java +++ b/src/test/java/com/gooddata/gdc/TaskStatusTest.java @@ -3,7 +3,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import static org.testng.Assert.*; import static org.hamcrest.Matchers.*; import static org.hamcrest.MatcherAssert.*; @@ -13,7 +12,7 @@ public class TaskStatusTest { @Test public void testDeser() throws Exception { - final TaskStatus status = MAPPER.readValue(getClass().getResourceAsStream("/model/maql-ddl-task-status.json"), TaskStatus.class); + final TaskStatus status = MAPPER.readValue(getClass().getResourceAsStream("/gdc/task-status.json"), TaskStatus.class); assertThat(status.getStatus(), is("OK")); assertThat(status.getPollUri(), is("/gdc/md/PROJECT_ID/tasks/TASK_ID/status")); } diff --git a/src/test/java/com/gooddata/md/ExportImportServiceAT.java b/src/test/java/com/gooddata/md/ExportImportServiceAT.java new file mode 100644 index 000000000..751a57d3f --- /dev/null +++ b/src/test/java/com/gooddata/md/ExportImportServiceAT.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +import com.gooddata.AbstractGoodDataAT; +import com.gooddata.md.maintenance.PartialMdExport; +import com.gooddata.md.maintenance.PartialMdExportToken; +import com.gooddata.model.ModelDiff; +import com.gooddata.model.ModelService; +import com.gooddata.project.Environment; +import com.gooddata.project.Project; +import org.apache.commons.lang.StringUtils; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.io.InputStreamReader; + +/** + * Metadata export/import acceptance tests. + */ +public class ExportImportServiceAT extends AbstractGoodDataAT { + + private Project importProject; + private PartialMdExportToken partialMdExportToken; + + @BeforeClass + public void setUp() throws Exception { + final Project newProject = new Project(title + " - metadata import", projectToken); + newProject.setEnvironment(Environment.TESTING); + importProject = gd.getProjectService().createProject(newProject).get(); + + final ModelService modelService = gd.getModelService(); + final ModelDiff projectModelDiff = modelService.getProjectModelDiff(importProject, + new InputStreamReader(getClass().getResourceAsStream("/person.json"))).get(); + modelService.updateProjectModel(importProject, projectModelDiff).get(); + } + + @AfterClass + public void tearDown() throws Exception { + if (importProject != null) { + gd.getProjectService().removeProject(importProject); + } + } + + @Test(groups = "exportimport", dependsOnGroups = "md") + public void partialExportMetric() throws Exception { + partialMdExportToken = gd.getExportImportService().partialExport(project, new PartialMdExport(metric.getUri())).get(); + assertThat(partialMdExportToken, notNullValue()); + assertThat(partialMdExportToken.getToken(), not(isEmptyOrNullString())); + assertThat(partialMdExportToken.isImportAttributeProperties(), is(false)); + } + + @Test(groups = "exportimport", dependsOnMethods = "partialExportMetric") + public void partialImportMetric() throws Exception { + gd.getExportImportService().partialImport(importProject, partialMdExportToken).get(); + final Metric importedMetric = gd.getMetadataService().getObjById(importProject, + StringUtils.substringAfterLast(metric.getUri(), "/"), Metric.class); + + assertThat(importedMetric, notNullValue()); + } +} diff --git a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java new file mode 100644 index 000000000..285dc58b0 --- /dev/null +++ b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.maintenance; + +import static com.gooddata.util.ResourceUtils.readFromResource; +import static net.jadler.Jadler.onRequest; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +import com.gooddata.AbstractGoodDataIT; +import com.gooddata.JsonMatchers; +import com.gooddata.project.Project; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class ExportImportServiceIT extends AbstractGoodDataIT { + + private Project project; + + @BeforeClass + public void setUp() throws Exception { + project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + } + + @Test + public void shouldExportPartialMetadata() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PartialMdExport.TEMPLATE.expand(project.getId()).toString()) + .havingBody(JsonMatchers.isJsonString("/md/maintenance/partialMDExport-defaultVals.json")) + .respond() + .withStatus(200) + .withBody(readFromResource("/md/maintenance/partialMDArtifact.json")); + + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/md/projectId/tasks/taskId/status") + .respond() + .withStatus(200) + .withBody(readFromResource("/gdc/task-status.json")); + + final PartialMdExportToken partialExport = gd.getExportImportService() + .partialExport(project, new PartialMdExport(false, false, "/gdc/md/projectId/obj/123", "/gdc/md/projectId/obj/234")).get(); + + assertThat(partialExport, notNullValue()); + assertThat(partialExport.getToken(), is("TOKEN123")); + assertThat(partialExport.isImportAttributeProperties(), is(false)); + } + + @Test(expectedExceptions = ExportImportException.class, + expectedExceptionsMessageRegExp = ".*The object with uri \\(/gdc/md/PROJECT_ID/obj/123\\) doesn't exists.*") + public void shouldPartialExportFailWhenErrorResult() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PartialMdExport.TEMPLATE.expand(project.getId()).toString()) + .respond() + .withStatus(200) + .withBody(readFromResource("/md/maintenance/partialMDArtifact.json")); + + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/md/projectId/tasks/taskId/status") + .respond() + .withStatus(200) + .withBody(readFromResource("/md/maintenance/partial-export-task-status-fail.json")); + + gd.getExportImportService().partialExport(project, new PartialMdExport(false, false, "/gdc/md/projectId/obj/123", "/gdc/md/projectId/obj/234")).get(); + } + + @Test(expectedExceptions = ExportImportException.class) + public void shouldPartialExportFailWhenPollingError() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PartialMdExport.TEMPLATE.expand(project.getId()).toString()) + .respond() + .withStatus(200) + .withBody(readFromResource("/md/maintenance/partialMDArtifact.json")); + + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/md/projectId/tasks/taskId/status") + .respond() + .withStatus(404); + + gd.getExportImportService().partialExport(project, new PartialMdExport(false, false, "/gdc/md/projectId/obj/123", "/gdc/md/projectId/obj/234")).get(); + } + + @Test + public void shouldImportPartialMetadata() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PartialMdExportToken.TEMPLATE.expand(project.getId()).toString()) + .havingBody(JsonMatchers.isJsonString("/md/maintenance/partialMDImport.json")) + .respond() + .withStatus(200) + .withBody("{ \"uri\": \"/gdc/md/projectId/tasks/taskId/status\" }"); + + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/md/projectId/tasks/taskId/status") + .respond() + .withStatus(200) + .withBody(readFromResource("/gdc/task-status.json")); + + final PartialMdExportToken exportToken = new PartialMdExportToken("TOKEN123"); + exportToken.setUpdateLDMObjects(true); + exportToken.setImportAttributeProperties(true); + gd.getExportImportService().partialImport(project, exportToken).get(); + } + + @Test(expectedExceptions = ExportImportException.class, + expectedExceptionsMessageRegExp = ".*The token \\(TOKEN123\\) is not valid.*") + public void shouldPartialImportFailWhenErrorResult() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PartialMdExportToken.TEMPLATE.expand(project.getId()).toString()) + .respond() + .withStatus(200) + .withBody("{ \"uri\": \"/gdc/md/projectId/tasks/taskId/status\" }"); + + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/md/projectId/tasks/taskId/status") + .respond() + .withStatus(200) + .withBody(readFromResource("/md/maintenance/partial-import-task-status-fail.json")); + + gd.getExportImportService().partialImport(project, new PartialMdExportToken("TOKEN123")).get(); + } + + @Test(expectedExceptions = ExportImportException.class) + public void shouldPartialImportFailWhenPollingError() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PartialMdExportToken.TEMPLATE.expand(project.getId()).toString()) + .respond() + .withStatus(200) + .withBody("{ \"uri\": \"/gdc/md/projectId/tasks/taskId/status\" }"); + + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/md/projectId/tasks/taskId/status") + .respond() + .withStatus(404); + + gd.getExportImportService().partialImport(project, new PartialMdExportToken("TOKEN123")).get(); + } + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java new file mode 100644 index 000000000..bd3dc829b --- /dev/null +++ b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.maintenance; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.when; + +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; +import com.gooddata.gdc.UriResponse; +import com.gooddata.project.Project; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.web.client.RestTemplate; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +public class ExportImportServiceTest { + + private static final String PROJECT_ID = "TEST_PROJ_ID"; + + @Mock + private Project project; + @Mock + private RestTemplate restTemplate; + + private ExportImportService service; + + @BeforeMethod + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + service = new ExportImportService(restTemplate); + when(project.getId()).thenReturn(PROJECT_ID); + } + + @Test(expectedExceptions = ExportImportException.class) + public void testCreatePartialExportError() throws Exception { + when(restTemplate.postForObject(eq(PartialMdExport.URI), any(PartialMdExport.class), eq(PartialMdArtifact.class), eq(PROJECT_ID))) + .thenThrow(new GoodDataRestException(400, "request", "Failed", "export", "error")); + + service.partialExport(project, new PartialMdExport(false, false, "uri123")); + } + + @Test(expectedExceptions = ExportImportException.class) + public void testCreatePartialImportError() throws Exception { + when(restTemplate.postForObject(eq(PartialMdExportToken.URI), any(PartialMdExportToken.class), eq(UriResponse.class), eq(PROJECT_ID))) + .thenThrow(new GoodDataRestException(400, "request", "Failed", "import", "error")); + + service.partialImport(project, new PartialMdExportToken("TOKEN123")); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java new file mode 100644 index 000000000..6cc8d255b --- /dev/null +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java @@ -0,0 +1,30 @@ +package com.gooddata.md.maintenance; + +import static com.gooddata.JsonMatchers.serializesToJson; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.gdc.UriResponse; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class PartialMdArtifactTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream input = getClass().getResourceAsStream("/md/maintenance/partialMDArtifact.json"); + final PartialMdArtifact partialMdArtifact = new ObjectMapper().readValue(input, PartialMdArtifact.class); + + assertThat(partialMdArtifact.getStatus().getUri(), is("/gdc/md/projectId/tasks/taskId/status")); + assertThat(partialMdArtifact.getToken(), is("TOKEN123")); + } + + @Test + public void shouldSerialize() throws Exception { + final PartialMdArtifact partialMdArtifact = new PartialMdArtifact(new UriResponse("/gdc/md/projectId/tasks/taskId/status"), "TOKEN123"); + + assertThat(partialMdArtifact, serializesToJson("/md/maintenance/partialMDArtifact.json")); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java new file mode 100644 index 000000000..4d750a573 --- /dev/null +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java @@ -0,0 +1,30 @@ +package com.gooddata.md.maintenance; + +import static com.gooddata.JsonMatchers.serializesToJson; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.testng.annotations.Test; + +public class PartialMdExportTest { + + @Test + public void shouldSerialize() throws Exception { + final PartialMdExport partialMdExport = + new PartialMdExport(true, true, "/gdc/md/projectId/obj/123", "/gdc/md/projectId/obj/234"); + + assertThat(partialMdExport, serializesToJson("/md/maintenance/partialMDExport.json")); + } + + @Test + public void shouldNotSerializeDefaultValues() { + final PartialMdExport partialMdExport = + new PartialMdExport(false, false, "/gdc/md/projectId/obj/123", "/gdc/md/projectId/obj/234"); + + assertThat(partialMdExport, serializesToJson("/md/maintenance/partialMDExport-defaultVals.json")); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testEmptyUris() throws Exception { + new PartialMdExport(); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java new file mode 100644 index 000000000..863628ffd --- /dev/null +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java @@ -0,0 +1,18 @@ +package com.gooddata.md.maintenance; + +import static com.gooddata.JsonMatchers.serializesToJson; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.testng.annotations.Test; + +public class PartialMdExportTokenTest { + + @Test + public void shouldSerialize() throws Exception { + final PartialMdExportToken partialMdExportToken = new PartialMdExportToken("TOKEN123"); + partialMdExportToken.setUpdateLDMObjects(true); + partialMdExportToken.setImportAttributeProperties(true); + + assertThat(partialMdExportToken, serializesToJson("/md/maintenance/partialMDImport.json")); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index 43a180a18..f87f2cb1c 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -31,8 +31,6 @@ public class ProjectServiceAT extends AbstractGoodDataAT { private static final String PROJECT_FEATURE_FLAG = "testFeatureFlag"; - private final String projectToken; - public ProjectServiceAT() { projectToken = getProperty("projectToken"); } diff --git a/src/test/resources/model/maql-ddl-task-status.json b/src/test/resources/gdc/task-status.json similarity index 100% rename from src/test/resources/model/maql-ddl-task-status.json rename to src/test/resources/gdc/task-status.json diff --git a/src/test/resources/md/maintenance/partial-export-task-status-fail.json b/src/test/resources/md/maintenance/partial-export-task-status-fail.json new file mode 100644 index 000000000..b33b6fa69 --- /dev/null +++ b/src/test/resources/md/maintenance/partial-export-task-status-fail.json @@ -0,0 +1,17 @@ +{ + "wTaskStatus": { + "messages": [ + { + "error": { + "parameters": ["/gdc/md/PROJECT_ID/obj/123"], + "requestId": "REQUEST_ID", + "component": "GDC::MAINTENANCE::PARTIAL_EXPORT", + "errorClass": "GDC::Exception::User", + "message": "The object with uri (%s) doesn't exists." + } + } + ], + "poll": "/gdc/md/PROJECT_ID/tasks/TASK_ID/status", + "status": "ERROR" + } +} \ No newline at end of file diff --git a/src/test/resources/md/maintenance/partial-import-task-status-fail.json b/src/test/resources/md/maintenance/partial-import-task-status-fail.json new file mode 100644 index 000000000..baee12345 --- /dev/null +++ b/src/test/resources/md/maintenance/partial-import-task-status-fail.json @@ -0,0 +1,17 @@ +{ + "wTaskStatus": { + "messages": [ + { + "error": { + "parameters": ["TOKEN123"], + "requestId": "REQUEST_ID", + "component": "GDC::MAINTENANCE::PARTIAL_IMPORT", + "errorClass": "GDC::Exception::User", + "message": "The token (%s) is not valid." + } + } + ], + "poll": "/gdc/md/PROJECT_ID/tasks/TASK_ID/status", + "status": "ERROR" + } +} \ No newline at end of file diff --git a/src/test/resources/md/maintenance/partialMDArtifact.json b/src/test/resources/md/maintenance/partialMDArtifact.json new file mode 100644 index 000000000..36f2a4e90 --- /dev/null +++ b/src/test/resources/md/maintenance/partialMDArtifact.json @@ -0,0 +1,8 @@ +{ + "partialMDArtifact": { + "status": { + "uri": "/gdc/md/projectId/tasks/taskId/status" + }, + "token": "TOKEN123" + } +} diff --git a/src/test/resources/md/maintenance/partialMDExport-defaultVals.json b/src/test/resources/md/maintenance/partialMDExport-defaultVals.json new file mode 100644 index 000000000..4587b1697 --- /dev/null +++ b/src/test/resources/md/maintenance/partialMDExport-defaultVals.json @@ -0,0 +1,8 @@ +{ + "partialMDExport": { + "uris": [ + "/gdc/md/projectId/obj/123", + "/gdc/md/projectId/obj/234" + ] + } +} \ No newline at end of file diff --git a/src/test/resources/md/maintenance/partialMDExport.json b/src/test/resources/md/maintenance/partialMDExport.json new file mode 100644 index 000000000..d83c0232f --- /dev/null +++ b/src/test/resources/md/maintenance/partialMDExport.json @@ -0,0 +1,10 @@ +{ + "partialMDExport": { + "uris": [ + "/gdc/md/projectId/obj/123", + "/gdc/md/projectId/obj/234" + ], + "crossDataCenterExport": true, + "exportAttributeProperties": true + } +} \ No newline at end of file diff --git a/src/test/resources/md/maintenance/partialMDImport.json b/src/test/resources/md/maintenance/partialMDImport.json new file mode 100644 index 000000000..ddc46c1ac --- /dev/null +++ b/src/test/resources/md/maintenance/partialMDImport.json @@ -0,0 +1,8 @@ +{ + "partialMDImport": { + "token": "TOKEN123", + "overwriteNewer": true, + "updateLDMObjects": true, + "importAttributeProperties": true + } +} From db17eefe73095ba97f55fcc5d1232289d886ab06 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 26 Feb 2016 15:40:59 +0100 Subject: [PATCH 050/934] fix javadocs in PartialMdExportToken --- .../gooddata/md/maintenance/PartialMdExportToken.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java index 1c928a422..d5536c2da 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java @@ -24,7 +24,7 @@ public class PartialMdExportToken { /** * Creates new PartialMdExportToken. - *
+ *
* Sets default values to properties: *
    *
  • importAttributeProperties - default false
  • @@ -76,6 +76,8 @@ public boolean isImportAttributeProperties() { /** * Sets the flag {@code overwriteNewer}. * If {@code true}, UDM/ADM objects are overwritten without checking modification time. + * + * @param overwriteNewer flag value to be set */ public void setOverwriteNewer(boolean overwriteNewer) { this.overwriteNewer = overwriteNewer; @@ -84,6 +86,8 @@ public void setOverwriteNewer(boolean overwriteNewer) { /** * Sets the flag {@code updateLDMObjects}. * If {@code true}, related LDM objects name, description and tags are overwritten + * + * @param updateLDMObjects flag value to be set */ public void setUpdateLDMObjects(boolean updateLDMObjects) { this.updateLDMObjects = updateLDMObjects; @@ -96,8 +100,10 @@ public void setUpdateLDMObjects(boolean updateLDMObjects) { *
  • for attribute - import drillDownStepAttributeDF setting
  • *
  • for attributeDisplayForm - import type setting
  • *
- * It also implies {@code 'updateLDMObjects = true'} for all mentioned types.
+ * It also implies {@code 'updateLDMObjects = true'} for all mentioned types.
* It will not reliably work (can fail) for exports without {@code 'exportAttributeProperties = true'}. + * + * @param importAttributeProperties flag value to be set */ public void setImportAttributeProperties(boolean importAttributeProperties) { this.importAttributeProperties = importAttributeProperties; From ebc375c048733b17114372e6aab705c1c6892005 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 26 Feb 2016 15:50:13 +0100 Subject: [PATCH 051/934] [maven-release-plugin] prepare release gooddata-java-1.3.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4917e6bc1..43a16c1d6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.2.3-SNAPSHOT + 1.3.0 ${project.artifactId} GoodData Java SDK From bf267d98e2e1f4258397830f48fdc49128a4f7a9 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 26 Feb 2016 15:50:14 +0100 Subject: [PATCH 052/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 43a16c1d6..d34b9c692 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.3.0 + 1.3.1-SNAPSHOT ${project.artifactId} GoodData Java SDK From 011a0e7bb522dfe0de7b8556f9e6108e5d8e17b5 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 26 Feb 2016 16:00:31 +0100 Subject: [PATCH 053/934] bump version in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f56be041..234ab9ddc 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.2.2 + 1.3.0 ``` From 7f98e7f722a3fdc38c9f8f5e49abced0c3800cf2 Mon Sep 17 00:00:00 2001 From: Adam Stulpa Date: Wed, 2 Mar 2016 08:27:29 +0100 Subject: [PATCH 054/934] expose http client for extending classes --- src/main/java/com/gooddata/GoodData.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 1b77ed9a1..caa17d48b 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -62,6 +62,7 @@ public class GoodData { private static final int RESTAPI_VERSION = 1; private final RestTemplate restTemplate; + private final HttpClient httpClient; private final AccountService accountService; private final ProjectService projectService; private final MetadataService metadataService; @@ -168,7 +169,7 @@ protected GoodData(String hostname, String login, String password, int port, Str notEmpty(login, "login"); notEmpty(password, "password"); notEmpty(protocol, "protocol"); - final HttpClient httpClient = createHttpClient(login, password, hostname, port, protocol, + httpClient = createHttpClient(login, password, hostname, port, protocol, createHttpClientBuilder(settings)); restTemplate = createRestTemplate(hostname, httpClient, port, protocol); @@ -178,7 +179,7 @@ protected GoodData(String hostname, String login, String password, int port, Str metadataService = new MetadataService(getRestTemplate()); modelService = new ModelService(getRestTemplate()); gdcService = new GdcService(getRestTemplate()); - dataStoreService = new DataStoreService(httpClient, getRestTemplate(), gdcService, new HttpHost(hostname, port, protocol).toURI()); + dataStoreService = new DataStoreService(getHttpClient(), getRestTemplate(), gdcService, new HttpHost(hostname, port, protocol).toURI()); datasetService = new DatasetService(getRestTemplate(), dataStoreService); reportService = new ReportService(getRestTemplate()); processService = new ProcessService(getRestTemplate(), accountService, dataStoreService); @@ -255,6 +256,15 @@ protected final RestTemplate getRestTemplate() { return restTemplate; } + /** + * Get the configured {@link HttpClient} used by the library. + * This is the extension point for inheriting classes providing additional services. + * @return HTTP client + */ + protected final HttpClient getHttpClient() { + return httpClient; + } + /** * Logout from GoodData Platform */ From ec841f83ca215b24561177b347ecb6f9724b8b80 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 2 Mar 2016 17:29:42 +0100 Subject: [PATCH 055/934] [maven-release-plugin] prepare release gooddata-java-1.3.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d34b9c692..ff47c7cb2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.3.1-SNAPSHOT + 1.3.1 ${project.artifactId} GoodData Java SDK From 90e244d509d89b88b458cb0c53b57b316ec8bbfe Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 2 Mar 2016 17:29:43 +0100 Subject: [PATCH 056/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ff47c7cb2..3b16d39bd 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.3.1 + 1.3.2-SNAPSHOT ${project.artifactId} GoodData Java SDK From 91ce6d339813916807fec12910a254e40c061454 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 2 Mar 2016 17:40:08 +0100 Subject: [PATCH 057/934] Bump version in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 234ab9ddc..d44556eec 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.3.0 + 1.3.1 ``` From 2d3bbbfaa9b7f55866a2f09f88b5df7e8bc4b2b4 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 3 Mar 2016 14:15:34 +0100 Subject: [PATCH 058/934] Add nexus-staging-maven-plugin --- pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pom.xml b/pom.xml index 3b16d39bd..890c4f6a5 100644 --- a/pom.xml +++ b/pom.xml @@ -147,6 +147,19 @@ + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.6 + true + + sonatype-nexus-staging + https://oss.sonatype.org/ + + true + + From ea18a389a6140010b52b5a708a93bd403e64f021 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 18 Jun 2015 19:27:00 +0200 Subject: [PATCH 059/934] Add FeatureFlagService with listFeatureFlags Lets move support of feature flags of all scopes to its own service in its own package. Also fix naming conventions and use helper return objects instead of lists. --- src/main/java/com/gooddata/GoodData.java | 12 +++ .../com/gooddata/featureflag/FeatureFlag.java | 53 +++++++++++ .../featureflag/FeatureFlagService.java | 53 +++++++++++ .../gooddata/featureflag/FeatureFlags.java | 88 +++++++++++++++++++ .../java/com/gooddata/gdc/FeatureFlag.java | 4 + .../java/com/gooddata/gdc/FeatureFlags.java | 11 ++- .../com/gooddata/project/ProjectService.java | 8 +- .../featureflag/FeatureFlagServiceAT.java | 29 ++++++ .../featureflag/FeatureFlagServiceIT.java | 43 +++++++++ .../featureflag/FeatureFlagServiceTest.java | 72 +++++++++++++++ .../featureflag/FeatureFlagsTest.java | 54 ++++++++++++ .../com/gooddata/gdc/FeatureFlagsTest.java | 3 +- .../gooddata/project/ProjectServiceAT.java | 9 -- .../gooddata/project/ProjectServiceIT.java | 3 +- .../gooddata/project/ProjectServiceTest.java | 1 + 15 files changed, 428 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/gooddata/featureflag/FeatureFlag.java create mode 100644 src/main/java/com/gooddata/featureflag/FeatureFlagService.java create mode 100644 src/main/java/com/gooddata/featureflag/FeatureFlags.java create mode 100644 src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java create mode 100644 src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java create mode 100644 src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java create mode 100644 src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index caa17d48b..52b13dad6 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -6,6 +6,7 @@ import com.gooddata.account.AccountService; import com.gooddata.connector.ConnectorService; import com.gooddata.dataload.processes.ProcessService; +import com.gooddata.featureflag.FeatureFlagService; import com.gooddata.md.maintenance.ExportImportService; import com.gooddata.notification.NotificationService; import com.gooddata.util.ResponseErrorHandler; @@ -76,6 +77,7 @@ public class GoodData { private final WarehouseService warehouseService; private final NotificationService notificationService; private final ExportImportService exportImportService; + private final FeatureFlagService featureFlagService; /** * Create instance configured to communicate with GoodData Platform under user with given credentials. @@ -187,6 +189,7 @@ protected GoodData(String hostname, String login, String password, int port, Str connectorService = new ConnectorService(getRestTemplate(), projectService); notificationService = new NotificationService(getRestTemplate()); exportImportService = new ExportImportService(getRestTemplate()); + featureFlagService = new FeatureFlagService(restTemplate); } private RestTemplate createRestTemplate(String hostname, HttpClient httpClient, int port, String protocol) { @@ -389,4 +392,13 @@ public NotificationService getNotificationService() { public ExportImportService getExportImportService() { return exportImportService; } + + /** + * Get initialized service for feature flag management. + * + * @return initialized service for feature flag management + */ + public FeatureFlagService getFeatureFlagService() { + return featureFlagService; + } } diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlag.java b/src/main/java/com/gooddata/featureflag/FeatureFlag.java new file mode 100644 index 000000000..0cdae3566 --- /dev/null +++ b/src/main/java/com/gooddata/featureflag/FeatureFlag.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import static com.gooddata.util.Validate.notNull; + +/** + * Feature flag is a boolean flag used for enabling / disabling some specific feature of GoodData platform. + * It can be used in various scopes (per project, per project group, per user, global etc.). + */ +public class FeatureFlag { + + private final String name; + private boolean enabled; + + public FeatureFlag(final String name, final boolean enabled) { + this.name = notNull(name, "name cannot be null"); + this.enabled = enabled; + } + + public String getName() { + return name; + } + + public boolean isEnabled() { + return enabled; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final FeatureFlag that = (FeatureFlag) o; + + if (enabled != that.enabled) return false; + return !(name != null ? !name.equals(that.name) : that.name != null); + + } + + @Override + public int hashCode() { + int result = name != null ? name.hashCode() : 0; + result = 31 * result + (enabled ? 1 : 0); + return result; + } + + @Override + public String toString() { + return "{name='" + name + '\'' + ", enabled=" + enabled + "}"; + } +} diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java new file mode 100644 index 000000000..c95606423 --- /dev/null +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import com.gooddata.AbstractService; +import com.gooddata.GoodDataException; +import com.gooddata.project.Project; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import static com.gooddata.featureflag.FeatureFlags.AGGREGATED_FEATURE_FLAGS_TEMPLATE; +import static com.gooddata.util.Validate.notNull; + +/** + * Provides feature flag management. Feature flag is a boolean flag used for enabling / disabling some specific feature + * of GoodData platform. It can be used in various scopes (per project, per project group, per user, global etc.). + */ +public class FeatureFlagService extends AbstractService { + + /** + * Constructs service for GoodData feature flags management. + * + * @param restTemplate RESTful HTTP Spring template + */ + public FeatureFlagService(final RestTemplate restTemplate) { + super(restTemplate); + } + + /** + * Returns aggregated feature flags for given project and current user (aggregates global, project group, project + * and user feature flags). + * It doesn't matter whether feature flag is enabled or not, it'll be included in both cases. + * + * @param project project, cannot be null + * @return aggregated feature flags for given project and current user + */ + public FeatureFlags listFeatureFlags(final Project project) { + notNull(project, "project"); + try { + final FeatureFlags featureFlags = restTemplate + .getForObject(AGGREGATED_FEATURE_FLAGS_TEMPLATE.expand(project.getId()), FeatureFlags.class); + + if (featureFlags == null) { + throw new GoodDataException("empty response from API call"); + } + return featureFlags; + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to list aggregated feature flags for project ID=" + project.getId(), e); + } + } + +} diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlags.java b/src/main/java/com/gooddata/featureflag/FeatureFlags.java new file mode 100644 index 000000000..3eba66bea --- /dev/null +++ b/src/main/java/com/gooddata/featureflag/FeatureFlags.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.springframework.web.util.UriTemplate; + +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import static com.gooddata.util.Validate.notEmpty; +import static org.springframework.util.Assert.notNull; + +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonTypeName("featureFlags") +@JsonIgnoreProperties(ignoreUnknown = true) +public class FeatureFlags implements Iterable { + + public static final String AGGREGATED_FEATURE_FLAGS_URI = "/gdc/internal/projects/{projectId}/featureFlags"; + public static final UriTemplate AGGREGATED_FEATURE_FLAGS_TEMPLATE = new UriTemplate(AGGREGATED_FEATURE_FLAGS_URI); + + private final List featureFlags = new LinkedList<>(); + + /* protected helper method for JSON deserialization */ + @JsonAnySetter + protected void addFlag(final String name, final boolean enabled) { + notNull(name); + featureFlags.add(new FeatureFlag(name, enabled)); + } + + /** + * @deprecated use {@link #isEnabled(String)} method or {@link Iterable} feature of this class + */ + @Deprecated + public List getFeatureFlags() { + return featureFlags; + } + + /** + * {@inheritDoc Iterable#iterator} + */ + @Override + public Iterator iterator() { + return featureFlags.iterator(); + } + + /** + * Returns true if the feature flag with given name exists and is enabled, false otherwise. + * + * @param flagName the name of feature flag + * @return true if the feature flag with given name exists and is enabled, false otherwise + */ + public boolean isEnabled(final String flagName) { + notEmpty(flagName, "flagName"); + for (final FeatureFlag flag : featureFlags) { + if (flagName.equalsIgnoreCase(flag.getName())) { + return flag.isEnabled(); + } + } + return false; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final FeatureFlags that = (FeatureFlags) o; + + return !(featureFlags != null ? !featureFlags.equals(that.featureFlags) : that.featureFlags != null); + + } + + @Override + public int hashCode() { + return featureFlags != null ? featureFlags.hashCode() : 0; + } + + @Override + public String toString() { + return "FeatureFlags{" + featureFlags + "}"; + } +} diff --git a/src/main/java/com/gooddata/gdc/FeatureFlag.java b/src/main/java/com/gooddata/gdc/FeatureFlag.java index be09a43ee..4ce05d17a 100644 --- a/src/main/java/com/gooddata/gdc/FeatureFlag.java +++ b/src/main/java/com/gooddata/gdc/FeatureFlag.java @@ -8,7 +8,11 @@ /** * Feature flag is a boolean flag used for enabling / disabling some specific feature of GoodData platform. * It can be used in various scopes (per project, per project group, per user, global etc.). + * + * @deprecated use {@link com.gooddata.featureflag.FeatureFlagService} and {@link com.gooddata.featureflag.FeatureFlag} instead */ +@Deprecated +@SuppressWarnings("deprecation") public class FeatureFlag { private final String name; diff --git a/src/main/java/com/gooddata/gdc/FeatureFlags.java b/src/main/java/com/gooddata/gdc/FeatureFlags.java index 088a1d1dd..2cce6c703 100644 --- a/src/main/java/com/gooddata/gdc/FeatureFlags.java +++ b/src/main/java/com/gooddata/gdc/FeatureFlags.java @@ -13,11 +13,15 @@ import java.util.List; import static org.springframework.util.Assert.notNull; -import static org.springframework.util.CollectionUtils.isEmpty; +/** + * @deprecated use {@link com.gooddata.featureflag.FeatureFlagService} and {@link com.gooddata.featureflag.FeatureFlags} instead + */ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("featureFlags") @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated +@SuppressWarnings("deprecation") public class FeatureFlags { public static final String AGGREGATED_FEATURE_FLAGS_URI = "/gdc/internal/projects/{projectId}/featureFlags"; @@ -32,6 +36,10 @@ protected void addFlag(final String name, final boolean enabled) { featureFlags.add(new FeatureFlag(name, enabled)); } + /** + * @deprecated use {@link com.gooddata.featureflag.FeatureFlags#isEnabled(String)} method or its {@link Iterable} feature + */ + @Deprecated public List getFeatureFlags() { return featureFlags; } @@ -44,7 +52,6 @@ public boolean equals(final Object o) { final FeatureFlags that = (FeatureFlags) o; return !(featureFlags != null ? !featureFlags.equals(that.featureFlags) : that.featureFlags != null); - } @Override diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index 0b76fb5cb..e6f157e85 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -13,6 +13,7 @@ import com.gooddata.account.AccountService; import com.gooddata.collections.Page; import com.gooddata.collections.PageableList; +import com.gooddata.featureflag.FeatureFlagService; import com.gooddata.gdc.AsyncTask; import com.gooddata.gdc.FeatureFlag; import com.gooddata.gdc.FeatureFlags; @@ -353,7 +354,10 @@ public Role getRoleByUri(String uri) { * * @param project project, cannot be null * @return list of aggregated feature flags for given project and current user + * @deprecated use {@link FeatureFlagService#listFeatureFlags(Project)} instead */ + @Deprecated + @SuppressWarnings("deprecation") public List listAggregatedFeatureFlags(final Project project) { notNull(project, "project"); try { @@ -372,8 +376,8 @@ public List listAggregatedFeatureFlags(final Project project) { } /** - * Lists all project feature flags (only project scoped flags, use {@link #listAggregatedFeatureFlags(Project)} for - * aggregated flags from all scopes). + * Lists all project feature flags (only project scoped flags, use {@link FeatureFlagService#listFeatureFlags(Project)} + * for aggregated flags from all scopes). * It doesn't matter whether feature flag is enabled or not, it'll be included in all cases. * * @param project project, cannot be null diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java new file mode 100644 index 000000000..94104424c --- /dev/null +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.featureflag; + +import com.gooddata.AbstractGoodDataAT; +import org.testng.annotations.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItems; + +/** + * Feature flag acceptance tests. + */ +public class FeatureFlagServiceAT extends AbstractGoodDataAT { + + private static final String PROJECT_FEATURE_FLAG = "testFeatureFlag"; + + @Test(groups = "featureFlag", dependsOnGroups = "project") + public void listFeatureFlags() throws Exception { + final FeatureFlags flags = gd.getFeatureFlagService().listFeatureFlags(project); + + assertThat(flags, hasItems( + new com.gooddata.featureflag.FeatureFlag("mostRecentFeatureFlag", true), + new com.gooddata.featureflag.FeatureFlag(PROJECT_FEATURE_FLAG, true))); + } + +} diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java new file mode 100644 index 000000000..d50c1739b --- /dev/null +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import com.gooddata.AbstractGoodDataIT; +import com.gooddata.project.Project; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readStringFromResource; +import static net.jadler.Jadler.onRequest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; + +public class FeatureFlagServiceIT extends AbstractGoodDataIT { + + private FeatureFlagService service; + private Project project; + + @BeforeMethod + public void setUp() throws Exception { + service = gd.getFeatureFlagService(); + project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + } + + @Test + public void listFeatureFlagsShouldReturnAggregatedFlagsForProject() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/internal/projects/PROJECT_ID/featureFlags") + .respond() + .withBody(readStringFromResource("/gdc/featureFlags.json")) + .withStatus(200); + + final FeatureFlags flags = service.listFeatureFlags(project); + + assertThat(flags, containsInAnyOrder( + new FeatureFlag("testFeature", true), + new FeatureFlag("testFeature2", false))); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java new file mode 100644 index 000000000..d0256ce6c --- /dev/null +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import com.gooddata.GoodDataException; +import com.gooddata.project.Project; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.net.URI; + +import static java.util.Collections.singleton; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.mockito.Mockito.when; + +public class FeatureFlagServiceTest { + + private static final String PROJECT_ID = "11"; + private static final String FEATURE_FLAGS_URI = "/gdc/internal/projects/11/featureFlags"; + + @Mock + private Project project; + @Mock + private FeatureFlags featureFlags; + @Mock + private RestTemplate restTemplate; + + private FeatureFlagService service; + + @BeforeMethod + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + service = new FeatureFlagService(restTemplate); + when(project.getId()).thenReturn(PROJECT_ID); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullArgThenGetFeatureFlagsShouldThrow() throws Exception { + service.listFeatureFlags(null); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenEmptyResponseThenGetFeatureFlagsShouldThrow() throws Exception { + when(restTemplate.getForObject(new URI(FEATURE_FLAGS_URI), FeatureFlags.class)).thenReturn(null); + service.listFeatureFlags(project); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenClientErrorResponseThenGetFeatureFlagsShouldThrow() throws Exception { + when(restTemplate.getForObject(new URI(FEATURE_FLAGS_URI), FeatureFlags.class)) + .thenThrow(new RestClientException("")); + service.listFeatureFlags(project); + } + + @Test + public void testGetFeatureFlags() throws Exception { + final FeatureFlag flag1 = new FeatureFlag("flag1", true); + when(restTemplate.getForObject(new URI(FEATURE_FLAGS_URI), FeatureFlags.class)).thenReturn(featureFlags); + when(featureFlags.iterator()).thenReturn(singleton(flag1).iterator()); + + final FeatureFlags flags = service.listFeatureFlags(project); + + assertThat(flags, contains(flag1)); + } + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java new file mode 100644 index 000000000..df9664834 --- /dev/null +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.isOneOf; +import static org.testng.AssertJUnit.assertNotNull; + +public class FeatureFlagsTest { + + @Test + public void testDeserialize() { + final FeatureFlags flags = readObjectFromResource(getClass(), "/gdc/featureFlags.json", FeatureFlags.class); + + assertNotNull(flags); + assertThat(flags, containsInAnyOrder( + new FeatureFlag("testFeature", true), + new FeatureFlag("testFeature2", false))); + } + + @Test + public void shouldIterateThroughFlagsInForeach() throws Exception { + final FeatureFlags flags = readObjectFromResource(getClass(), "/gdc/featureFlags.json", FeatureFlags.class); + for (FeatureFlag flag : flags) { + assertThat(flag, isOneOf( + new FeatureFlag("testFeature", true), + new FeatureFlag("testFeature2", false))); + } + } + + @Test + public void isEnabledShouldReturnCorrectBoolean() throws Exception { + final FeatureFlags flags = new FeatureFlags(); + flags.addFlag("enabledFlag", true); + flags.addFlag("disabledFlag", false); + + assertThat(flags.isEnabled("enabledFlag"), is(true)); + assertThat(flags.isEnabled("disabledFlag"), is(false)); + assertThat(flags.isEnabled("nonexistentFlag"), is(false)); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullNameThenIsEnabledShouldThrow() throws Exception { + final FeatureFlags flags = new FeatureFlags(); + flags.isEnabled(null); + } + +} diff --git a/src/test/java/com/gooddata/gdc/FeatureFlagsTest.java b/src/test/java/com/gooddata/gdc/FeatureFlagsTest.java index b51924ef7..54ef24649 100644 --- a/src/test/java/com/gooddata/gdc/FeatureFlagsTest.java +++ b/src/test/java/com/gooddata/gdc/FeatureFlagsTest.java @@ -11,14 +11,15 @@ import static org.hamcrest.Matchers.hasSize; import static org.testng.AssertJUnit.assertNotNull; +@SuppressWarnings("deprecation") public class FeatureFlagsTest { @Test public void testDeserialize() { final FeatureFlags featureFlags = readObjectFromResource(getClass(), "/gdc/featureFlags.json", FeatureFlags.class); - assertNotNull(featureFlags); + assertNotNull(featureFlags); assertThat(featureFlags.getFeatureFlags(), hasSize(2)); assertThat(featureFlags.getFeatureFlags(), contains( new FeatureFlag("testFeature", true), diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index f87f2cb1c..981b157b3 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -107,15 +107,6 @@ public void listProjectFeatureFlags() throws Exception { new ProjectFeatureFlag(PROJECT_FEATURE_FLAG, true))); } - @Test(groups = "project", dependsOnMethods = "listProjectFeatureFlags") - public void listAggregatedFeatureFlags() throws Exception { - final List flags = gd.getProjectService().listAggregatedFeatureFlags(project); - - assertThat(flags, hasItems( - new FeatureFlag("mostRecentFeatureFlag", true), - new FeatureFlag(PROJECT_FEATURE_FLAG, true))); - } - @Test(groups = "project", dependsOnMethods = "createProjectFeatureFlag") public void getProjectFeatureFlag() throws Exception { final ProjectFeatureFlag featureFlag = diff --git a/src/test/java/com/gooddata/project/ProjectServiceIT.java b/src/test/java/com/gooddata/project/ProjectServiceIT.java index e15ad7f11..83206c2c8 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceIT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceIT.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Set; +@SuppressWarnings("deprecation") public class ProjectServiceIT extends AbstractGoodDataIT { private static final ObjectMapper MAPPER = new ObjectMapper(); @@ -146,7 +147,7 @@ public void shouldReturnProjectTemplates() throws Exception { assertThat(templates, hasSize(1)); } - @Test + @Test public void shouldReturnAvailableValidations() throws Exception { onRequest() .havingPathEqualTo("/gdc/md/" + PROJECT_ID + "/validate") diff --git a/src/test/java/com/gooddata/project/ProjectServiceTest.java b/src/test/java/com/gooddata/project/ProjectServiceTest.java index 377d3d703..c72e7f0a2 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceTest.java +++ b/src/test/java/com/gooddata/project/ProjectServiceTest.java @@ -28,6 +28,7 @@ import static org.hamcrest.Matchers.hasSize; import static org.mockito.Mockito.when; +@SuppressWarnings("deprecation") public class ProjectServiceTest { private static final String ACCOUNT_ID = "17"; From 7c507faf1cc9d5328984ec428e261d381434324e Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 19 Jun 2015 19:11:28 +0200 Subject: [PATCH 060/934] Move getProjectFeatureFlags to FeatureFlagService Lets move support of feature flags of all scopes to its own service in its own package. Also fix naming conventions and use helper return objects instead of lists. --- .../featureflag/FeatureFlagService.java | 25 ++++ .../featureflag/ProjectFeatureFlag.java | 133 ++++++++++++++++++ .../featureflag/ProjectFeatureFlags.java | 65 +++++++++ .../gooddata/project/ProjectFeatureFlag.java | 4 +- .../gooddata/project/ProjectFeatureFlags.java | 4 + .../com/gooddata/project/ProjectService.java | 8 ++ .../featureflag/FeatureFlagServiceAT.java | 12 ++ .../featureflag/FeatureFlagServiceIT.java | 21 ++- .../featureflag/FeatureFlagServiceTest.java | 33 +++++ .../featureflag/ProjectFeatureFlagTest.java | 34 +++++ .../featureflag/ProjectFeatureFlagsTest.java | 87 ++++++++++++ .../project/ProjectFeatureFlagsTest.java | 16 ++- .../gooddata/project/ProjectServiceAT.java | 14 -- .../resources/featureflag/featureFlags.json | 6 + .../featureflag/projectFeatureFlag.json | 9 ++ .../featureflag/projectFeatureFlags.json | 29 ++++ 16 files changed, 479 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java create mode 100644 src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java create mode 100644 src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java create mode 100644 src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java create mode 100644 src/test/resources/featureflag/featureFlags.json create mode 100644 src/test/resources/featureflag/projectFeatureFlag.json create mode 100644 src/test/resources/featureflag/projectFeatureFlags.json diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index c95606423..912c36f33 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -10,6 +10,7 @@ import org.springframework.web.client.RestTemplate; import static com.gooddata.featureflag.FeatureFlags.AGGREGATED_FEATURE_FLAGS_TEMPLATE; +import static com.gooddata.featureflag.ProjectFeatureFlags.PROJECT_FEATURE_FLAGS_TEMPLATE; import static com.gooddata.util.Validate.notNull; /** @@ -50,4 +51,28 @@ public FeatureFlags listFeatureFlags(final Project project) { } } + /** + * Returns project feature flags (only project scoped flags, use {@link #listFeatureFlags(Project)} for aggregated + * flags from all scopes) for given project. + * It doesn't matter whether feature flag is enabled or not, it'll be included in both cases. + * + * @param project project, cannot be null + * @return list of all feature flags for given project + */ + public ProjectFeatureFlags listProjectFeatureFlags(final Project project) { + notNull(project, "project"); + try { + final ProjectFeatureFlags projectFeatureFlags = restTemplate + .getForObject(PROJECT_FEATURE_FLAGS_TEMPLATE.expand(project.getId()), ProjectFeatureFlags.class); + + if (projectFeatureFlags == null) { + throw new GoodDataException("empty response from API call"); + } + + return projectFeatureFlags; + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to list project feature flags for project ID=" + project.getId(), e); + } + } + } diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java new file mode 100644 index 000000000..da2661715 --- /dev/null +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import com.fasterxml.jackson.annotation.*; +import org.springframework.web.util.UriTemplate; + +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + +/** + * Project feature flag is a boolean flag used for enabling / disabling some specific feature of GoodData platform + * on per project basis. + */ +@JsonTypeName("featureFlag") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ProjectFeatureFlag { + + public static final String PROJECT_FEATURE_FLAG_URI = ProjectFeatureFlags.PROJECT_FEATURE_FLAGS_URI + "/{featureFlag}"; + public static final UriTemplate PROJECT_FEATURE_FLAG_TEMPLATE = new UriTemplate(PROJECT_FEATURE_FLAG_URI); + + private final String name; + private boolean enabled; + + @JsonIgnore + private Links links; + + /** + * Creates new project feature flag which is by default enabled (true). + * + * @param name unique name of feature flag + */ + public ProjectFeatureFlag(String name) { + this(notEmpty(name, "name"), true, null); + } + + /** + * Creates new project feature flag with given value. + * + * @param name unique name of feature flag + * @param enabled true (flag enabled) or false (flag disabled) + */ + public ProjectFeatureFlag(String name, boolean enabled) { + this(notEmpty(name, "name"), enabled, null); + } + + @JsonCreator + ProjectFeatureFlag(@JsonProperty("key") String name, + @JsonProperty("value") boolean enabled, + @JsonProperty("links") Links links) { + this.name = name; + this.enabled = enabled; + this.links = links; + } + + @JsonProperty("key") + public String getName() { + return name; + } + + @JsonProperty("value") + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + @JsonIgnore + public String getUri() { + notNull(links, "links cannot be null if you want to get feature flag uri!"); + return links.getSelf(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final ProjectFeatureFlag that = (ProjectFeatureFlag) o; + + if (enabled != that.enabled) { + return false; + } + return !(name != null ? !name.equals(that.name) : that.name != null); + + } + + @Override + public int hashCode() { + int result = name != null ? name.hashCode() : 0; + result = 31 * result + (enabled ? 1 : 0); + return result; + } + + @Override + public String toString() { + return "ProjectFeatureFlag{" + + "name='" + name + '\'' + + ", enabled=" + enabled + + ", links=" + links + + '}'; + } + + @JsonIgnoreProperties(ignoreUnknown = true) + static class Links { + private final String self; + + @JsonCreator + public Links(@JsonProperty("self") String self) { + this.self = self; + } + + public String getSelf() { + return self; + } + + @Override + public String toString() { + return "Links{" + + "self='" + self + '\'' + + '}'; + } + } +} diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java new file mode 100644 index 000000000..64ebff02d --- /dev/null +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import com.fasterxml.jackson.annotation.*; +import com.gooddata.project.Project; +import org.springframework.web.util.UriTemplate; + +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import static com.gooddata.util.Validate.notEmpty; +import static org.springframework.util.CollectionUtils.isEmpty; + +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonTypeName("featureFlags") +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectFeatureFlags implements Iterable { + + public static final String PROJECT_FEATURE_FLAGS_URI = Project.URI + "/projectFeatureFlags"; + public static final UriTemplate PROJECT_FEATURE_FLAGS_TEMPLATE = new UriTemplate(PROJECT_FEATURE_FLAGS_URI); + + private final List items = new LinkedList<>(); + + @JsonCreator + ProjectFeatureFlags(@JsonProperty("items") List items) { + if (!isEmpty(items)) { + this.items.addAll(items); + } + } + + /** + *{@inheritDoc Iterable#iterator} + */ + @Override + public Iterator iterator() { + return items.iterator(); + } + + /** + * Returns true if the project feature flag with given name exists and is enabled, false otherwise. + * + * @param flagName the name of project feature flag + * @return true if the project feature flag with given name exists and is enabled, false otherwise + */ + public boolean isEnabled(final String flagName) { + notEmpty(flagName, "flagName"); + for (final ProjectFeatureFlag flag : items) { + if (flagName.equalsIgnoreCase(flag.getName())) { + return flag.isEnabled(); + } + } + return false; + } + + /** + * @deprecated use {@link #isEnabled(String)} method or {@link Iterable} feature of this class + */ + @Deprecated + public List getItems() { + return items; + } +} diff --git a/src/main/java/com/gooddata/project/ProjectFeatureFlag.java b/src/main/java/com/gooddata/project/ProjectFeatureFlag.java index 7d07a4847..fb3ffac8c 100644 --- a/src/main/java/com/gooddata/project/ProjectFeatureFlag.java +++ b/src/main/java/com/gooddata/project/ProjectFeatureFlag.java @@ -7,7 +7,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.springframework.web.util.UriTemplate; import static com.gooddata.util.Validate.notNull; @@ -15,11 +14,14 @@ /** * Project feature flag is a boolean flag used for enabling / disabling some specific feature of GoodData platform * on per project basis. + * + * @deprecated use {@link com.gooddata.featureflag.FeatureFlagService} and {@link com.gooddata.featureflag.ProjectFeatureFlags} instead */ @JsonTypeName("featureFlag") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) +@Deprecated public class ProjectFeatureFlag { public static final String FEATURE_FLAG_URI = ProjectFeatureFlags.FEATURE_FLAGS_URI + "/{featureFlag}"; diff --git a/src/main/java/com/gooddata/project/ProjectFeatureFlags.java b/src/main/java/com/gooddata/project/ProjectFeatureFlags.java index b0022879c..8e617df0a 100644 --- a/src/main/java/com/gooddata/project/ProjectFeatureFlags.java +++ b/src/main/java/com/gooddata/project/ProjectFeatureFlags.java @@ -12,9 +12,13 @@ import java.util.ArrayList; import java.util.List; +/** + * @deprecated use {@link com.gooddata.featureflag.FeatureFlagService} and {@link com.gooddata.featureflag.ProjectFeatureFlags} instead + */ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("featureFlags") @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public class ProjectFeatureFlags { public static final String FEATURE_FLAGS_URI = Project.URI + "/projectFeatureFlags"; diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index e6f157e85..3232bdc1c 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -382,7 +382,10 @@ public List listAggregatedFeatureFlags(final Project project) { * * @param project project, cannot be null * @return list of all feature flags for given project + * @deprecated use {@link FeatureFlagService#listProjectFeatureFlags(Project)} instead */ + @Deprecated + @SuppressWarnings("deprecation") public List listFeatureFlags(Project project) { notNull(project, "project"); try { @@ -409,6 +412,7 @@ public List listFeatureFlags(Project project) { * @param featureFlag feature flag to be created, cannot be null * @return created feature flag */ + @SuppressWarnings("deprecation") public ProjectFeatureFlag createFeatureFlag(final Project project, final ProjectFeatureFlag featureFlag) { notNull(project, "project"); notNull(featureFlag, "featureFlag"); @@ -431,6 +435,7 @@ public ProjectFeatureFlag createFeatureFlag(final Project project, final Project * @param featureFlagName name of feature flag, cannot be empty * @return feature flag */ + @SuppressWarnings("deprecation") public ProjectFeatureFlag getFeatureFlag(final Project project, final String featureFlagName) { notNull(project, "project"); notEmpty(featureFlagName, "featureFlagName"); @@ -445,6 +450,7 @@ public ProjectFeatureFlag getFeatureFlag(final Project project, final String fea * @param featureFlag updated feature flag * @return updated feature flag */ + @SuppressWarnings("deprecation") public ProjectFeatureFlag updateFeatureFlag(final ProjectFeatureFlag featureFlag) { notNull(featureFlag, "featureFlag"); notEmpty(featureFlag.getUri(), "featureFlag"); @@ -462,6 +468,7 @@ public ProjectFeatureFlag updateFeatureFlag(final ProjectFeatureFlag featureFlag * * @param featureFlag existing project feature flag with links set properly, cannot be null */ + @SuppressWarnings("deprecation") public void deleteFeatureFlag(ProjectFeatureFlag featureFlag) { notNull(featureFlag, "featureFlag"); notEmpty(featureFlag.getUri(), "featureFlag URI"); @@ -474,6 +481,7 @@ public void deleteFeatureFlag(ProjectFeatureFlag featureFlag) { } + @SuppressWarnings("deprecation") private ProjectFeatureFlag getFeatureFlag(String featureFlagUri) { return restTemplate.getForObject(featureFlagUri, ProjectFeatureFlag.class); } diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java index 94104424c..17d57f4cc 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -18,6 +18,18 @@ public class FeatureFlagServiceAT extends AbstractGoodDataAT { private static final String PROJECT_FEATURE_FLAG = "testFeatureFlag"; @Test(groups = "featureFlag", dependsOnGroups = "project") + public void listProjectFeatureFlags() throws Exception { + gd.getProjectService().createFeatureFlag(project, + new com.gooddata.project.ProjectFeatureFlag("mostRecentFeatureFlag")); + + final ProjectFeatureFlags flags = gd.getFeatureFlagService().listProjectFeatureFlags(project); + + assertThat(flags, hasItems( + new ProjectFeatureFlag("mostRecentFeatureFlag", true), + new ProjectFeatureFlag(PROJECT_FEATURE_FLAG, true))); + } + + @Test(groups = "featureFlag", dependsOnMethods = "listProjectFeatureFlags") public void listFeatureFlags() throws Exception { final FeatureFlags flags = gd.getFeatureFlagService().listFeatureFlags(project); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java index d50c1739b..6ac916900 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -31,7 +31,7 @@ public void listFeatureFlagsShouldReturnAggregatedFlagsForProject() throws Excep .havingMethodEqualTo("GET") .havingPathEqualTo("/gdc/internal/projects/PROJECT_ID/featureFlags") .respond() - .withBody(readStringFromResource("/gdc/featureFlags.json")) + .withBody(readStringFromResource("/featureflag/featureFlags.json")) .withStatus(200); final FeatureFlags flags = service.listFeatureFlags(project); @@ -40,4 +40,23 @@ public void listFeatureFlagsShouldReturnAggregatedFlagsForProject() throws Excep new FeatureFlag("testFeature", true), new FeatureFlag("testFeature2", false))); } + + + @Test + public void listProjectFeatureFlagsShouldReturnProjectFeatureFlags() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/projects/PROJECT_ID/projectFeatureFlags") + .respond() + .withBody(readStringFromResource("/featureflag/projectFeatureFlags.json")) + .withStatus(200); + + final ProjectFeatureFlags flags = service.listProjectFeatureFlags(project); + + assertThat(flags, containsInAnyOrder( + new ProjectFeatureFlag("myCoolFeature", true), + new ProjectFeatureFlag("mySuperCoolFeature", true), + new ProjectFeatureFlag("mySuperSecretFeature", false))); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java index d0256ce6c..d525fde7f 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -23,10 +23,13 @@ public class FeatureFlagServiceTest { private static final String PROJECT_ID = "11"; private static final String FEATURE_FLAGS_URI = "/gdc/internal/projects/11/featureFlags"; + private static final String PROJECT_FEATURE_FLAGS_URI = "/gdc/projects/11/projectFeatureFlags"; @Mock private Project project; @Mock + private ProjectFeatureFlags projectFeatureFlags; + @Mock private FeatureFlags featureFlags; @Mock private RestTemplate restTemplate; @@ -69,4 +72,34 @@ public void testGetFeatureFlags() throws Exception { assertThat(flags, contains(flag1)); } + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullArgThenGetProjectFeatureFlagsShouldThrow() throws Exception { + service.listProjectFeatureFlags(null); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenEmptyResponseThenGetProjectFeatureFlagsShouldThrow() throws Exception { + when(restTemplate.getForObject(new URI(PROJECT_FEATURE_FLAGS_URI), ProjectFeatureFlags.class)).thenReturn(null); + service.listProjectFeatureFlags(project); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenClientErrorResponseThenGetProjectFeatureFlagsShouldThrow() throws Exception { + when(restTemplate.getForObject(new URI(PROJECT_FEATURE_FLAGS_URI), ProjectFeatureFlags.class)) + .thenThrow(new RestClientException("")); + service.listProjectFeatureFlags(project); + } + + @Test + public void testGetProjectFeatureFlags() throws Exception { + final ProjectFeatureFlag flag1 = new ProjectFeatureFlag("flag1", true); + when(restTemplate.getForObject(new URI(PROJECT_FEATURE_FLAGS_URI), ProjectFeatureFlags.class)) + .thenReturn(projectFeatureFlags); + when(projectFeatureFlags.iterator()).thenReturn(singleton(flag1).iterator()); + + final ProjectFeatureFlags flags = service.listProjectFeatureFlags(project); + + assertThat(flags, contains(flag1)); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java new file mode 100644 index 000000000..e20fd6cbe --- /dev/null +++ b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import org.testng.annotations.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +public class ProjectFeatureFlagTest { + + @Test + public void testDefaultValue() throws Exception { + final ProjectFeatureFlag flag = new ProjectFeatureFlag("test"); + assertThat(flag.isEnabled(), is(true)); + } + + @Test + public void testCustomValue() throws Exception { + final ProjectFeatureFlag flag = new ProjectFeatureFlag("test", false); + assertThat(flag.isEnabled(), is(false)); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testEmptyName() throws Exception { + new ProjectFeatureFlag(" "); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testEmptyNameWithValue() throws Exception { + new ProjectFeatureFlag(" ", false); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java new file mode 100644 index 000000000..b9b29fef0 --- /dev/null +++ b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.featureflag; + +import org.testng.annotations.Test; + +import java.io.IOException; + +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.isOneOf; +import static org.hamcrest.core.StringContains.containsString; +import static org.hamcrest.core.StringStartsWith.startsWith; +import static org.testng.AssertJUnit.assertNotNull; + +public class ProjectFeatureFlagsTest { + + @Test + public void testDeserialize() { + final ProjectFeatureFlags featureFlags = readObjectFromResource(getClass(), "/project/feature-flags.json", + ProjectFeatureFlags.class); + assertNotNull(featureFlags); + + assertThat(featureFlags, containsInAnyOrder( + new ProjectFeatureFlag("myCoolFeature", true), + new ProjectFeatureFlag("mySuperCoolFeature", true), + new ProjectFeatureFlag("mySuperSecretFeature", false))); + } + + @Test + public void testSerialize() throws IOException { + final ProjectFeatureFlags projectFeatureFlags = new ProjectFeatureFlags(asList( + new ProjectFeatureFlag("enabledFeatureFlag", true), + new ProjectFeatureFlag("disabledFeatureFlag", false))); + + final String serializedFeatureFlags = OBJECT_MAPPER.writeValueAsString(projectFeatureFlags); + + assertThat(serializedFeatureFlags, startsWith("{\"featureFlags\"")); + assertThat(serializedFeatureFlags, containsString("\"key\":\"enabledFeatureFlag\",\"value\":true")); + assertThat(serializedFeatureFlags, containsString("\"key\":\"disabledFeatureFlag\",\"value\":false")); + } + + @Test + public void shouldIterateThroughFlagsInForeach() throws Exception { + final ProjectFeatureFlags flags = readObjectFromResource(getClass(), "/project/feature-flags.json", + ProjectFeatureFlags.class); + for (ProjectFeatureFlag flag : flags) { + assertThat(flag, isOneOf( + new ProjectFeatureFlag("myCoolFeature", true), + new ProjectFeatureFlag("mySuperCoolFeature", true), + new ProjectFeatureFlag("mySuperSecretFeature", false))); + } + } + + @Test + public void isEnabledShouldReturnCorrectBoolean() throws Exception { + final ProjectFeatureFlags flags = new ProjectFeatureFlags(asList( + new ProjectFeatureFlag("enabledFlag", true), + new ProjectFeatureFlag("disabledFlag", false) + )); + + assertThat(flags.isEnabled("enabledFlag"), is(true)); + assertThat(flags.isEnabled("disabledFlag"), is(false)); + assertThat(flags.isEnabled("nonexistentFlag"), is(false)); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullNameThenIsEnabledShouldThrow() throws Exception { + final ProjectFeatureFlags flags = new ProjectFeatureFlags( + singletonList(new ProjectFeatureFlag("enabledFlag", true))); + flags.isEnabled(null); + } + + @Test + public void whenNullArgumentInConstructorThenShouldStillWork() throws Exception { + final ProjectFeatureFlags flags = new ProjectFeatureFlags(null); + assertNotNull(flags.iterator()); + assertThat(flags.isEnabled("nonexistentFlag"), is(false)); + } + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectFeatureFlagsTest.java b/src/test/java/com/gooddata/project/ProjectFeatureFlagsTest.java index 9195bf804..fa8e5211d 100644 --- a/src/test/java/com/gooddata/project/ProjectFeatureFlagsTest.java +++ b/src/test/java/com/gooddata/project/ProjectFeatureFlagsTest.java @@ -1,18 +1,24 @@ package com.gooddata.project; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.util.Collections; + import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; +import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.isOneOf; import static org.hamcrest.core.StringContains.containsString; import static org.hamcrest.core.StringStartsWith.startsWith; import static org.testng.AssertJUnit.assertNotNull; -import org.testng.annotations.Test; - -import java.io.IOException; - +@SuppressWarnings("deprecation") public class ProjectFeatureFlagsTest { @Test @@ -21,7 +27,7 @@ public void testDeserialize() { ProjectFeatureFlags.class); assertNotNull(featureFlags); - assertThat(featureFlags.getItems(), contains( + assertThat(featureFlags.getItems(), containsInAnyOrder( new ProjectFeatureFlag("myCoolFeature", true), new ProjectFeatureFlag("mySuperCoolFeature", true), new ProjectFeatureFlag("mySuperSecretFeature", false))); diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index 981b157b3..c42e9a59d 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -3,9 +3,7 @@ import com.gooddata.AbstractGoodDataAT; import com.gooddata.GoodDataRestException; import com.gooddata.collections.PageRequest; -import com.gooddata.gdc.FeatureFlag; import org.springframework.http.HttpStatus; -import org.testng.annotations.AfterClass; import org.testng.annotations.Test; import java.util.ArrayList; @@ -17,7 +15,6 @@ import static com.gooddata.project.ProjectIdMatcher.hasSameIdAs; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.empty; -import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; @@ -96,17 +93,6 @@ public void createProjectFeatureFlag() throws Exception { checkFeatureFlag(featureFlag, true); } - @Test(groups = "project", dependsOnMethods = "createProjectFeatureFlag") - public void listProjectFeatureFlags() throws Exception { - gd.getProjectService().createFeatureFlag(project, new ProjectFeatureFlag("mostRecentFeatureFlag")); - - final List projectFeatureFlags = gd.getProjectService().listFeatureFlags(project); - - assertThat(projectFeatureFlags, hasItems( - new ProjectFeatureFlag("mostRecentFeatureFlag", true), - new ProjectFeatureFlag(PROJECT_FEATURE_FLAG, true))); - } - @Test(groups = "project", dependsOnMethods = "createProjectFeatureFlag") public void getProjectFeatureFlag() throws Exception { final ProjectFeatureFlag featureFlag = diff --git a/src/test/resources/featureflag/featureFlags.json b/src/test/resources/featureflag/featureFlags.json new file mode 100644 index 000000000..72ff8f9d2 --- /dev/null +++ b/src/test/resources/featureflag/featureFlags.json @@ -0,0 +1,6 @@ +{ + "featureFlags": { + "testFeature": true, + "testFeature2": false + } +} \ No newline at end of file diff --git a/src/test/resources/featureflag/projectFeatureFlag.json b/src/test/resources/featureflag/projectFeatureFlag.json new file mode 100644 index 000000000..26916a200 --- /dev/null +++ b/src/test/resources/featureflag/projectFeatureFlag.json @@ -0,0 +1,9 @@ +{ + "featureFlag" : { + "key" : "myCoolFeature", + "value" : true, + "links" : { + "self" : "/gdc/projects/PROJECT_ID/projectFeatureFlags/myCoolFeature" + } + } +} \ No newline at end of file diff --git a/src/test/resources/featureflag/projectFeatureFlags.json b/src/test/resources/featureflag/projectFeatureFlags.json new file mode 100644 index 000000000..1e77993a7 --- /dev/null +++ b/src/test/resources/featureflag/projectFeatureFlags.json @@ -0,0 +1,29 @@ +{ + "featureFlags" : { + "items" : [ { + "featureFlag" : { + "key" : "myCoolFeature", + "value" : true, + "links" : { + "self" : "/gdc/projects/PROJECT_ID/projectFeatureFlags/myCoolFeature" + } + } + }, { + "featureFlag" : { + "key" : "mySuperCoolFeature", + "value" : true, + "links" : { + "self" : "/gdc/projects/PROJECT_ID/projectFeatureFlags/mySuperCoolFeature" + } + } + }, { + "featureFlag" : { + "key" : "mySuperSecretFeature", + "value" : false, + "links" : { + "self" : "/gdc/projects/PROJECT_ID/projectFeatureFlags/mySuperSecretFeature" + } + } + }] + } +} \ No newline at end of file From 0debad7063fa4d7f1723a1b4183172ed529c7e55 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Tue, 21 Jul 2015 10:39:46 +0200 Subject: [PATCH 061/934] Move createProjectFeatureFlag to FeatureFlagService Lets move support of feature flags of all scopes to its own service in its own package. Also fix naming conventions and use helper return objects instead of lists. --- .../featureflag/FeatureFlagService.java | 38 ++++++++++++++++ .../com/gooddata/project/ProjectService.java | 2 + .../featureflag/FeatureFlagServiceAT.java | 18 +++++++- .../featureflag/FeatureFlagServiceIT.java | 38 ++++++++++++++++ .../featureflag/FeatureFlagServiceTest.java | 44 ++++++++++++++++++- .../gooddata/project/ProjectServiceAT.java | 7 --- 6 files changed, 136 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index 912c36f33..36bf4bb51 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -9,6 +9,8 @@ import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; +import java.net.URI; + import static com.gooddata.featureflag.FeatureFlags.AGGREGATED_FEATURE_FLAGS_TEMPLATE; import static com.gooddata.featureflag.ProjectFeatureFlags.PROJECT_FEATURE_FLAGS_TEMPLATE; import static com.gooddata.util.Validate.notNull; @@ -75,4 +77,40 @@ public ProjectFeatureFlags listProjectFeatureFlags(final Project project) { } } + /** + * Creates new feature flag for given project. + *

+ * Usually, it doesn't make sense to create feature flag that is disabled because + * this is the same as having no feature flag at all. + * + * @param project project for which the feature flag should be created, cannot be null + * @param flag feature flag to be created, cannot be null + * @return created feature flag + */ + public ProjectFeatureFlag createProjectFeatureFlag(final Project project, final ProjectFeatureFlag flag) { + notNull(project, "project"); + notNull(flag, "flag"); + + final String featureFlagsUri = PROJECT_FEATURE_FLAGS_TEMPLATE.expand(project.getId()).toString(); + + try { + final URI featureFlagUri = restTemplate.postForLocation(featureFlagsUri, flag); + if (featureFlagUri == null) { + throw new GoodDataException("URI of new flag can't be null"); + } + return getProjectFeatureFlag(featureFlagUri.toString()); + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to create feature flag: " + flag, e); + } + } + + + private ProjectFeatureFlag getProjectFeatureFlag(final String flagUri) { + final ProjectFeatureFlag result = restTemplate.getForObject(flagUri, ProjectFeatureFlag.class); + if (result == null) { + throw new GoodDataException("flag cannot be retrieved"); + } + return result; + } + } diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index 3232bdc1c..290df23b4 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -411,7 +411,9 @@ public List listFeatureFlags(Project project) { * @param project project for which the feature flag should be created, cannot be null * @param featureFlag feature flag to be created, cannot be null * @return created feature flag + * @deprecated use {@link FeatureFlagService#createProjectFeatureFlag(Project, com.gooddata.featureflag.ProjectFeatureFlag)} */ + @Deprecated @SuppressWarnings("deprecation") public ProjectFeatureFlag createFeatureFlag(final Project project, final ProjectFeatureFlag featureFlag) { notNull(project, "project"); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java index 17d57f4cc..448b80d53 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -8,6 +8,8 @@ import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.hasItems; /** @@ -18,9 +20,15 @@ public class FeatureFlagServiceAT extends AbstractGoodDataAT { private static final String PROJECT_FEATURE_FLAG = "testFeatureFlag"; @Test(groups = "featureFlag", dependsOnGroups = "project") + public void createProjectFeatureFlag() throws Exception { + final ProjectFeatureFlag featureFlag = gd.getFeatureFlagService() + .createProjectFeatureFlag(project, new ProjectFeatureFlag(PROJECT_FEATURE_FLAG)); + checkProjectFeatureFlag(featureFlag, true); + } + + @Test(groups = "featureFlag", dependsOnMethods = "createProjectFeatureFlag") public void listProjectFeatureFlags() throws Exception { - gd.getProjectService().createFeatureFlag(project, - new com.gooddata.project.ProjectFeatureFlag("mostRecentFeatureFlag")); + gd.getFeatureFlagService().createProjectFeatureFlag(project, new ProjectFeatureFlag("mostRecentFeatureFlag")); final ProjectFeatureFlags flags = gd.getFeatureFlagService().listProjectFeatureFlags(project); @@ -38,4 +46,10 @@ public void listFeatureFlags() throws Exception { new com.gooddata.featureflag.FeatureFlag(PROJECT_FEATURE_FLAG, true))); } + private void checkProjectFeatureFlag(ProjectFeatureFlag featureFlag, boolean expectedValue) { + assertThat(featureFlag, is(notNullValue())); + assertThat(featureFlag.getName(), is(PROJECT_FEATURE_FLAG)); + assertThat(featureFlag.isEnabled(), is(expectedValue)); + } + } diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java index 6ac916900..521dfe9a6 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -8,17 +8,24 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import static com.gooddata.featureflag.ProjectFeatureFlag.PROJECT_FEATURE_FLAG_TEMPLATE; +import static com.gooddata.featureflag.ProjectFeatureFlags.PROJECT_FEATURE_FLAGS_TEMPLATE; import static com.gooddata.util.ResourceUtils.readFromResource; import static com.gooddata.util.ResourceUtils.readStringFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; public class FeatureFlagServiceIT extends AbstractGoodDataIT { private FeatureFlagService service; private Project project; + private static final String PROJECT_ID = "PROJECT_ID"; + private static final String PROJECT_FEATURE_FLAGS_URI_STRING = PROJECT_FEATURE_FLAGS_TEMPLATE.expand(PROJECT_ID).toString(); + @BeforeMethod public void setUp() throws Exception { service = gd.getFeatureFlagService(); @@ -59,4 +66,35 @@ public void listProjectFeatureFlagsShouldReturnProjectFeatureFlags() throws Exce new ProjectFeatureFlag("mySuperSecretFeature", false))); } + @Test + public void createProjectFeatureFlagShouldCreateAndReturnNewProjectFeatureFlag() { + final String featureFlagName = "myCoolFeature"; + final String projectFeatureFlagUriString = getProjectFeatureFlagUriString(featureFlagName); + + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PROJECT_FEATURE_FLAGS_URI_STRING) + .respond() + .withHeader("Location", projectFeatureFlagUriString) + .withStatus(201); + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(projectFeatureFlagUriString) + .respond() + .withBody(readStringFromResource("/featureflag/projectFeatureFlag.json")) + .withStatus(200); + + final ProjectFeatureFlag featureFlag = service.createProjectFeatureFlag(project, + new ProjectFeatureFlag(featureFlagName)); + + assertThat(featureFlag, is(notNullValue())); + assertThat(featureFlag.getName(), is(featureFlagName)); + assertThat(featureFlag.isEnabled(), is(true)); + } + + + private String getProjectFeatureFlagUriString(String featureFlagName) { + return PROJECT_FEATURE_FLAG_TEMPLATE.expand(PROJECT_ID, featureFlagName).toString(); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java index d525fde7f..663f9734f 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -17,17 +17,22 @@ import static java.util.Collections.singleton; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.when; public class FeatureFlagServiceTest { private static final String PROJECT_ID = "11"; + private static final String FLAG_NAME = "flag1"; private static final String FEATURE_FLAGS_URI = "/gdc/internal/projects/11/featureFlags"; private static final String PROJECT_FEATURE_FLAGS_URI = "/gdc/projects/11/projectFeatureFlags"; + private static final String PROJECT_FEATURE_FLAG_URI = "/gdc/projects/11/projectFeatureFlags/" + FLAG_NAME; @Mock private Project project; @Mock + private ProjectFeatureFlag projectFeatureFlag; + @Mock private ProjectFeatureFlags projectFeatureFlags; @Mock private FeatureFlags featureFlags; @@ -63,7 +68,7 @@ public void whenClientErrorResponseThenGetFeatureFlagsShouldThrow() throws Excep @Test public void testGetFeatureFlags() throws Exception { - final FeatureFlag flag1 = new FeatureFlag("flag1", true); + final FeatureFlag flag1 = new FeatureFlag(FLAG_NAME, true); when(restTemplate.getForObject(new URI(FEATURE_FLAGS_URI), FeatureFlags.class)).thenReturn(featureFlags); when(featureFlags.iterator()).thenReturn(singleton(flag1).iterator()); @@ -92,7 +97,7 @@ public void whenClientErrorResponseThenGetProjectFeatureFlagsShouldThrow() throw @Test public void testGetProjectFeatureFlags() throws Exception { - final ProjectFeatureFlag flag1 = new ProjectFeatureFlag("flag1", true); + final ProjectFeatureFlag flag1 = new ProjectFeatureFlag(FLAG_NAME, true); when(restTemplate.getForObject(new URI(PROJECT_FEATURE_FLAGS_URI), ProjectFeatureFlags.class)) .thenReturn(projectFeatureFlags); when(projectFeatureFlags.iterator()).thenReturn(singleton(flag1).iterator()); @@ -102,4 +107,39 @@ public void testGetProjectFeatureFlags() throws Exception { assertThat(flags, contains(flag1)); } + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullKeyThenCreateProjectFeatureFlagShouldThrow() throws Exception { + service.createProjectFeatureFlag(project, null); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullProjectThenCreateProjectFeatureFlagShouldThrow() throws Exception { + service.createProjectFeatureFlag(null, projectFeatureFlag); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenEmptyResponseThenCreateProjectFeatureFlagShouldThrow() throws Exception { + when(restTemplate.postForLocation(PROJECT_FEATURE_FLAG_URI, projectFeatureFlag)).thenReturn(null); + service.createProjectFeatureFlag(project, projectFeatureFlag); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenClientErrorResponseThenCreateProjectFeatureFlagShouldThrow() throws Exception { + when(restTemplate.postForLocation(PROJECT_FEATURE_FLAG_URI, projectFeatureFlag)) + .thenThrow(new RestClientException("")); + service.createProjectFeatureFlag(project, projectFeatureFlag); + } + + @Test + public void testCreateProjectFeatureFlag() throws Exception { + final ProjectFeatureFlag flag = new ProjectFeatureFlag(FLAG_NAME, true); + when(restTemplate.postForLocation(PROJECT_FEATURE_FLAGS_URI, flag)) + .thenReturn(new URI(PROJECT_FEATURE_FLAG_URI)); + when(restTemplate.getForObject(PROJECT_FEATURE_FLAG_URI, ProjectFeatureFlag.class)).thenReturn(flag); + + final ProjectFeatureFlag result = service.createProjectFeatureFlag(project, flag); + + assertThat(result, is(flag)); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index c42e9a59d..15d2dd20f 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -86,13 +86,6 @@ public void validateProject() throws Exception { assertThat(results.getResults(), is(notNullValue())); } - @Test(groups = "project", dependsOnMethods = "createProject") - public void createProjectFeatureFlag() throws Exception { - final ProjectFeatureFlag featureFlag = - gd.getProjectService().createFeatureFlag(project, new ProjectFeatureFlag(PROJECT_FEATURE_FLAG)); - checkFeatureFlag(featureFlag, true); - } - @Test(groups = "project", dependsOnMethods = "createProjectFeatureFlag") public void getProjectFeatureFlag() throws Exception { final ProjectFeatureFlag featureFlag = From 956a70c29e6c1db21930deb2d1be25afd0f2a999 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 24 Sep 2015 18:21:34 +0200 Subject: [PATCH 062/934] Move getProjectFeatureFlag to FeatureFlagService Lets move support of feature flags of all scopes to its own service in its own package. Also fix naming conventions and use helper return objects instead of lists. --- .../featureflag/FeatureFlagService.java | 32 ++++++++++++++++++ .../com/gooddata/project/ProjectService.java | 2 ++ .../featureflag/FeatureFlagServiceAT.java | 7 ++++ .../featureflag/FeatureFlagServiceIT.java | 27 ++++++++++----- .../featureflag/FeatureFlagServiceTest.java | 33 +++++++++++++++++++ .../gooddata/project/ProjectServiceAT.java | 9 +---- 6 files changed, 94 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index 36bf4bb51..fd03298ff 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -12,7 +12,9 @@ import java.net.URI; import static com.gooddata.featureflag.FeatureFlags.AGGREGATED_FEATURE_FLAGS_TEMPLATE; +import static com.gooddata.featureflag.ProjectFeatureFlag.PROJECT_FEATURE_FLAG_TEMPLATE; import static com.gooddata.featureflag.ProjectFeatureFlags.PROJECT_FEATURE_FLAGS_TEMPLATE; +import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; /** @@ -77,6 +79,32 @@ public ProjectFeatureFlags listProjectFeatureFlags(final Project project) { } } + /** + * Returns project feature flag (only project scoped flags, use {@link #listFeatureFlags(Project)} for aggregated + * flags from all scopes) for given project by its unique name (aka "key"). + * It doesn't matter whether feature flag is enabled or not, it'll be included in both cases. + * + * @param project project, cannot be null + * @param featureFlagName unique name (key) of feature flag, cannot be empty + * @return feature flag for given project with given name (key) + */ + public ProjectFeatureFlag getProjectFeatureFlag(final Project project, final String featureFlagName) { + notNull(project, "project"); + notEmpty(featureFlagName, "featureFlagName"); + + try { + final ProjectFeatureFlag flag = getProjectFeatureFlag(getProjectFeatureFlagUri(project, featureFlagName)); + + if (flag == null) { + throw new GoodDataException("empty response from API call"); + } + + return flag; + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to get project feature flag: " + featureFlagName, e); + } + } + /** * Creates new feature flag for given project. *

@@ -105,6 +133,10 @@ public ProjectFeatureFlag createProjectFeatureFlag(final Project project, final } + String getProjectFeatureFlagUri(final Project project, final String flagName) { + return PROJECT_FEATURE_FLAG_TEMPLATE.expand(project.getId(), flagName).toString(); + } + private ProjectFeatureFlag getProjectFeatureFlag(final String flagUri) { final ProjectFeatureFlag result = restTemplate.getForObject(flagUri, ProjectFeatureFlag.class); if (result == null) { diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index 290df23b4..964450dd3 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -436,7 +436,9 @@ public ProjectFeatureFlag createFeatureFlag(final Project project, final Project * @param project project, cannot be null * @param featureFlagName name of feature flag, cannot be empty * @return feature flag + * @deprecated use {@link FeatureFlagService#getProjectFeatureFlag(Project, String)} */ + @Deprecated @SuppressWarnings("deprecation") public ProjectFeatureFlag getFeatureFlag(final Project project, final String featureFlagName) { notNull(project, "project"); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java index 448b80d53..c68827d25 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -46,6 +46,13 @@ public void listFeatureFlags() throws Exception { new com.gooddata.featureflag.FeatureFlag(PROJECT_FEATURE_FLAG, true))); } + @Test(groups = "featureFlag", dependsOnMethods = "createProjectFeatureFlag") + public void getProjectFeatureFlag() throws Exception { + final ProjectFeatureFlag featureFlag = + gd.getFeatureFlagService().getProjectFeatureFlag(project, PROJECT_FEATURE_FLAG); + checkProjectFeatureFlag(featureFlag, true); + } + private void checkProjectFeatureFlag(ProjectFeatureFlag featureFlag, boolean expectedValue) { assertThat(featureFlag, is(notNullValue())); assertThat(featureFlag.getName(), is(PROJECT_FEATURE_FLAG)); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java index 521dfe9a6..9767b688a 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -24,7 +24,11 @@ public class FeatureFlagServiceIT extends AbstractGoodDataIT { private Project project; private static final String PROJECT_ID = "PROJECT_ID"; - private static final String PROJECT_FEATURE_FLAGS_URI_STRING = PROJECT_FEATURE_FLAGS_TEMPLATE.expand(PROJECT_ID).toString(); + private static final String PROJECT_FEATURE_FLAGS_URI_STRING = PROJECT_FEATURE_FLAGS_TEMPLATE.expand(PROJECT_ID) + .toString(); + private static final String FEATURE_FLAG_NAME = "myCoolFeature"; + private static final String PROJECT_FEATURE_FLAG_URI_STRING = PROJECT_FEATURE_FLAG_TEMPLATE + .expand(PROJECT_ID, FEATURE_FLAG_NAME).toString(); @BeforeMethod public void setUp() throws Exception { @@ -48,7 +52,6 @@ public void listFeatureFlagsShouldReturnAggregatedFlagsForProject() throws Excep new FeatureFlag("testFeature2", false))); } - @Test public void listProjectFeatureFlagsShouldReturnProjectFeatureFlags() throws Exception { onRequest() @@ -68,8 +71,7 @@ public void listProjectFeatureFlagsShouldReturnProjectFeatureFlags() throws Exce @Test public void createProjectFeatureFlagShouldCreateAndReturnNewProjectFeatureFlag() { - final String featureFlagName = "myCoolFeature"; - final String projectFeatureFlagUriString = getProjectFeatureFlagUriString(featureFlagName); + final String projectFeatureFlagUriString = service.getProjectFeatureFlagUri(project, FEATURE_FLAG_NAME); onRequest() .havingMethodEqualTo("POST") @@ -85,16 +87,25 @@ public void createProjectFeatureFlagShouldCreateAndReturnNewProjectFeatureFlag() .withStatus(200); final ProjectFeatureFlag featureFlag = service.createProjectFeatureFlag(project, - new ProjectFeatureFlag(featureFlagName)); + new ProjectFeatureFlag(FEATURE_FLAG_NAME)); assertThat(featureFlag, is(notNullValue())); - assertThat(featureFlag.getName(), is(featureFlagName)); + assertThat(featureFlag.getName(), is(FEATURE_FLAG_NAME)); assertThat(featureFlag.isEnabled(), is(true)); } + @Test + public void getProjectFeatureFlagShouldReturnProjectFeatureFlag() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(PROJECT_FEATURE_FLAG_URI_STRING) + .respond() + .withBody(readStringFromResource("/featureflag/projectFeatureFlag.json")) + .withStatus(200); + + final ProjectFeatureFlag flag = service.getProjectFeatureFlag(project, FEATURE_FLAG_NAME); - private String getProjectFeatureFlagUriString(String featureFlagName) { - return PROJECT_FEATURE_FLAG_TEMPLATE.expand(PROJECT_ID, featureFlagName).toString(); + assertThat(flag, is(new ProjectFeatureFlag(FEATURE_FLAG_NAME, true))); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java index 663f9734f..cb3ed22ab 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -142,4 +142,37 @@ public void testCreateProjectFeatureFlag() throws Exception { assertThat(result, is(flag)); } + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullKeyThenGetProjectFeatureFlagShouldThrow() throws Exception { + service.getProjectFeatureFlag(project, null); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullProjectThenGetProjectFeatureFlagShouldThrow() throws Exception { + service.getProjectFeatureFlag(null, FLAG_NAME); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenEmptyResponseThenGetProjectFeatureFlagShouldThrow() throws Exception { + when(restTemplate.getForObject(PROJECT_FEATURE_FLAG_URI, ProjectFeatureFlag.class)).thenReturn(null); + service.getProjectFeatureFlag(project, FLAG_NAME); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenClientErrorResponseThenGetProjectFeatureFlagShouldThrow() throws Exception { + when(restTemplate.getForObject(PROJECT_FEATURE_FLAG_URI, ProjectFeatureFlag.class)) + .thenThrow(new RestClientException("")); + service.getProjectFeatureFlag(project, FLAG_NAME); + } + + @Test + public void testGetProjectFeatureFlag() throws Exception { + final ProjectFeatureFlag flag = new ProjectFeatureFlag(FLAG_NAME, true); + when(restTemplate.getForObject(PROJECT_FEATURE_FLAG_URI, ProjectFeatureFlag.class)).thenReturn(flag); + + final ProjectFeatureFlag result = service.getProjectFeatureFlag(project, FLAG_NAME); + + assertThat(result, is(flag)); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index 15d2dd20f..0d6a7395b 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -86,13 +86,6 @@ public void validateProject() throws Exception { assertThat(results.getResults(), is(notNullValue())); } - @Test(groups = "project", dependsOnMethods = "createProjectFeatureFlag") - public void getProjectFeatureFlag() throws Exception { - final ProjectFeatureFlag featureFlag = - gd.getProjectService().getFeatureFlag(project, PROJECT_FEATURE_FLAG); - checkFeatureFlag(featureFlag, true); - } - @Test(groups = "project", dependsOnMethods = "getProjectFeatureFlag") public void updateProjectFeatureFlag() throws Exception { final ProjectFeatureFlag featureFlag = @@ -117,7 +110,7 @@ public void deleteProjectFeatureFlag() throws Exception { gd.getProjectService().deleteFeatureFlag(featureFlag); try { - gd.getProjectService().getFeatureFlag(project, featureFlag.getName()); + gd.getFeatureFlagService().getProjectFeatureFlag(project, featureFlag.getName()); fail("Feature flag has not been deleted properly. HTTP status NOT FOUND expected."); } catch (GoodDataRestException e) { assertThat(e.getStatusCode(), is(HttpStatus.NOT_FOUND.value())); From aca1ac9d40193ca80cddea8f70fe68689c002e37 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 8 Oct 2015 18:53:13 +0200 Subject: [PATCH 063/934] Move updateProjectFeatureFlag to FeatureFlagService Lets move support of feature flags of all scopes to its own service in its own package. Also fix naming conventions and use helper return objects instead of lists. --- .../featureflag/FeatureFlagService.java | 19 +++++++++++ .../com/gooddata/project/ProjectService.java | 2 ++ .../featureflag/FeatureFlagServiceAT.java | 16 +++++++++ .../featureflag/FeatureFlagServiceIT.java | 25 ++++++++++++++ .../featureflag/FeatureFlagServiceTest.java | 34 +++++++++++++++++++ .../gooddata/project/ProjectServiceAT.java | 22 ------------ 6 files changed, 96 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index fd03298ff..2cb3f542b 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -132,6 +132,25 @@ public ProjectFeatureFlag createProjectFeatureFlag(final Project project, final } } + /** + * Updates existing project's feature flag. + * Note that it doesn't make sense to update any other property than {@link ProjectFeatureFlag#enabled}. + * + * @param flag feature flag to be updated, cannot be null and it has to contain URI + * @return updated feature flag + */ + public ProjectFeatureFlag updateProjectFeatureFlag(final ProjectFeatureFlag flag) { + notNull(flag, "flag"); + notEmpty(flag.getUri(), "flag.uri"); + + try { + restTemplate.put(flag.getUri(), flag); + return getProjectFeatureFlag(flag.getUri()); + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to update feature flag: " + flag, e); + } + } + String getProjectFeatureFlagUri(final Project project, final String flagName) { return PROJECT_FEATURE_FLAG_TEMPLATE.expand(project.getId(), flagName).toString(); diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index 964450dd3..e3d9a6ae8 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -453,7 +453,9 @@ public ProjectFeatureFlag getFeatureFlag(final Project project, final String fea * * @param featureFlag updated feature flag * @return updated feature flag + * @deprecated use {@link FeatureFlagService#updateProjectFeatureFlag(com.gooddata.featureflag.ProjectFeatureFlag)} */ + @Deprecated @SuppressWarnings("deprecation") public ProjectFeatureFlag updateFeatureFlag(final ProjectFeatureFlag featureFlag) { notNull(featureFlag, "featureFlag"); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java index c68827d25..21d93a27d 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -53,6 +53,22 @@ public void getProjectFeatureFlag() throws Exception { checkProjectFeatureFlag(featureFlag, true); } + @Test(groups = "featureFlag", dependsOnMethods = "getProjectFeatureFlag") + public void updateProjectFeatureFlag() throws Exception { + final ProjectFeatureFlag featureFlag = gd.getFeatureFlagService().getProjectFeatureFlag(project, + PROJECT_FEATURE_FLAG); + + // disable (update) feature flag + featureFlag.setEnabled(false); + final ProjectFeatureFlag disabledFlag = gd.getFeatureFlagService().updateProjectFeatureFlag(featureFlag); + checkProjectFeatureFlag(disabledFlag, false); + + // enable again + featureFlag.setEnabled(true); + final ProjectFeatureFlag enabledFlag = gd.getFeatureFlagService().updateProjectFeatureFlag(featureFlag); + checkProjectFeatureFlag(enabledFlag, true); + } + private void checkProjectFeatureFlag(ProjectFeatureFlag featureFlag, boolean expectedValue) { assertThat(featureFlag, is(notNullValue())); assertThat(featureFlag.getName(), is(PROJECT_FEATURE_FLAG)); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java index 9767b688a..a951d3b9a 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -108,4 +108,29 @@ public void getProjectFeatureFlagShouldReturnProjectFeatureFlag() throws Excepti assertThat(flag, is(new ProjectFeatureFlag(FEATURE_FLAG_NAME, true))); } + @Test + public void updateProjectFeatureFlagShouldUpdateAndReturnUpdatedProjectFeatureFlag() throws Exception { + final String projectFeatureFlagUriString = service.getProjectFeatureFlagUri(project, FEATURE_FLAG_NAME); + + onRequest() + .havingMethodEqualTo("PUT") + .havingPathEqualTo(PROJECT_FEATURE_FLAG_URI_STRING) + .respond() + .withStatus(200); + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(projectFeatureFlagUriString) + .respond() + .withBody(readStringFromResource("/featureflag/projectFeatureFlag.json")) + .withStatus(200); + + final ProjectFeatureFlag flag = MAPPER + .readValue(readFromResource("/featureflag/projectFeatureFlag.json"), ProjectFeatureFlag.class); + final ProjectFeatureFlag featureFlag = service.updateProjectFeatureFlag(flag); + + assertThat(featureFlag, is(notNullValue())); + assertThat(featureFlag.getName(), is(FEATURE_FLAG_NAME)); + assertThat(featureFlag.isEnabled(), is(true)); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java index cb3ed22ab..639da3911 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -18,6 +18,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.is; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class FeatureFlagServiceTest { @@ -175,4 +176,37 @@ public void testGetProjectFeatureFlag() throws Exception { assertThat(result, is(flag)); } + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullFlagThenUpdateProjectFeatureFlagShouldThrow() throws Exception { + service.updateProjectFeatureFlag(null); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenEmptyResponseThenUpdateProjectFeatureFlagShouldThrow() throws Exception { + when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); + when(restTemplate.getForObject(PROJECT_FEATURE_FLAG_URI, ProjectFeatureFlag.class)).thenReturn(null); + service.updateProjectFeatureFlag(projectFeatureFlag); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenClientErrorResponseThenUpdateProjectFeatureFlagShouldThrow() throws Exception { + when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); + when(restTemplate.getForObject(PROJECT_FEATURE_FLAG_URI, ProjectFeatureFlag.class)) + .thenThrow(new RestClientException("")); + service.updateProjectFeatureFlag(projectFeatureFlag); + } + + @Test + public void testUpdateProjectFeatureFlag() throws Exception { + final ProjectFeatureFlag newFlag = new ProjectFeatureFlag(FLAG_NAME, true); + when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); + when(restTemplate.getForObject(PROJECT_FEATURE_FLAG_URI, ProjectFeatureFlag.class)) + .thenReturn(newFlag); + + final ProjectFeatureFlag result = service.updateProjectFeatureFlag(projectFeatureFlag); + + verify(restTemplate).put(PROJECT_FEATURE_FLAG_URI, projectFeatureFlag); + assertThat(result, is(newFlag)); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index 0d6a7395b..70c751815 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -86,22 +86,6 @@ public void validateProject() throws Exception { assertThat(results.getResults(), is(notNullValue())); } - @Test(groups = "project", dependsOnMethods = "getProjectFeatureFlag") - public void updateProjectFeatureFlag() throws Exception { - final ProjectFeatureFlag featureFlag = - gd.getProjectService().getFeatureFlag(project, PROJECT_FEATURE_FLAG); - - // disable (update) feature flag - featureFlag.setEnabled(false); - final ProjectFeatureFlag disabledFlag = gd.getProjectService().updateFeatureFlag(featureFlag); - checkFeatureFlag(disabledFlag, false); - - // enable again - featureFlag.setEnabled(true); - final ProjectFeatureFlag enabledFlag = gd.getProjectService().updateFeatureFlag(featureFlag); - checkFeatureFlag(enabledFlag, true); - } - @Test(groups = "project", dependsOnMethods = "createProjectFeatureFlag") public void deleteProjectFeatureFlag() throws Exception { final ProjectFeatureFlag featureFlag = @@ -117,10 +101,4 @@ public void deleteProjectFeatureFlag() throws Exception { } } - private void checkFeatureFlag(ProjectFeatureFlag featureFlag, boolean expectedValue) { - assertThat(featureFlag, is(notNullValue())); - assertThat(featureFlag.getName(), is(PROJECT_FEATURE_FLAG)); - assertThat(featureFlag.getEnabled(), is(expectedValue)); - } - } From 0581642794441ee6a143dbe7a0631634d99c2d89 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 9 Oct 2015 10:07:54 +0200 Subject: [PATCH 064/934] Move deleteProjectFeatureFlag to FeatureFlagService Lets move support of feature flags of all scopes to its own service in its own package. Also fix naming conventions and use helper return objects instead of lists. --- .../featureflag/FeatureFlagService.java | 16 ++++++++++++++ .../com/gooddata/project/ProjectService.java | 2 ++ .../featureflag/FeatureFlagServiceAT.java | 21 +++++++++++++++++++ .../featureflag/FeatureFlagServiceIT.java | 13 ++++++++++++ .../featureflag/FeatureFlagServiceTest.java | 20 ++++++++++++++++++ .../gooddata/project/ProjectServiceAT.java | 20 +----------------- 6 files changed, 73 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index 2cb3f542b..1f72f7fe7 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -151,6 +151,22 @@ public ProjectFeatureFlag updateProjectFeatureFlag(final ProjectFeatureFlag flag } } + /** + * Deletes existing project feature flag. + * + * @param flag existing project feature flag with links set properly, cannot be null + */ + public void deleteFeatureFlag(final ProjectFeatureFlag flag) { + notNull(flag, "flag"); + notEmpty(flag.getUri(), "flag URI"); + + try { + restTemplate.delete(flag.getUri()); + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to delete feature flag=" + flag, e); + } + } + String getProjectFeatureFlagUri(final Project project, final String flagName) { return PROJECT_FEATURE_FLAG_TEMPLATE.expand(project.getId(), flagName).toString(); diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index e3d9a6ae8..e27e86934 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -473,7 +473,9 @@ public ProjectFeatureFlag updateFeatureFlag(final ProjectFeatureFlag featureFlag * Deletes existing project feature flag. * * @param featureFlag existing project feature flag with links set properly, cannot be null + * @deprecated use {@link FeatureFlagService#deleteFeatureFlag(com.gooddata.featureflag.ProjectFeatureFlag)} */ + @Deprecated @SuppressWarnings("deprecation") public void deleteFeatureFlag(ProjectFeatureFlag featureFlag) { notNull(featureFlag, "featureFlag"); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java index 21d93a27d..64e7676df 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -5,12 +5,16 @@ package com.gooddata.featureflag; import com.gooddata.AbstractGoodDataAT; +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; +import org.springframework.http.HttpStatus; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.hasItems; +import static org.testng.AssertJUnit.fail; /** * Feature flag acceptance tests. @@ -69,6 +73,23 @@ public void updateProjectFeatureFlag() throws Exception { checkProjectFeatureFlag(enabledFlag, true); } + @Test(groups = "featureFlag", dependsOnMethods = "createProjectFeatureFlag") + public void deleteProjectFeatureFlag() throws Exception { + final ProjectFeatureFlag featureFlag = + gd.getFeatureFlagService().createProjectFeatureFlag(project, + new ProjectFeatureFlag("temporaryFeatureFlag")); + + gd.getFeatureFlagService().deleteFeatureFlag(featureFlag); + + try { + gd.getFeatureFlagService().getProjectFeatureFlag(project, featureFlag.getName()); + fail("Feature flag has not been deleted properly. HTTP status NOT FOUND expected."); + } catch (GoodDataException e) { + assertThat(((GoodDataRestException)e.getCause()).getStatusCode(), is(HttpStatus.NOT_FOUND.value())); + } + } + + private void checkProjectFeatureFlag(ProjectFeatureFlag featureFlag, boolean expectedValue) { assertThat(featureFlag, is(notNullValue())); assertThat(featureFlag.getName(), is(PROJECT_FEATURE_FLAG)); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java index a951d3b9a..47342e760 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -133,4 +133,17 @@ public void updateProjectFeatureFlagShouldUpdateAndReturnUpdatedProjectFeatureFl assertThat(featureFlag.isEnabled(), is(true)); } + @Test + public void deleteProjectFeatureFlagShouldRemoveIt() throws Exception { + onRequest() + .havingMethodEqualTo("DELETE") + .havingPathEqualTo(PROJECT_FEATURE_FLAG_URI_STRING) + .respond() + .withStatus(200); + + final ProjectFeatureFlag flag = MAPPER + .readValue(readFromResource("/featureflag/projectFeatureFlag.json"), ProjectFeatureFlag.class); + service.deleteFeatureFlag(flag); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java index 639da3911..de3f415ea 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -18,6 +18,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.is; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -209,4 +210,23 @@ public void testUpdateProjectFeatureFlag() throws Exception { assertThat(result, is(newFlag)); } + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullFlagThenDeleteProjectFeatureFlagShouldThrow() throws Exception { + service.deleteFeatureFlag(null); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenClientErrorResponseThenDeleteProjectFeatureFlagShouldThrow() throws Exception { + when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); + doThrow(new RestClientException("")).when(restTemplate).delete(PROJECT_FEATURE_FLAG_URI); + service.deleteFeatureFlag(projectFeatureFlag); + } + + @Test + public void testDeleteProjectFeatureFlag() throws Exception { + when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); + service.deleteFeatureFlag(projectFeatureFlag); + verify(restTemplate).delete(PROJECT_FEATURE_FLAG_URI); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index 70c751815..e446aa420 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -1,9 +1,7 @@ package com.gooddata.project; import com.gooddata.AbstractGoodDataAT; -import com.gooddata.GoodDataRestException; import com.gooddata.collections.PageRequest; -import org.springframework.http.HttpStatus; import org.testng.annotations.Test; import java.util.ArrayList; @@ -19,14 +17,13 @@ import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.core.IsCollectionContaining.hasItem; -import static org.testng.AssertJUnit.fail; /** * Project acceptance tests. */ public class ProjectServiceAT extends AbstractGoodDataAT { - private static final String PROJECT_FEATURE_FLAG = "testFeatureFlag"; + private final String projectToken; public ProjectServiceAT() { projectToken = getProperty("projectToken"); @@ -86,19 +83,4 @@ public void validateProject() throws Exception { assertThat(results.getResults(), is(notNullValue())); } - @Test(groups = "project", dependsOnMethods = "createProjectFeatureFlag") - public void deleteProjectFeatureFlag() throws Exception { - final ProjectFeatureFlag featureFlag = - gd.getProjectService().createFeatureFlag(project, new ProjectFeatureFlag("temporaryFeatureFlag")); - - gd.getProjectService().deleteFeatureFlag(featureFlag); - - try { - gd.getFeatureFlagService().getProjectFeatureFlag(project, featureFlag.getName()); - fail("Feature flag has not been deleted properly. HTTP status NOT FOUND expected."); - } catch (GoodDataRestException e) { - assertThat(e.getStatusCode(), is(HttpStatus.NOT_FOUND.value())); - } - } - } From 908f73c03efdb038a7452ccbb42894ba68dcd7e6 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Sun, 6 Mar 2016 10:21:46 +0100 Subject: [PATCH 065/934] Add list* convention into CONTRIBUTING.md --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dd421bf91..03e7cf3d1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -44,7 +44,8 @@ is specific enough. * `get*()` when searching form single object (throw exception when no or multiple objects are found, never return `null`) * `find*()` when searching for multiple objects (collection of objects, never return `null`) - * `remove*()` (i.e. `remove(Project project)`) instead od `delete*()` + * `list*()` when listing whole or paged collection of objects (return collection or collection wrapped by DTO) + * `remove*()` (i.e. `remove(Project project)`) instead od `delete*()` * Write **integration tests** for services using _[Jadler](https://github.com/jadler-mocking/jadler/wiki)_. * If it is possible write **acceptance tests** to be run with the real backend. * Update [documentation](https://github.com/martiner/gooddata-java/wiki/Code-Examples) with usage examples. From dcf52e7a3ad28a7dad201446c04dbbbca48141eb Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 3 Mar 2016 14:23:30 +0100 Subject: [PATCH 066/934] introduce support for dataLoadingColumn --- .../com/gooddata/md/DataLoadingColumn.java | 174 ++++++++++++++++++ .../gooddata/md/DataLoadingColumnTest.java | 44 +++++ src/test/resources/md/dataLoadingColumn.json | 34 ++++ 3 files changed, 252 insertions(+) create mode 100644 src/main/java/com/gooddata/md/DataLoadingColumn.java create mode 100644 src/test/java/com/gooddata/md/DataLoadingColumnTest.java create mode 100644 src/test/resources/md/dataLoadingColumn.json diff --git a/src/main/java/com/gooddata/md/DataLoadingColumn.java b/src/main/java/com/gooddata/md/DataLoadingColumn.java new file mode 100644 index 000000000..ff901c8b8 --- /dev/null +++ b/src/main/java/com/gooddata/md/DataLoadingColumn.java @@ -0,0 +1,174 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gooddata.gdc.UriResponse; +import com.gooddata.util.BooleanIntegerDeserializer; + +/** + * Represents datasets' loading column. + * Deserialization only. + */ +@JsonTypeName("dataLoadingColumn") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DataLoadingColumn extends AbstractObj implements Queryable { + + private static final String INT = "INT"; + private static final String VARCHAR = "VARCHAR"; + + private final Content content; + + @JsonCreator + private DataLoadingColumn(@JsonProperty("meta") Meta meta, @JsonProperty("content") Content content) { + super(meta); + this.content = content; + } + + public UriResponse getColumnUri() { + return content.getColumnUri(); + } + + public String getName() { + return content.getColumnName(); + } + + public String getType() { + return content.getColumnType(); + } + + /** + * @return true when the type is not null and equal to VARCHAR, false otherwise + */ + public boolean hasTypeVarchar() { + return VARCHAR.equals(getType()); + } + + /** + * @return true when the type is not null and equal to INT, false otherwise + */ + public boolean hasTypeInt() { + return INT.equals(getType()); + } + + public Integer getLength() { + return content.getColumnLength(); + } + + public Integer getPrecision() { + return content.getColumnPrecision(); + } + + public boolean isUnique() { + return content.isColumnUnique(); + } + + public boolean isNullable() { + return content.isColumnNull(); + } + + public String getSynchronizeType() { + return content.getColumnSynchronize() != null ? content.getColumnSynchronize().getType() : null; + } + + public Integer getSynchronizeLength() { + return content.getColumnSynchronize() != null ? content.getColumnSynchronize().getLength() : null; + } + + public Integer getSynchronizePrecision() { + return content.getColumnSynchronize() != null ? content.getColumnSynchronize().getPrecision() : null; + } + + private static class Content { + + private final UriResponse columnUri; + private final String columnName; + private final String columnType; + private final Integer columnLength; + private final Integer columnPrecision; + private final boolean columnUnique; + private final boolean columnNull; + private final ColumnSynchronize columnSynchronize; + + private Content(@JsonProperty("column") UriResponse columnUri, @JsonProperty("columnName") String columnName, @JsonProperty("type") String columnType, + @JsonProperty("length") Integer columnLength, @JsonProperty("precision") Integer columnPrecision, + @JsonProperty("columnUnique") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean columnUnique, + @JsonProperty("columnNull") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean columnNull, + @JsonProperty("columnSynchronize") ColumnSynchronize columnSynchronize) { + this.columnUri = columnUri; + this.columnName = columnName; + this.columnType = columnType; + this.columnLength = columnLength; + this.columnPrecision = columnPrecision; + this.columnUnique = columnUnique; + this.columnNull = columnNull; + this.columnSynchronize = columnSynchronize; + } + + public UriResponse getColumnUri() { + return columnUri; + } + + public String getColumnName() { + return columnName; + } + + public String getColumnType() { + return columnType; + } + + public Integer getColumnLength() { + return columnLength; + } + + public Integer getColumnPrecision() { + return columnPrecision; + } + + public boolean isColumnUnique() { + return columnUnique; + } + + public boolean isColumnNull() { + return columnNull; + } + + public ColumnSynchronize getColumnSynchronize() { + return columnSynchronize; + } + } + + private static class ColumnSynchronize { + private final String type; + private final Integer length; + private final Integer precision; + + @JsonCreator + private ColumnSynchronize(@JsonProperty("columnType") String type, @JsonProperty("columnLength") Integer length, + @JsonProperty("precision") Integer precision) { + this.type = type; + this.length = length; + this.precision = precision; + } + + public String getType() { + return type; + } + + public Integer getLength() { + return length; + } + + public Integer getPrecision() { + return precision; + } + } +} diff --git a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java new file mode 100644 index 000000000..c48bf30f3 --- /dev/null +++ b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class DataLoadingColumnTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/dataLoadingColumn.json"); + final DataLoadingColumn column = new ObjectMapper().readValue(stream, DataLoadingColumn.class); + assertThat(column, is(notNullValue())); + + assertThat(column.getColumnUri(), is(notNullValue())); + assertThat(column.getColumnUri().getUri(), is("/gdc/md/PROJECT_ID/obj/COLUMN_ID")); + + assertThat(column.getType(), is("INT")); + assertThat(column.hasTypeInt(), is(true)); + assertThat(column.hasTypeVarchar(), is(false)); + + assertThat(column.getName(), is("COLUMN_NAME")); + assertThat(column.getLength(), is(128)); + assertThat(column.getPrecision(), is(nullValue())); + assertThat(column.isUnique(), is(false)); + assertThat(column.isNullable(), is(true)); + + assertThat(column.getSynchronizeType(), is("INT")); + assertThat(column.getSynchronizeLength(), is(128)); + assertThat(column.getSynchronizePrecision(), is(0)); + } + + +} \ No newline at end of file diff --git a/src/test/resources/md/dataLoadingColumn.json b/src/test/resources/md/dataLoadingColumn.json new file mode 100644 index 000000000..5da9b05b9 --- /dev/null +++ b/src/test/resources/md/dataLoadingColumn.json @@ -0,0 +1,34 @@ +{ + "dataLoadingColumn" : { + "content" : { + "columnName" : "COLUMN_NAME", + "columnUnique" : 0, + "columnPrecision" : null, + "columnNull" : 1, + "columnType" : "INT", + "columnLength" : 128, + "column" : { + "uri" : "/gdc/md/PROJECT_ID/obj/COLUMN_ID" + }, + "columnSynchronize" : { + "columnType" : "INT", + "columnLength" : 128, + "precision" : 0 + } + }, + "meta" : { + "author" : "/gdc/account/profile/PROFILE_ID", + "uri" : "/gdc/md/PROJECT_ID/obj/DATA_LOADING_COLUMN_ID", + "tags" : "", + "created" : "2016-02-29 13:24:37", + "identifier" : "IDENTIFIER", + "deprecated" : "0", + "summary" : "", + "isProduction" : 1, + "title" : "TITLE", + "category" : "dataLoadingColumn", + "updated" : "2016-03-03 13:14:04", + "contributor" : "/gdc/account/profile/PROFILE_ID" + } + } +} \ No newline at end of file From ed6d66cb464a738a0242358d78281c504f6f1783 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Mon, 7 Mar 2016 13:47:25 +0100 Subject: [PATCH 067/934] align version of gooddata-http-client in README with reality --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d44556eec..165909268 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ See [releases page](https://github.com/martiner/gooddata-java/releases) for info ### Dependencies The *GoodData Java SDK* uses: -* the [GoodData HTTP client](https://github.com/gooddata/gooddata-http-client) version 0.8.2 or later +* the [GoodData HTTP client](https://github.com/gooddata/gooddata-http-client) version 0.9.3 or later * the *Apache HTTP Client* version 4.3 or later (for white-labeled domains at least version 4.3.2 is required) * the *Spring Framework* version 3.x * the *Jackson JSON Processor* version 2.7.0 (*GoodData Java SDK* version 0.x requires version 1.9) From 6c6c8f35e161a090d59b396e063f3f5e4400fdf6 Mon Sep 17 00:00:00 2001 From: Peter Plochan Date: Mon, 7 Mar 2016 22:02:16 +0100 Subject: [PATCH 068/934] Introduce ProjectDashboard md object containing dashboard tab basic info --- .../com/gooddata/md/ProjectDashboard.java | 93 +++++++++++++++ .../com/gooddata/md/ProjectDashboardTest.java | 29 +++++ src/test/resources/md/projectDashboard.json | 110 ++++++++++++++++++ 3 files changed, 232 insertions(+) create mode 100644 src/main/java/com/gooddata/md/ProjectDashboard.java create mode 100644 src/test/java/com/gooddata/md/ProjectDashboardTest.java create mode 100644 src/test/resources/md/projectDashboard.json diff --git a/src/main/java/com/gooddata/md/ProjectDashboard.java b/src/main/java/com/gooddata/md/ProjectDashboard.java new file mode 100644 index 000000000..f9917de9e --- /dev/null +++ b/src/main/java/com/gooddata/md/ProjectDashboard.java @@ -0,0 +1,93 @@ +package com.gooddata.md; + +import static com.gooddata.util.Validate.notNull; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; + +import java.util.Collection; +import java.util.Objects; + +/** + * Project Dashboard of GoodData project.
+ * Deserialization only. This object is not complete representation of real 'projectDashboard' object. + * It contains only dashboard tabs basic definitions (identifier and name). + */ +@JsonTypeName("projectDashboard") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ProjectDashboard extends AbstractObj implements Queryable { + + private final Content content; + + private ProjectDashboard(@JsonProperty("meta") Meta meta, @JsonProperty("content") Content content) { + super(meta); + this.content = notNull(content, "content"); + } + + @JsonIgnore + public Collection getTabs() { + return content.tabs; + } + + /** + * Returns dashboard tab with the given tab name. + * If tab with such name doesn't exist, returns {@code null}. + * + * @param name tab name + * @return + *

    + *
  • dashboard tab with the given name
  • + *
  • {@code null} if tab doesn't exist
  • + *
+ */ + @JsonIgnore + public Tab getTabByName(String name) { + for (Tab tab : getTabs()) { + if (Objects.equals(tab.title, name)) { + return tab; + } + } + return null; + } + + @JsonIgnoreProperties(ignoreUnknown = true) + @JsonInclude(JsonInclude.Include.NON_NULL) + private static class Content { + + private final Collection tabs; + + @JsonCreator + private Content(@JsonProperty("tabs") Collection tabs) { + this.tabs = tabs; + } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class Tab { + + private final String identifier; + private final String title; + + @JsonCreator + private Tab(@JsonProperty("identifier") String identifier, @JsonProperty("title") String title) { + this.identifier = identifier; + this.title = title; + } + + public String getIdentifier() { + return identifier; + } + + public String getTitle() { + return title; + } + } +} diff --git a/src/test/java/com/gooddata/md/ProjectDashboardTest.java b/src/test/java/com/gooddata/md/ProjectDashboardTest.java new file mode 100644 index 000000000..a4612d520 --- /dev/null +++ b/src/test/java/com/gooddata/md/ProjectDashboardTest.java @@ -0,0 +1,29 @@ +package com.gooddata.md; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.testng.annotations.Test; + +public class ProjectDashboardTest { + + @Test + public void testDeserialization() throws Exception { + final ProjectDashboard dashboard = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/projectDashboard.json"), ProjectDashboard.class); + + assertThat(dashboard.getUri(), is("/gdc/md/PROJECT_ID/obj/12345")); + + assertThat(dashboard.getTabs(), notNullValue()); + assertThat(dashboard.getTabs().size(), is(2)); + + final ProjectDashboard.Tab tab1 = dashboard.getTabByName("Tab 1"); + assertThat(tab1, notNullValue()); + assertThat(tab1.getIdentifier(), is("tab1abc")); + + assertThat(dashboard.getTabByName("Undefined"), nullValue()); + } +} \ No newline at end of file diff --git a/src/test/resources/md/projectDashboard.json b/src/test/resources/md/projectDashboard.json new file mode 100644 index 000000000..b401a991e --- /dev/null +++ b/src/test/resources/md/projectDashboard.json @@ -0,0 +1,110 @@ +{ + "projectDashboard": { + "content": { + "tabs": [ + { + "identifier": "tab1abc", + "title": "Tab 1", + "items": [ + { + "iframeItem": { + "positionX": 481, + "sizeY": 400, + "sizeX": 440, + "url": "iFrameUrl", + "positionY": 1813 + } + }, + { + "reportItem": { + "obj": "/gdc/md/PROJECT_ID/obj/375872", + "sizeY": 60, + "sizeX": 250, + "style": { + "displayTitle": 1, + "background": { + "opacity": 0 + } + }, + "visualization": { + "grid": { + "columnWidths": [] + }, + "oneNumber": { + "labels": { + "description": "" + } + } + }, + "positionY": 265, + "filters": [ + "reportFilterItem" + ], + "positionX": 29 + } + }, + { + "textItem": { + "positionX": 817, + "sizeY": 30, + "sizeX": 110, + "text": "Some text", + "style": { + "displayTitle": 1, + "background": { + "opacity": 0 + } + }, + "positionY": 20, + "textSize": "big" + } + }, + { + "filterItem": { + "positionX": 20, + "parentFilters": [], + "sizeY": 40, + "sizeX": 170, + "positionY": 80, + "id": "filterInTab123", + "contentId": "somefiltercontentid" + } + } + ] + }, + { + "identifier": "tab2def", + "title": "Tab 2" + } + ], + "filters": [ + { + "filterItemContent": { + "obj": "/gdc/md/PROJECT_ID/obj/1304", + "multiple": 1, + "type": "list", + "label": null, + "id": "filterId1" + } + } + ], + "rememberFilters": 1 + }, + "meta": { + "locked": 1, + "author": "/gdc/account/profile/USER_ID", + "uri": "/gdc/md/PROJECT_ID/obj/12345", + "tags": "", + "created": "2016-03-07 21:56:33", + "identifier": "dashboard123abc", + "deprecated": "0", + "summary": "", + "sharedWithSomeone": 0, + "isProduction": 1, + "title": "Some Project Dashboard", + "category": "projectDashboard", + "updated": "2016-03-07 21:56:33", + "contributor": "/gdc/account/profile/USER_ID" + } + } +} From 9ab09415b451e5393da3e745aed4e41d96c9961f Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 29 Feb 2016 20:39:59 +0100 Subject: [PATCH 069/934] (de)serialize attribute.sort properly --- .../java/com/gooddata/md/AttributeSort.java | 84 +++++++++++++++++++ .../java/com/gooddata/md/NestedAttribute.java | 36 +++++++- .../com/gooddata/md/AttributeSortTest.java | 43 ++++++++++ .../java/com/gooddata/md/AttributeTest.java | 13 +++ src/test/resources/md/attribute-sortDf.json | 71 ++++++++++++++++ src/test/resources/md/attributeSort.json | 5 ++ 6 files changed, 248 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/gooddata/md/AttributeSort.java create mode 100644 src/test/java/com/gooddata/md/AttributeSortTest.java create mode 100644 src/test/resources/md/attribute-sortDf.json create mode 100644 src/test/resources/md/attributeSort.json diff --git a/src/main/java/com/gooddata/md/AttributeSort.java b/src/main/java/com/gooddata/md/AttributeSort.java new file mode 100644 index 000000000..f21a07714 --- /dev/null +++ b/src/main/java/com/gooddata/md/AttributeSort.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import java.io.IOException; + +/** + * Internal representation of attribute sort field. Which can be either plain text value or structure pointing to display form. + */ +@JsonDeserialize(using = AttributeSort.Deserializer.class) +@JsonSerialize(using = AttributeSort.Serializer.class) +class AttributeSort { + + static String PK = "pk"; + static String BY_USED_DF = "byUsedDF"; + + private final String value; + private final boolean linkType; + + AttributeSort(String value) { + this(value, false); + } + + AttributeSort(String value, boolean linkType) { + this.value = notEmpty(value, "value"); + this.linkType = linkType; + } + + String getValue() { + return value; + } + + boolean isLinkType() { + return linkType; + } + + static class Deserializer extends JsonDeserializer { + + @Override + public AttributeSort deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + final JsonNode root = p.readValueAsTree(); + notNull(root, "jsonNode"); + if (root.isTextual()) { + return new AttributeSort(root.textValue()); + } else if (root.isObject()) { + return new AttributeSort(root.findValue("uri").textValue(), true); + } else { + throw ctxt.mappingException("Only textual or object node expected but %s node found", + root.getNodeType().name()); + } + } + } + + static class Serializer extends JsonSerializer { + @Override + public void serialize(AttributeSort value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + if (value.linkType) { + gen.writeStartObject(); + gen.writeFieldName("df"); + gen.writeStartObject(); + gen.writeStringField("uri", value.getValue()); + gen.writeEndObject(); + gen.writeEndObject(); + } else { + gen.writeString(value.getValue()); + } + } + } +} diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index 539f5ffc4..0ead0366d 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -67,9 +67,37 @@ public String getDirection() { return content.getDirection(); } + /** + * @see {@link #isSortedByLinkedDf()}, {@link #isSortedByUsedDf()} and {@link #isSortedByPk()} + * @return sort setting - pk, byUsedDF or uri linking some display form, null if not set + */ @JsonIgnore public String getSort() { - return content.getSort(); + return content.getSort() != null ? content.getSort().getValue() : null; + } + + /** + * @return true when the sort is set and it is a link to display form, false otherwise + */ + @JsonIgnore + public boolean isSortedByLinkedDf() { + return content.getSort() != null && content.getSort().isLinkType(); + } + + /** + * @return true when the sort is set to byUsedDF (used display form), false otherwise + */ + @JsonIgnore + public boolean isSortedByUsedDf() { + return content.getSort() != null && AttributeSort.BY_USED_DF.equals(content.getSort().getValue()); + } + + /** + * @return true when the sort is set to pk (primary key), false otherwise + */ + @JsonIgnore + public boolean isSortedByPk() { + return content.getSort() != null && AttributeSort.PK.equals(content.getSort().getValue()); } @JsonIgnore @@ -114,7 +142,7 @@ protected static class Content { private final Collection displayForms; private final String dimension; private final String direction; - private final String sort; + private final AttributeSort sort; private final String type; private final Collection rel; private final Collection compositeAttribute; @@ -127,7 +155,7 @@ protected static class Content { @JsonCreator protected Content(@JsonProperty("pk") Collection pk, @JsonProperty("fk") Collection fk, @JsonProperty("displayForms") Collection displayForms, @JsonProperty("dimension") String dimension, - @JsonProperty("direction") String direction, @JsonProperty("sort") String sort, @JsonProperty("type") String type, + @JsonProperty("direction") String direction, @JsonProperty("sort") AttributeSort sort, @JsonProperty("type") String type, @JsonProperty("rel") Collection rel, @JsonProperty("compositeAttribute") Collection compositeAttribute, @JsonProperty("compositeAttributePk") Collection compositeAttributePk, @JsonProperty("drillDownStepAttributeDF") String drillDownStepAttributeDF, @JsonProperty("linkAttributeDF") String linkAttributeDF, @@ -169,7 +197,7 @@ public String getDirection() { return direction; } - public String getSort() { + public AttributeSort getSort() { return sort; } diff --git a/src/test/java/com/gooddata/md/AttributeSortTest.java b/src/test/java/com/gooddata/md/AttributeSortTest.java new file mode 100644 index 000000000..4f2fbfc80 --- /dev/null +++ b/src/test/java/com/gooddata/md/AttributeSortTest.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.JsonMatchers; +import org.testng.annotations.Test; + +public class AttributeSortTest { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + @Test + public void testSerializePlain() throws Exception { + final AttributeSort attributeSort = new AttributeSort("pk"); + assertThat(attributeSort, net.javacrumbs.jsonunit.JsonMatchers.jsonEquals("pk")); + } + + @Test + public void testDeserializePlain() throws Exception { + final AttributeSort attributeSort = MAPPER.readValue("\"pk\"", AttributeSort.class); + assertThat(attributeSort, is(notNullValue())); + assertThat(attributeSort.getValue(), is("pk")); + } + + @Test + public void testSerializeLink() throws Exception { + final AttributeSort attributeSort = new AttributeSort("/gdc/md/PROJECT_ID/obj/1806", true); + assertThat(attributeSort, JsonMatchers.serializesToJson("/md/attributeSort.json")); + } + + @Test + public void testDeserializeLink() throws Exception { + final AttributeSort attributeSort = MAPPER.readValue(getClass().getResourceAsStream("/md/attributeSort.json"), AttributeSort.class); + assertThat(attributeSort, is(notNullValue())); + assertThat(attributeSort.getValue(), is("/gdc/md/PROJECT_ID/obj/1806")); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/AttributeTest.java b/src/test/java/com/gooddata/md/AttributeTest.java index cf0a58859..5af17be3a 100644 --- a/src/test/java/com/gooddata/md/AttributeTest.java +++ b/src/test/java/com/gooddata/md/AttributeTest.java @@ -59,6 +59,9 @@ public void shouldDeserialize() throws Exception { assertThat(attribute.getDirection(), is("asc")); assertThat(attribute.getSort(), is("pk")); + assertThat(attribute.isSortedByPk(), is(true)); + assertThat(attribute.isSortedByUsedDf(), is(false)); + assertThat(attribute.isSortedByLinkedDf(), is(false)); assertThat(attribute.getType(), is("GDC.time.date")); assertThat(attribute.getLinkedDisplayFormLink(), is("/gdc/md/PROJECT_ID/obj/DF_LINK")); assertThat(attribute.getCompositeAttribute(), hasSize(0)); @@ -83,4 +86,14 @@ public void shouldSerializeSameAsDeserializationInput() throws Exception { assertThat(attribute, serializesToJson("/md/attribute-inputOrig.json")); } + @Test + public void shouldDeserializeAttributeWithSort() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/attribute-sortDf.json"); + final Attribute attribute = new ObjectMapper().readValue(stream, Attribute.class); + + assertThat(attribute.getSort(), is("/gdc/md/PROJECT_ID/obj/1806")); + assertThat(attribute.isSortedByLinkedDf(), is(true)); + assertThat(attribute.isSortedByUsedDf(), is(false)); + assertThat(attribute.isSortedByPk(), is(false)); + } } diff --git a/src/test/resources/md/attribute-sortDf.json b/src/test/resources/md/attribute-sortDf.json new file mode 100644 index 000000000..67b7e8af9 --- /dev/null +++ b/src/test/resources/md/attribute-sortDf.json @@ -0,0 +1,71 @@ +{ + "attribute" : { + "content" : { + "pk" : [ + { + "data" : "/gdc/md/PROJECT_ID/obj/PK_ID", + "type" : "col" + } + ], + "direction" : "asc", + "sort": { + "df": { + "uri": "/gdc/md/PROJECT_ID/obj/1806" + } + }, + "type" : "GDC.time.date", + "rel" : [], + "compositeAttribute" : [], + "compositeAttributePk" : [], + "drillDownStepAttributeDF" : "/gdc/md/PROJECT_ID/obj/DF_DRILL_DOWN", + "linkAttributeDF" : "/gdc/md/PROJECT_ID/obj/DF_LINK", + "folders" : [], + "grain" : [], + "displayForms" : [ + { + "content" : { + "formOf" : "/gdc/md/PROJECT_ID/obj/DF_FORM_OF_ID", + "expression" : "[/gdc/md/PROJECT_ID/obj/DF_EXPRESSION_ID]", + "ldmexpression" : "[/gdc/md/PROJECT_ID/obj/DF_LDM_EXPRESSION_ID]" + }, + "links" : { + "elements" : "/gdc/md/PROJECT_ID/obj/DF_ID/elements" + }, + "meta" : { + "author" : "/gdc/account/profile/USER_ID", + "uri" : "/gdc/md/PROJECT_ID/obj/DF_ID", + "tags" : "", + "created" : "2014-04-11 13:45:56", + "identifier" : "attr.person.id.name", + "deprecated" : "0", + "summary" : "", + "title" : "Person Name", + "category" : "attributeDisplayForm", + "updated" : "2014-04-11 13:45:56", + "contributor" : "/gdc/account/profile/USER_ID" + } + } + ], + "fk" : [ + { + "data" : "/gdc/md/PROJECT_ID/obj/FK_ID", + "type" : "col" + } + ], + "dimension": "/gdc/md/PROJECT_ID/obj/DIM_ID" + }, + "meta" : { + "author" : "/gdc/account/profile/USER_ID", + "uri" : "/gdc/md/PROJECT_ID/obj/28", + "tags" : "", + "created" : "2014-04-11 13:45:56", + "identifier" : "attr.person.id", + "deprecated" : "0", + "summary" : "", + "title" : "Person ID", + "category" : "attribute", + "updated" : "2014-04-11 13:45:56", + "contributor" : "/gdc/account/profile/USER_ID" + } + } +} \ No newline at end of file diff --git a/src/test/resources/md/attributeSort.json b/src/test/resources/md/attributeSort.json new file mode 100644 index 000000000..0701bef58 --- /dev/null +++ b/src/test/resources/md/attributeSort.json @@ -0,0 +1,5 @@ +{ + "df" : { + "uri" : "/gdc/md/PROJECT_ID/obj/1806" + } +} \ No newline at end of file From b4d491f18d6f7815509a83b1f6a73aa5f1532265 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 8 Mar 2016 16:18:26 +0100 Subject: [PATCH 070/934] build: add Oracle JDK 8 and JavaDocs to Travis build --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7ddadf158..ad0e8370c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,9 @@ language: java install: true -script: mvn verify coveralls:report -Pcoverage +script: mvn verify javadoc:javadoc coveralls:report -Pcoverage jdk: - openjdk7 + - oraclejdk8 branches: only: - master From a33c1306aab7805a40ed6a155066cf32eea03192 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Tue, 8 Mar 2016 16:50:58 +0100 Subject: [PATCH 071/934] Fix javadocs --- .../java/com/gooddata/featureflag/FeatureFlagService.java | 2 +- src/main/java/com/gooddata/featureflag/FeatureFlags.java | 4 +--- .../java/com/gooddata/featureflag/ProjectFeatureFlags.java | 4 +--- src/main/java/com/gooddata/gdc/FeatureFlags.java | 1 + src/main/java/com/gooddata/md/NestedAttribute.java | 4 +++- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index 1f72f7fe7..29034a6f4 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -107,7 +107,7 @@ public ProjectFeatureFlag getProjectFeatureFlag(final Project project, final Str /** * Creates new feature flag for given project. - *

+ *

* Usually, it doesn't make sense to create feature flag that is disabled because * this is the same as having no feature flag at all. * diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlags.java b/src/main/java/com/gooddata/featureflag/FeatureFlags.java index 3eba66bea..eb25d66a2 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlags.java @@ -35,15 +35,13 @@ protected void addFlag(final String name, final boolean enabled) { /** * @deprecated use {@link #isEnabled(String)} method or {@link Iterable} feature of this class + * @return list of feature flags */ @Deprecated public List getFeatureFlags() { return featureFlags; } - /** - * {@inheritDoc Iterable#iterator} - */ @Override public Iterator iterator() { return featureFlags.iterator(); diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java index 64ebff02d..33861277b 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java @@ -31,9 +31,6 @@ public class ProjectFeatureFlags implements Iterable { } } - /** - *{@inheritDoc Iterable#iterator} - */ @Override public Iterator iterator() { return items.iterator(); @@ -57,6 +54,7 @@ public boolean isEnabled(final String flagName) { /** * @deprecated use {@link #isEnabled(String)} method or {@link Iterable} feature of this class + * @return list of project feature flags */ @Deprecated public List getItems() { diff --git a/src/main/java/com/gooddata/gdc/FeatureFlags.java b/src/main/java/com/gooddata/gdc/FeatureFlags.java index 2cce6c703..b67883b7e 100644 --- a/src/main/java/com/gooddata/gdc/FeatureFlags.java +++ b/src/main/java/com/gooddata/gdc/FeatureFlags.java @@ -38,6 +38,7 @@ protected void addFlag(final String name, final boolean enabled) { /** * @deprecated use {@link com.gooddata.featureflag.FeatureFlags#isEnabled(String)} method or its {@link Iterable} feature + * @return list of feature flags */ @Deprecated public List getFeatureFlags() { diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index 0ead0366d..2bba4f208 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -68,8 +68,10 @@ public String getDirection() { } /** - * @see {@link #isSortedByLinkedDf()}, {@link #isSortedByUsedDf()} and {@link #isSortedByPk()} * @return sort setting - pk, byUsedDF or uri linking some display form, null if not set + * @see #isSortedByLinkedDf() + * @see #isSortedByUsedDf() + * @see #isSortedByPk() */ @JsonIgnore public String getSort() { From db97f2ce9a3b54fd13fefa4c8eed0890996cba70 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Tue, 8 Mar 2016 17:08:26 +0100 Subject: [PATCH 072/934] [maven-release-plugin] prepare release gooddata-java-1.4.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 890c4f6a5..d87d7b0cc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.3.2-SNAPSHOT + 1.4.0 ${project.artifactId} GoodData Java SDK From 82ad64e1d6b58af6cd0ce9b630ce648b1aac44a7 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Tue, 8 Mar 2016 17:08:27 +0100 Subject: [PATCH 073/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d87d7b0cc..a473a1531 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.4.0 + 1.4.1-SNAPSHOT ${project.artifactId} GoodData Java SDK From dda65da62e384ce9c448a350cc45730d9f4dfaf1 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Tue, 8 Mar 2016 17:26:21 +0100 Subject: [PATCH 074/934] Bump version in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 165909268..863a4902c 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.3.1 + 1.4.0 ``` From 0d50042da2f0bf2996367ec4cb3715b8f2d44ca6 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 9 Mar 2016 17:47:09 +0100 Subject: [PATCH 075/934] Remove extra comments from pom --- pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pom.xml b/pom.xml index a473a1531..11601facc 100644 --- a/pom.xml +++ b/pom.xml @@ -148,7 +148,6 @@ - org.sonatype.plugins nexus-staging-maven-plugin 1.6.6 @@ -156,7 +155,6 @@ sonatype-nexus-staging https://oss.sonatype.org/ - true From 736932feed46e56ecfacff8ee510a60eff5dabbb Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 9 Mar 2016 23:30:21 +0100 Subject: [PATCH 076/934] chg: update coveralls version Hopefully it would bring more readable error messages --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 890c4f6a5..f7b0c30d0 100644 --- a/pom.xml +++ b/pom.xml @@ -202,7 +202,7 @@ org.eluder.coveralls coveralls-maven-plugin - 3.0.1 + 4.1.0 org.jacoco From 5ed523093eb0777716b1f3ea22a437e07cbb57d0 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 10 Mar 2016 13:41:10 +0100 Subject: [PATCH 077/934] introduce physical data model md objects --- src/main/java/com/gooddata/md/Column.java | 117 ++++++++++++++++++ src/main/java/com/gooddata/md/Table.java | 92 ++++++++++++++ .../java/com/gooddata/md/TableDataLoad.java | 80 ++++++++++++ src/test/java/com/gooddata/md/ColumnTest.java | 34 +++++ .../com/gooddata/md/TableDataLoadTest.java | 30 +++++ src/test/java/com/gooddata/md/TableTest.java | 32 +++++ src/test/resources/md/column.json | 23 ++++ src/test/resources/md/table.json | 26 ++++ src/test/resources/md/tableDataLoad.json | 22 ++++ 9 files changed, 456 insertions(+) create mode 100644 src/main/java/com/gooddata/md/Column.java create mode 100644 src/main/java/com/gooddata/md/Table.java create mode 100644 src/main/java/com/gooddata/md/TableDataLoad.java create mode 100644 src/test/java/com/gooddata/md/ColumnTest.java create mode 100644 src/test/java/com/gooddata/md/TableDataLoadTest.java create mode 100644 src/test/java/com/gooddata/md/TableTest.java create mode 100644 src/test/resources/md/column.json create mode 100644 src/test/resources/md/table.json create mode 100644 src/test/resources/md/tableDataLoad.json diff --git a/src/main/java/com/gooddata/md/Column.java b/src/main/java/com/gooddata/md/Column.java new file mode 100644 index 000000000..892d28c15 --- /dev/null +++ b/src/main/java/com/gooddata/md/Column.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * Represents physical data model column. Doesn't implement all fields right now. + * Deserialization only. + */ +@JsonTypeName("column") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +public class Column extends AbstractObj implements Queryable { + + public static final String TYPE_PK = "pk"; + public static final String TYPE_INPUT_PK = "inputpk"; + public static final String TYPE_FK = "fk"; + public static final String TYPE_FACT = "fact"; + public static final String TYPE_DISPLAY_FORM = "displayForm"; + + private final Content content; + + private Column(@JsonProperty("meta") Meta meta, @JsonProperty("content")Content content) { + super(meta); + this.content = content; + } + + /** + * @return uri of physical {@link Table} + */ + public String getTableUri() { + return content.getTable(); + } + + /** + * @return type of column, one of pk,inputpk,fk,fact,displayForm or null + */ + public String getType() { + return content.getColumnType(); + } + + /** + * @return name of the column in DB + */ + public String getDBName() { + return content.getColumnDBName(); + } + + /** + * @return true when type is pk, false otherwise + */ + public boolean isPk() { + return TYPE_PK.equals(getType()); + } + + /** + * @return true when type is inputpk, false otherwise + */ + public boolean isInputPk() { + return TYPE_INPUT_PK.equals(getType()); + } + + /** + * @return true when type is fk, false otherwise + */ + public boolean isFk() { + return TYPE_FK.equals(getType()); + } + + /** + * @return true when type is fact, false otherwise + */ + public boolean isFact() { + return TYPE_FACT.equals(getType()); + } + + /** + * @return true when type is pk, false otherwise + */ + public boolean isDisplayForm() { + return TYPE_DISPLAY_FORM.equals(getType()); + } + + + @JsonIgnoreProperties(ignoreUnknown = true) + private static class Content { + private final String table; + private final String columnDBName; + private final String columnType; + + @JsonCreator + private Content(@JsonProperty("table") String table, @JsonProperty("columnDBName") String columnDBName, + @JsonProperty("columnType") String columnType) { + this.table = table; + this.columnDBName = columnDBName; + this.columnType = columnType; + } + + public String getTable() { + return table; + } + + public String getColumnDBName() { + return columnDBName; + } + + public String getColumnType() { + return columnType; + } + } +} diff --git a/src/main/java/com/gooddata/md/Table.java b/src/main/java/com/gooddata/md/Table.java new file mode 100644 index 000000000..c0eb80f86 --- /dev/null +++ b/src/main/java/com/gooddata/md/Table.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; + +import java.util.Collection; + +/** + * Represents physical data model table. + * Deserialization only. + */ +@JsonTypeName("table") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +public class Table extends AbstractObj implements Queryable { + + private final Content content; + + @JsonCreator + private Table(@JsonProperty("meta") Meta meta, @JsonProperty("content") Content content) { + super(meta); + this.content = content; + } + + /** + * @return name of the table in DB + */ + public String getDBName() { + return content.getTableDBName(); + } + + /** + * @return collection of {@link TableDataLoad}'s uris, can return null + */ + public Collection getDataLoads() { + return content.getTableDataLoads(); + } + + /** + * @return table weight, can return null + */ + public Integer getWeight() { + return content.getWeight(); + } + + /** + * @return uri of active {@link TableDataLoad}, can return null + */ + public String getActiveDataLoad() { + return content.getActiveDataLoad(); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + private static class Content { + + private final String tableDBName; + private final String activeDataLoad; + private final Collection tableDataLoads; + private final Integer weight; + + @JsonCreator + private Content(@JsonProperty("tableDBName") String tableDBName, @JsonProperty("activeDataLoad") String activeDataLoad, + @JsonProperty("tableDataLoad") Collection tableDataLoads, @JsonProperty("weight") Integer weight) { + this.tableDBName = tableDBName; + this.activeDataLoad = activeDataLoad; + this.tableDataLoads = tableDataLoads; + this.weight = weight; + } + + public String getTableDBName() { + return tableDBName; + } + + public String getActiveDataLoad() { + return activeDataLoad; + } + + public Collection getTableDataLoads() { + return tableDataLoads; + } + + public Integer getWeight() { + return weight; + } + } +} diff --git a/src/main/java/com/gooddata/md/TableDataLoad.java b/src/main/java/com/gooddata/md/TableDataLoad.java new file mode 100644 index 000000000..d36d13fdf --- /dev/null +++ b/src/main/java/com/gooddata/md/TableDataLoad.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * Represents data load of physical table. + * Deserialization only. + */ +@JsonTypeName("tableDataLoad") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +public class TableDataLoad extends AbstractObj implements Queryable { + + public static final String TYPE_FULL = "full"; + public static final String TYPE_INCREMENTAL = "incremental"; + + private final Content content; + + @JsonCreator + private TableDataLoad(@JsonProperty("meta") Meta meta, @JsonProperty("content") Content content) { + super(meta); + this.content = content; + } + + /** + * @return location of load data source + */ + public String getDataSourceLocation() { + return content.getDataSourceLocation(); + } + + /** + * @return true if the type is full, false otherwise + */ + public boolean isFull() { + return TYPE_FULL.equals(getType()); + } + + /** + * @return true if the type is incremental, false otherwise + */ + public boolean isIncremental() { + return TYPE_INCREMENTAL.equals(getType()); + } + + /** + * @return type of the load, one of full,incremental + */ + public String getType() { + return content.getTypeOfLoad(); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + private static class Content { + + private final String dataSourceLocation; + private final String typeOfLoad; + + @JsonCreator + private Content(@JsonProperty("dataSourceLocation") String dataSourceLocation, @JsonProperty("typeOfLoad") String typeOfLoad) { + this.dataSourceLocation = dataSourceLocation; + this.typeOfLoad = typeOfLoad; + } + + public String getDataSourceLocation() { + return dataSourceLocation; + } + + public String getTypeOfLoad() { + return typeOfLoad; + } + } +} diff --git a/src/test/java/com/gooddata/md/ColumnTest.java b/src/test/java/com/gooddata/md/ColumnTest.java new file mode 100644 index 000000000..a30c234ab --- /dev/null +++ b/src/test/java/com/gooddata/md/ColumnTest.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class ColumnTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/column.json"); + final Column column = new ObjectMapper().readValue(stream, Column.class); + assertThat(column, is(notNullValue())); + + assertThat(column.getTableUri(), is("/gdc/md/PROJECT_ID/obj/9538")); + assertThat(column.getType(), is("pk")); + assertThat(column.getDBName(), is("id")); + assertThat(column.isPk(), is(true)); + assertThat(column.isInputPk(), is(false)); + assertThat(column.isFk(), is(false)); + assertThat(column.isFact(), is(false)); + assertThat(column.isDisplayForm(), is(false)); + } + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/TableDataLoadTest.java b/src/test/java/com/gooddata/md/TableDataLoadTest.java new file mode 100644 index 000000000..9a3045d3d --- /dev/null +++ b/src/test/java/com/gooddata/md/TableDataLoadTest.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class TableDataLoadTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/tableDataLoad.json"); + final TableDataLoad load = new ObjectMapper().readValue(stream, TableDataLoad.class); + assertThat(load, is(notNullValue())); + + assertThat(load.getDataSourceLocation(), is("d_zendesktickets_vehicleview_aaavxfdfgqamowg")); + assertThat(load.getType(), is("incremental")); + assertThat(load.isFull(), is(false)); + assertThat(load.isIncremental(), is(true)); + } + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/TableTest.java b/src/test/java/com/gooddata/md/TableTest.java new file mode 100644 index 000000000..6760a2e16 --- /dev/null +++ b/src/test/java/com/gooddata/md/TableTest.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md; + +import static org.hamcrest.CoreMatchers.hasItems; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class TableTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/table.json"); + final Table table = new ObjectMapper().readValue(stream, Table.class); + assertThat(table, is(notNullValue())); + + assertThat(table.getDBName(), is("d_zendesktickets_vehicleview")); + assertThat(table.getActiveDataLoad(), is("/gdc/md/PROJECT_ID/obj/625412")); + assertThat(table.getDataLoads(), hasItems( + "/gdc/md/PROJECT_ID/obj/625283", + "/gdc/md/PROJECT_ID/obj/625412")); + } + +} \ No newline at end of file diff --git a/src/test/resources/md/column.json b/src/test/resources/md/column.json new file mode 100644 index 000000000..3a1743c79 --- /dev/null +++ b/src/test/resources/md/column.json @@ -0,0 +1,23 @@ +{ + "column" : { + "content" : { + "columnType" : "pk", + "table" : "/gdc/md/PROJECT_ID/obj/9538", + "columnDBName" : "id" + }, + "meta" : { + "author" : "/gdc/account/profile/PROFILE_ID", + "uri" : "/gdc/md/PROJECT_ID/obj/9539", + "tags" : "", + "created" : "2012-08-10 13:06:43", + "identifier" : "col.d_zendesktickets_vehicleview.id", + "deprecated" : "0", + "summary" : "", + "isProduction" : 1, + "title" : "col.d_zendesktickets_vehicleview.id", + "category" : "column", + "updated" : "2012-08-10 13:06:43", + "contributor" : "/gdc/account/profile/PROFILE_ID" + } + } +} \ No newline at end of file diff --git a/src/test/resources/md/table.json b/src/test/resources/md/table.json new file mode 100644 index 000000000..3fa1c9e26 --- /dev/null +++ b/src/test/resources/md/table.json @@ -0,0 +1,26 @@ +{ + "table": { + "content": { + "tableDataLoad": [ + "/gdc/md/PROJECT_ID/obj/625283", + "/gdc/md/PROJECT_ID/obj/625412" + ], + "activeDataLoad": "/gdc/md/PROJECT_ID/obj/625412", + "tableDBName": "d_zendesktickets_vehicleview" + }, + "meta": { + "author": "/gdc/account/profile/PROFILE_ID", + "uri": "/gdc/md/PROJECT_ID/obj/9538", + "tags": "", + "created": "2012-08-10 13:06:43", + "identifier": "tab.d_zendesktickets_vehicleview", + "deprecated": "0", + "summary": "", + "isProduction": 1, + "title": "tab.d_zendesktickets_vehicleview", + "category": "table", + "updated": "2016-03-10 10:02:08", + "contributor": "/gdc/account/profile/PROFILE_ID" + } + } +} \ No newline at end of file diff --git a/src/test/resources/md/tableDataLoad.json b/src/test/resources/md/tableDataLoad.json new file mode 100644 index 000000000..72883cf03 --- /dev/null +++ b/src/test/resources/md/tableDataLoad.json @@ -0,0 +1,22 @@ +{ + "tableDataLoad" : { + "content" : { + "typeOfLoad" : "incremental", + "dataSourceLocation" : "d_zendesktickets_vehicleview_aaavxfdfgqamowg" + }, + "meta" : { + "author" : "/gdc/account/profile/PROFILE_ID", + "uri" : "/gdc/md/PROJECT_ID/obj/625283", + "tags" : "", + "created" : "2016-03-10 06:53:21", + "identifier" : "atk7vrmubLP1", + "deprecated" : "0", + "summary" : "d_zendesktickets_vehicleview_aaavxfdfgqamowg", + "isProduction" : 1, + "title" : "d_zendesktickets_vehicleview_aaavxfdfgqamowg", + "category" : "tableDataLoad", + "updated" : "2016-03-10 08:06:38", + "contributor" : "/gdc/account/profile/PROFILE_ID" + } + } +} \ No newline at end of file From c9c04ca160990f4185904272096d4f9e03996b91 Mon Sep 17 00:00:00 2001 From: Peter Plochan Date: Fri, 12 Feb 2016 13:00:46 +0100 Subject: [PATCH 078/934] Add support to async etl/pull2 resource --- .../com/gooddata/dataset/BatchFailStatus.java | 54 ----------- .../com/gooddata/dataset/DatasetService.java | 87 +++-------------- .../java/com/gooddata/dataset/FailPart.java | 48 ---------- .../java/com/gooddata/dataset/FailStatus.java | 74 -------------- src/main/java/com/gooddata/dataset/Pull.java | 8 +- .../java/com/gooddata/dataset/PullTask.java | 38 ++++++-- .../com/gooddata/dataset/PullTaskStatus.java | 38 -------- .../java/com/gooddata/dataset/TaskState.java | 4 +- .../gooddata/dataset/BatchFailStatusTest.java | 43 --------- .../gooddata/dataset/DatasetServiceAT.java | 4 +- .../gooddata/dataset/DatasetServiceIT.java | 96 ++----------------- .../com/gooddata/dataset/FailStatusTest.java | 47 --------- .../gooddata/dataset/PullTaskStatusTest.java | 20 ---- .../com/gooddata/dataset/PullTaskTest.java | 2 +- .../resources/dataset/batchFailStatus1.json | 33 ------- .../resources/dataset/batchFailStatus2.json | 9 -- src/test/resources/dataset/failStatus.json | 10 -- .../resources/dataset/failStatusComplex.json | 69 ------------- src/test/resources/dataset/pullTask.json | 6 +- .../resources/dataset/pullTaskStatus.json | 3 - .../dataset/pullTaskStatusError.json | 18 +++- .../resources/dataset/pullTaskStatusOk.json | 7 +- .../dataset/pullTaskStatusRunning.json | 6 ++ 23 files changed, 92 insertions(+), 632 deletions(-) delete mode 100644 src/main/java/com/gooddata/dataset/BatchFailStatus.java delete mode 100644 src/main/java/com/gooddata/dataset/FailPart.java delete mode 100644 src/main/java/com/gooddata/dataset/FailStatus.java delete mode 100644 src/main/java/com/gooddata/dataset/PullTaskStatus.java delete mode 100644 src/test/java/com/gooddata/dataset/BatchFailStatusTest.java delete mode 100644 src/test/java/com/gooddata/dataset/FailStatusTest.java delete mode 100644 src/test/java/com/gooddata/dataset/PullTaskStatusTest.java delete mode 100755 src/test/resources/dataset/batchFailStatus1.json delete mode 100644 src/test/resources/dataset/batchFailStatus2.json delete mode 100644 src/test/resources/dataset/failStatus.json delete mode 100644 src/test/resources/dataset/failStatusComplex.json delete mode 100644 src/test/resources/dataset/pullTaskStatus.json create mode 100644 src/test/resources/dataset/pullTaskStatusRunning.json diff --git a/src/main/java/com/gooddata/dataset/BatchFailStatus.java b/src/main/java/com/gooddata/dataset/BatchFailStatus.java deleted file mode 100644 index 924c9cad6..000000000 --- a/src/main/java/com/gooddata/dataset/BatchFailStatus.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. - */ -package com.gooddata.dataset; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.gooddata.util.GDDateTimeDeserializer; -import com.gooddata.util.GDDateTimeSerializer; - -import org.joda.time.DateTime; - -import java.util.List; - -/** - * Batch fail status of dataset load. - */ -@JsonIgnoreProperties(ignoreUnknown = true) -public class BatchFailStatus { - - private final List failStatuses; - private final List messages; - private final String status; - private final DateTime date; - - @JsonCreator - private BatchFailStatus(@JsonProperty("uploads") List failStatuses, @JsonProperty("messages") List messages, - @JsonProperty("status") String status, @JsonProperty("date") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime date) { - this.failStatuses = failStatuses; - this.messages = messages; - this.status = status; - this.date = date; - } - - public List getFailStatuses() { - return failStatuses; - } - - public List getMessages() { - return messages; - } - - public String getStatus() { - return status; - } - - @JsonSerialize(using = GDDateTimeSerializer.class) - public DateTime getDate() { - return date; - } -} diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 9332208b4..4424625e8 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -9,7 +9,6 @@ import com.gooddata.PollResult; import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; -import com.gooddata.SimplePollHandler; import com.gooddata.gdc.DataStoreException; import com.gooddata.gdc.DataStoreService; import com.gooddata.gdc.TaskStatus; @@ -44,7 +43,7 @@ public class DatasetService extends AbstractService { private static final String MANIFEST_FILE_NAME = "upload_info.json"; - private static final String STATUS_FILE_NAME = "upload_status.json"; + private static final String ETL_PULL_DEFAULT_ERROR_MESSAGE = "ETL Pull failed with status %s"; private final DataStoreService dataStoreService; @@ -102,7 +101,7 @@ public FutureResult loadDataset(final Project project, final DatasetManife final ByteArrayInputStream inputStream = new ByteArrayInputStream(manifestJson.getBytes(UTF_8)); dataStoreService.upload(dirPath.resolve(MANIFEST_FILE_NAME).toString(), inputStream); - return pullLoad(project, dirPath, manifest.getDataSet(), false); + return pullLoad(project, dirPath, manifest.getDataSet()); } catch (IOException e) { throw new DatasetException("Unable to serialize manifest", manifest.getDataSet(), e); } catch (DataStoreException | GoodDataRestException | RestClientException e) { @@ -157,7 +156,7 @@ public FutureResult loadDatasets(final Project project, final Collection datasets) } } - private FutureResult pullLoad(Project project, final Path dirPath, final String dataset, boolean isBatchUpload) { - return pullLoad(project, dirPath, singletonList(dataset), isBatchUpload); + private FutureResult pullLoad(Project project, final Path dirPath, final String dataset) { + return pullLoad(project, dirPath, singletonList(dataset)); } - private FutureResult pullLoad(Project project, final Path dirPath, final Collection datasets, final boolean isBatchUpload) { + private FutureResult pullLoad(Project project, final Path dirPath, final Collection datasets) { final PullTask pullTask = restTemplate .postForObject(Pull.URI, new Pull(dirPath.toString()), PullTask.class, project.getId()); - return new PollResult<>(this, new SimplePollHandler(pullTask.getUri(), Void.class) { + + return new PollResult<>(this, new AbstractPollHandler(pullTask.getPollUri(), TaskStatus.class, Void.class) { @Override - public boolean isFinished(ClientHttpResponse response) throws IOException { - final PullTaskStatus status = extractData(response, PullTaskStatus.class); - final boolean finished = status.isFinished(); - if (finished && !status.isSuccess()) { - final String message = getErrorMessage(status, dirPath, isBatchUpload); + public void handlePollResult(TaskStatus pollResult) { + if (!pollResult.isSuccess()) { + final String message = isEmpty(pollResult.getMessages()) + ? String.format(ETL_PULL_DEFAULT_ERROR_MESSAGE, pollResult.getStatus()) + : pollResult.getMessages().toString(); throw new DatasetException(message, datasets); } - return finished; + setResult(null); } @Override @@ -213,65 +213,6 @@ protected void onFinish() { } } }); - - } - - private String getErrorMessage(final PullTaskStatus status, final Path dirPath, boolean isBatchUpload) { - String message = "status: " + status.getStatus(); - try { - Path statusFile = dirPath.resolve(STATUS_FILE_NAME); - if (isBatchUpload) { - final BatchFailStatus batchFailStatus = download(statusFile, BatchFailStatus.class); - message = getBatchFailStatusErrorMsg(dirPath, message, batchFailStatus); - } else { - final FailStatus failStatus = download(statusFile, FailStatus.class); - message = getFailStatusErrorMsg(dirPath, message, failStatus); - } - } catch (IOException | DataStoreException ignored) { - // todo log? - } - return message; - } - - private String getBatchFailStatusErrorMsg(final Path dirPath, final String defaultMessage, final BatchFailStatus batchFailStatus) { - if (batchFailStatus == null || batchFailStatus.getFailStatuses() == null) { - return defaultMessage; - } - final List messages = new ArrayList<>(); - for (FailStatus failStatus : batchFailStatus.getFailStatuses()) { - messages.add(getFailStatusErrorMsg(dirPath, defaultMessage, failStatus)); - } - return messages.isEmpty() ? defaultMessage : messages.toString(); - } - - private String getFailStatusErrorMsg(final Path dirPath, final String defaultMessage, final FailStatus failStatus) { - if (failStatus == null) { - return defaultMessage; - } - final List errorParts = failStatus.getErrorParts(); - if (errorParts.isEmpty()){ - return (failStatus.getError() != null) ? failStatus.getError().getFormattedMessage() : defaultMessage; - } - final List errors = new ArrayList<>(); - for (FailPart part : errorParts) { - if (part.getLogName() != null) { - try { - final String[] msg = download(dirPath.resolve(part.getLogName()), String[].class); - errors.addAll(asList(msg)); - } catch (IOException | DataStoreException e) { - if (part.getError() != null) { - errors.add(part.getError().getFormattedMessage()); - } - } - } - } - return errors.toString(); - } - - private T download(final Path path, final Class type) throws IOException { - try (final InputStream input = dataStoreService.download(path.toString())) { - return mapper.readValue(input, type); - } } /** diff --git a/src/main/java/com/gooddata/dataset/FailPart.java b/src/main/java/com/gooddata/dataset/FailPart.java deleted file mode 100644 index b5fb688b5..000000000 --- a/src/main/java/com/gooddata/dataset/FailPart.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.gooddata.dataset; - -import com.gooddata.gdc.ErrorStructure; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * Describe status of uploaded parts - */ -public class FailPart { - - private final String logName; - private final String fileName; - private final String status; - private final String tableName; - private final ErrorStructure error; - - @JsonCreator - private FailPart(@JsonProperty("logName") String logName, @JsonProperty("fileName") String fileName, - @JsonProperty("status") String status, @JsonProperty("tableName") String tableName, - @JsonProperty("error") ErrorStructure error) { - this.logName = logName; - this.fileName = fileName; - this.status = status; - this.tableName = tableName; - this.error = error; - } - - public String getLogName() { - return logName; - } - - public String getFileName() { - return fileName; - } - - public String getStatus() { - return status; - } - - public String getTableName() { - return tableName; - } - - public ErrorStructure getError() { - return error; - } -} diff --git a/src/main/java/com/gooddata/dataset/FailStatus.java b/src/main/java/com/gooddata/dataset/FailStatus.java deleted file mode 100644 index 9f503f768..000000000 --- a/src/main/java/com/gooddata/dataset/FailStatus.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.gooddata.dataset; - -import com.gooddata.gdc.ErrorStructure; -import com.gooddata.util.GDDateTimeDeserializer; -import com.gooddata.util.GDDateTimeSerializer; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.joda.time.DateTime; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Fail status of dataset load. - * Deserialization only. - */ -@JsonIgnoreProperties(ignoreUnknown = true) -public class FailStatus { - - private final String status; - private final DateTime date; - private final ErrorStructure error; - private final List parts; - - @JsonCreator - private FailStatus(@JsonProperty("status") String status, - @JsonProperty("date") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime date, - @JsonProperty("error") ErrorStructure error, @JsonProperty("parts") List parts) { - this.status = status; - this.date = date; - this.error = error; - this.parts = parts; - } - - public String getStatus() { - return status; - } - - @JsonSerialize(using = GDDateTimeSerializer.class) - public DateTime getDate() { - return date; - } - - public ErrorStructure getError() { - return error; - } - - /** - * - * @return or null - */ - public List getParts() { - return parts; - } - - @JsonIgnore - public List getErrorParts() { - if (parts == null) { - return Collections.emptyList(); - } - final List result = new ArrayList<>(parts.size()); - for (FailPart part: parts) { - if ("ERROR".equals(part.getStatus())) { - result.add(part); - } - } - return result; - } -} diff --git a/src/main/java/com/gooddata/dataset/Pull.java b/src/main/java/com/gooddata/dataset/Pull.java index 64c3a14f1..bb3629e9f 100644 --- a/src/main/java/com/gooddata/dataset/Pull.java +++ b/src/main/java/com/gooddata/dataset/Pull.java @@ -5,15 +5,17 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import org.springframework.web.util.UriTemplate; /** - * ETL Pull DTO (for internal use). + * ETL Pull input DTO (for internal use). * Serialization only. */ @JsonInclude(JsonInclude.Include.NON_NULL) -public class Pull { +class Pull { - public static final String URI = "/gdc/md/{projectId}/etl/pull"; + public static final String URI = "/gdc/md/{projectId}/etl/pull2"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); @JsonProperty("pullIntegration") private final String remoteDir; diff --git a/src/main/java/com/gooddata/dataset/PullTask.java b/src/main/java/com/gooddata/dataset/PullTask.java index f11bb11c3..b69787f8f 100644 --- a/src/main/java/com/gooddata/dataset/PullTask.java +++ b/src/main/java/com/gooddata/dataset/PullTask.java @@ -3,31 +3,51 @@ */ package com.gooddata.dataset; +import static com.gooddata.util.Validate.notEmpty; +import static org.apache.commons.lang.Validate.notNull; + import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import org.springframework.web.util.UriTemplate; /** - * ETL Pull task (for internal use). + * Asynchronous ETL Pull 2 task (for internal use). * Deserialization only. */ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonTypeName("pullTask") +@JsonTypeName("pull2Task") @JsonIgnoreProperties(ignoreUnknown = true) -public class PullTask { +class PullTask { - public static final String URI = "/gdc/md/{projectId}/etl/task/{taskId}"; + public static final String URI = "/gdc/md/{projectId}/tasks/task/{taskId}"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); - private final String uri; + private final Links links; @JsonCreator - private PullTask(@JsonProperty("uri") String uri) { - this.uri = uri; + private PullTask(@JsonProperty("links") Links links) { + notNull(links, "links cannot be null!"); + + this.links = links; + } + + public String getPollUri() { + return links.uri; } - public String getUri() { - return uri; + @JsonIgnoreProperties(ignoreUnknown = true) + private static class Links { + + private final String uri; + + @JsonCreator + private Links(@JsonProperty("poll") String uri) { + notEmpty(uri, "uri"); + + this.uri = uri; + } } } diff --git a/src/main/java/com/gooddata/dataset/PullTaskStatus.java b/src/main/java/com/gooddata/dataset/PullTaskStatus.java deleted file mode 100644 index bafcd69b4..000000000 --- a/src/main/java/com/gooddata/dataset/PullTaskStatus.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. - */ -package com.gooddata.dataset; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * ETL Pull task status (for internal use). - * Deserialization only. - */ -@JsonIgnoreProperties(ignoreUnknown = true) -public class PullTaskStatus { - - private static final String OK = "OK"; - private static final String ERROR = "ERROR"; - private static final String WARNING = "WARNING"; - private final String status; - - @JsonCreator - private PullTaskStatus(@JsonProperty("taskStatus") String status) { - this.status = status; - } - - public String getStatus() { - return status; - } - - public boolean isSuccess() { - return OK.equals(status); - } - - public boolean isFinished() { - return OK.equals(status) || ERROR.equals(status) || WARNING.equals(status); - } -} diff --git a/src/main/java/com/gooddata/dataset/TaskState.java b/src/main/java/com/gooddata/dataset/TaskState.java index 8b3c21f40..02b734850 100644 --- a/src/main/java/com/gooddata/dataset/TaskState.java +++ b/src/main/java/com/gooddata/dataset/TaskState.java @@ -12,14 +12,14 @@ import com.fasterxml.jackson.annotation.JsonTypeName; /** - * ETL Pull task status (for internal use). + * Update Project Data task status (for internal use). * Deserialization only. */ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonTypeName("taskState") @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class TaskState { +class TaskState { private static final String OK = "OK"; private static final String ERROR = "ERROR"; diff --git a/src/test/java/com/gooddata/dataset/BatchFailStatusTest.java b/src/test/java/com/gooddata/dataset/BatchFailStatusTest.java deleted file mode 100644 index 705397fa0..000000000 --- a/src/test/java/com/gooddata/dataset/BatchFailStatusTest.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. - */ -package com.gooddata.dataset; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.hamcrest.Matchers; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.testng.annotations.Test; - -import java.io.IOException; -import java.io.InputStream; - -public class BatchFailStatusTest { - @Test - public void testParser() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/batchFailStatus1.json"); - final BatchFailStatus value = new ObjectMapper().readValue(stream, BatchFailStatus.class); - assertThat(value, is(notNullValue())); - assertThat(value.getStatus(),is("ERROR")); - assertThat(value.getMessages(),is(Matchers.empty())); - assertThat(value.getDate(),is(new DateTime(2016,2,1,10,12,9, DateTimeZone.UTC))); - assertThat(value.getFailStatuses(),hasSize(2)); - } - - @Test - public void testParser2() throws IOException { - final InputStream stream = getClass().getResourceAsStream("/dataset/batchFailStatus2.json"); - final BatchFailStatus value = new ObjectMapper().readValue(stream, BatchFailStatus.class); - assertThat(value,is(notNullValue())); - assertThat(value.getStatus(),is("ERROR")); - assertThat(value.getMessages(),containsInAnyOrder("test1","test2")); - assertThat(value.getDate(),is(new DateTime(2016,1,1,10,11,15, DateTimeZone.UTC))); - assertThat(value.getFailStatuses(),is(Matchers.empty())); - } -} \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java index 42dde60c4..c875dbb43 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java @@ -48,7 +48,7 @@ public void loadDatasetFail(){ datasetService.loadDataset(project, manifest, getClass().getResourceAsStream("/corruptedPerson.csv")).get(); fail(); } catch (DatasetException ex){ - assertThat(ex.getMessage(),is(equalTo("Load datasets [dataset.person] failed: Number of columns doesn't corespond on line 3 in dataset.person.csv"))); + assertThat(ex.getMessage(),is(equalTo("Load datasets [dataset.person] failed: [Number of columns doesn't corespond on line 3 in dataset.person.csv]"))); } } @@ -65,7 +65,7 @@ public void loadDatasetBatchFail() throws Exception { datasetService.loadDatasets(project, personManifest, cityManifest).get(); fail(); } catch (DatasetException ex){ - assertThat(ex.getMessage(),is(equalTo("Load datasets [dataset.person, dataset.city] failed: [Number of columns doesn't corespond on line 3 in dataset.person.csv, Number of columns doesn't corespond on line 3 in dataset.person.csv]"))); + assertThat(ex.getMessage(),is(equalTo("Load datasets [dataset.person, dataset.city] failed: [Number of columns doesn't corespond on line 3 in dataset.person.csv]"))); } } } diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index 1e43fac44..1b6b9d7af 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -16,7 +16,6 @@ import static com.gooddata.util.ResourceUtils.readFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -54,7 +53,7 @@ public void setUp() throws Exception { .respond() .withStatus(200); onRequest() - .havingPathEqualTo("/gdc/md/PROJECT_ID/etl/pull") + .havingPathEqualTo("/gdc/md/PROJECT_ID/etl/pull2") .havingMethodEqualTo("POST") .respond() .withStatus(201) @@ -64,10 +63,10 @@ public void setUp() throws Exception { @Test public void shouldLoadDataset() throws Exception { onRequest() - .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") + .havingPathEqualTo("/gdc/md/PROJECT/tasks/task/ID/status") .respond() .withStatus(202) - .withBody(readFromResource("/dataset/pullTask.json")) + .withBody(readFromResource("/dataset/pullTaskStatusRunning.json")) .thenRespond() .withStatus(200) .withBody(readFromResource("/dataset/pullTaskStatusOk.json")); @@ -79,10 +78,10 @@ public void shouldLoadDataset() throws Exception { @Test public void shouldLoadDatasets() throws Exception { onRequest() - .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") + .havingPathEqualTo("/gdc/md/PROJECT/tasks/task/ID/status") .respond() .withStatus(202) - .withBody(readFromResource("/dataset/pullTask.json")) + .withBody(readFromResource("/dataset/pullTaskStatusRunning.json")) .thenRespond() .withStatus(200) .withBody(readFromResource("/dataset/pullTaskStatusOk.json")); @@ -98,7 +97,7 @@ public void shouldLoadDatasets() throws Exception { @Test(expectedExceptions = DatasetException.class, expectedExceptionsMessageRegExp = ".*dataset.person.*Unable to load.*") public void shouldFailPolling() throws Exception { onRequest() - .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") + .havingPathEqualTo("/gdc/md/PROJECT/tasks/task/ID/status") .respond() .withStatus(400); @@ -109,7 +108,7 @@ public void shouldFailPolling() throws Exception { @Test public void shouldFailLoading() throws Exception { onRequest() - .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") + .havingPathEqualTo("/gdc/md/PROJECT/tasks/task/ID/status") .respond() .withStatus(200) .withBody(readFromResource("/dataset/pullTaskStatusError.json")); @@ -118,36 +117,7 @@ public void shouldFailLoading() throws Exception { gd.getDatasetService().loadDataset(project, manifest, new ByteArrayInputStream(new byte[]{})).get(); fail("Exception should be thrown"); } catch (DatasetException e) { - assertThat(e.getMessage(), is("Load datasets [dataset.person] failed: status: ERROR")); - } - } - - @Test - public void shouldReadErrorMessages() throws Exception { - onRequest() - .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") - .respond() - .withStatus(200) - .withBody(readFromResource("/dataset/pullTaskStatusError.json")); - onRequest() - .havingPath(containsString("upload_status.json")) - .havingMethodEqualTo("GET") - .respond() - .withStatus(200) - .withBody(readFromResource("/dataset/failStatusComplex.json")); - onRequest() - .havingPath(containsString("d_adstpch_querynum.csv.log")) - .havingMethodEqualTo("GET") - .respond() - .withStatus(200) - .withBody(MAPPER.writeValueAsString(new String[]{"Very error indeed"})); - - final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); - try { - gd.getDatasetService().loadDataset(project, manifest, new ByteArrayInputStream(new byte[]{})).get(); - fail("Exception should be thrown"); - } catch (DatasetException e) { - assertThat(e.getMessage(), is("Load datasets [dataset.person] failed: [Very error indeed, 1 errors occured during csv import]")); + assertThat(e.getMessage(), is("Load datasets [dataset.person] failed: [status: ERROR. Missing field [attr.person.age]]")); } } @@ -280,54 +250,4 @@ public void shouldFailUpdateProjectData() throws IOException { gd.getDatasetService().updateProjectData(project, DML_MAQL).get(); } - - @Test - public void shouldReadBatchErrorMessages() throws Exception { - onRequest() - .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") - .respond() - .withStatus(200) - .withBody(readFromResource("/dataset/pullTaskStatusError.json")); - onRequest() - .havingPath(containsString("upload_status.json")) - .havingMethodEqualTo("GET") - .respond() - .withStatus(200) - .withBody(readFromResource("/dataset/batchFailStatus1.json")); - - final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); - final InputStream source = new ByteArrayInputStream(new byte[]{}); - manifest.setSource(source); - try { - gd.getDatasetService().loadDatasets(project, manifest).get(); - fail("Exception should be thrown"); - } catch (DatasetException e) { - assertThat(e.getMessage(), is("Load datasets [dataset.person] failed: [Manifest consist of columns that are not in single CSV file dataset.stats.csv: f_competitors.nm_name., Manifest consist of columns that are not in single CSV file dataset.stats.csv: f_competitors.nm_name.]")); - } - } - - @Test - public void shouldReadBatchErrorMessagesNoFailStatuses() throws Exception { - onRequest() - .havingPathEqualTo("/gdc/md/PROJECT/etl/task/ID") - .respond() - .withStatus(200) - .withBody(readFromResource("/dataset/pullTaskStatusError.json")); - onRequest() - .havingPath(containsString("upload_status.json")) - .havingMethodEqualTo("GET") - .respond() - .withStatus(200) - .withBody(readFromResource("/dataset/batchFailStatus2.json")); - - final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); - final InputStream source = new ByteArrayInputStream(new byte[]{}); - manifest.setSource(source); - try { - gd.getDatasetService().loadDatasets(project, manifest).get(); - fail("Exception should be thrown"); - } catch (DatasetException e) { - assertThat(e.getMessage(), is("Load datasets [dataset.person] failed: status: ERROR")); - } - } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/FailStatusTest.java b/src/test/java/com/gooddata/dataset/FailStatusTest.java deleted file mode 100644 index f9ce811a4..000000000 --- a/src/test/java/com/gooddata/dataset/FailStatusTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.gooddata.dataset; - -import com.gooddata.gdc.ErrorStructure; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.testng.annotations.Test; - -import java.io.InputStream; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasSize; - -public class FailStatusTest { - - @Test - public void testDeserialize() throws Exception { - - final InputStream stream = getClass().getResourceAsStream("/dataset/failStatus.json"); - final FailStatus value = new ObjectMapper().readValue(stream, FailStatus.class); - - assertThat(value, is(notNullValue())); - assertThat(value.getStatus(), is("ERROR")); - assertThat(value.getDate(), is(new DateTime(2014, 4, 21, 0, 11, 34, DateTimeZone.UTC))); - - final ErrorStructure error = value.getError(); - assertThat(error, is(notNullValue())); - } - - @Test - public void testDeserializeComplex() throws Exception { - - final InputStream stream = getClass().getResourceAsStream("/dataset/failStatusComplex.json"); - final FailStatus value = new ObjectMapper().readValue(stream, FailStatus.class); - - assertThat(value, is(notNullValue())); - assertThat(value.getStatus(), is("ERROR")); - assertThat(value.getDate(), is(new DateTime(2014, 11, 11, 22, 25, 11, DateTimeZone.UTC))); - - final ErrorStructure error = value.getError(); - assertThat(error, is(notNullValue())); - - assertThat(value.getErrorParts(), hasSize(2)); - } -} diff --git a/src/test/java/com/gooddata/dataset/PullTaskStatusTest.java b/src/test/java/com/gooddata/dataset/PullTaskStatusTest.java deleted file mode 100644 index 5ebc3aafd..000000000 --- a/src/test/java/com/gooddata/dataset/PullTaskStatusTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.gooddata.dataset; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -public class PullTaskStatusTest { - - @Test - public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/pullTaskStatus.json"); - final PullTaskStatus taskStatus = new ObjectMapper().readValue(stream, PullTaskStatus.class); - - assertThat(taskStatus.getStatus(), is("WARNING")); - } -} diff --git a/src/test/java/com/gooddata/dataset/PullTaskTest.java b/src/test/java/com/gooddata/dataset/PullTaskTest.java index d4c3761e1..2c9058fc1 100644 --- a/src/test/java/com/gooddata/dataset/PullTaskTest.java +++ b/src/test/java/com/gooddata/dataset/PullTaskTest.java @@ -15,6 +15,6 @@ public void testDeserialization() throws Exception { final InputStream stream = getClass().getResourceAsStream("/dataset/pullTask.json"); final PullTask task = new ObjectMapper().readValue(stream, PullTask.class); - assertThat(task.getUri(), is("/gdc/md/PROJECT/etl/task/ID")); + assertThat(task.getPollUri(), is("/gdc/md/PROJECT/tasks/task/ID/status")); } } diff --git a/src/test/resources/dataset/batchFailStatus1.json b/src/test/resources/dataset/batchFailStatus1.json deleted file mode 100755 index cb135ab94..000000000 --- a/src/test/resources/dataset/batchFailStatus1.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "uploads" : [ - { - "date" : "2016-02-01 10:12:09", - "status" : "ERROR", - "error" : { - "parameters" : [ - "dataset.stats.csv", - "f_competitors.nm_name" - ], - "component" : "GDC::SliToDli", - "errorClass" : "GDC::Exception::User", - "message" : "Manifest consist of columns that are not in single CSV file %s: %s." - } - }, - { - "date" : "2016-02-01 10:12:09", - "status" : "ERROR", - "error" : { - "parameters" : [ - "dataset.stats.csv", - "f_competitors.nm_name" - ], - "component" : "GDC::SliToDli", - "errorClass" : "GDC::Exception::User", - "message" : "Manifest consist of columns that are not in single CSV file %s: %s." - } - } - ], - "messages" : [], - "status" : "ERROR", - "date" : "2016-02-01 10:12:09" -} \ No newline at end of file diff --git a/src/test/resources/dataset/batchFailStatus2.json b/src/test/resources/dataset/batchFailStatus2.json deleted file mode 100644 index e789a3157..000000000 --- a/src/test/resources/dataset/batchFailStatus2.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "uploads": [], - "messages": [ - "test1", - "test2" - ], - "status": "ERROR", - "date": "2016-01-01 10:11:15" -} \ No newline at end of file diff --git a/src/test/resources/dataset/failStatus.json b/src/test/resources/dataset/failStatus.json deleted file mode 100644 index 9b59d7b30..000000000 --- a/src/test/resources/dataset/failStatus.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "status" : "ERROR", - "date" : "2014-04-21 00:11:34", - "error" : { - "parameters" : [], - "component" : "GDC::SliToDli", - "errorClass" : "GDC::Exception::User", - "message" : "Manifest consist of columns that aren't in a single CSV file: f_person.nm_name" - } -} diff --git a/src/test/resources/dataset/failStatusComplex.json b/src/test/resources/dataset/failStatusComplex.json deleted file mode 100644 index 38d6a67f3..000000000 --- a/src/test/resources/dataset/failStatusComplex.json +++ /dev/null @@ -1,69 +0,0 @@ - -{ - "status" : "ERROR", - "date" : "2014-11-11 22:25:11", - "parts" : [ - { - "fileName" : "f_adstpch.csv", - "status" : "OK", - "tableName" : "f_adstpch_aajqnzc4m1apxf8" - }, - { - "fileName" : "d_adstpch_name.csv", - "status" : "OK", - "tableName" : "d_adstpch_name_aajrnzc4m1apxf8" - }, - { - "logName" : "d_adstpch_querynum.csv.log", - "fileName" : "d_adstpch_querynum.csv", - "status" : "ERROR", - "error" : { - "parameters" : [ - 1 - ], - "component" : "GDC::DB2::ETL", - "errorClass" : "GDC::Exception::User", - "message" : "%s errors occured during csv import" - }, - "tableName" : "d_adstpch_querynum_aajsnzc4m1apxf8" - }, - { - "fileName" : "d_adstpch_jdbcuri.csv", - "status" : "OK", - "tableName" : "d_adstpch_jdbcuri_aajtnzc4m1apxf8" - }, - { - "fileName" : "d_adstpch_parallel.csv", - "status" : "OK", - "tableName" : "d_adstpch_parallel_aajunzc4m1apxf8" - }, - { - "logName" : "d_adstpch_repeat.csv.log", - "fileName" : "d_adstpch_repeat.csv", - "status" : "ERROR", - "error" : { - "parameters" : [ - 1 - ], - "component" : "GDC::DB2::ETL", - "errorClass" : "GDC::Exception::User", - "message" : "%s errors occured during csv import" - }, - "tableName" : "d_adstpch_repeat_aajvnzc4m1apxf8" - }, - { - "fileName" : "d_adstpch_size.csv", - "status" : "OK", - "tableName" : "d_adstpch_size_aajwnzc4m1apxf8" - } - ], - "error" : { - "parameters" : [ - 2, - 7 - ], - "component" : "GDC::DB2::ETL", - "errorClass" : "GDC::Exception::User", - "message" : "%d of %d parts failed" - } -} diff --git a/src/test/resources/dataset/pullTask.json b/src/test/resources/dataset/pullTask.json index da0f26196..08ee53a81 100644 --- a/src/test/resources/dataset/pullTask.json +++ b/src/test/resources/dataset/pullTask.json @@ -1,5 +1,7 @@ { - "pullTask" : { - "uri" : "/gdc/md/PROJECT/etl/task/ID" + "pull2Task" : { + "links" : { + "poll": "/gdc/md/PROJECT/tasks/task/ID/status" + } } } diff --git a/src/test/resources/dataset/pullTaskStatus.json b/src/test/resources/dataset/pullTaskStatus.json deleted file mode 100644 index 49ff8265b..000000000 --- a/src/test/resources/dataset/pullTaskStatus.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "taskStatus" : "WARNING" -} diff --git a/src/test/resources/dataset/pullTaskStatusError.json b/src/test/resources/dataset/pullTaskStatusError.json index 24f0679bd..964f7d9cd 100644 --- a/src/test/resources/dataset/pullTaskStatusError.json +++ b/src/test/resources/dataset/pullTaskStatusError.json @@ -1,3 +1,17 @@ { - "taskStatus" : "ERROR" -} + "wTaskStatus": { + "messages": [ + { + "error": { + "parameters": ["ERROR", "[attr.person.age]"], + "requestId": "REQUEST_ID", + "component": "GDC::ETL::PULL2", + "errorClass": "GDC::Exception::EtlFailed", + "message": "status: %s. Missing field %s" + } + } + ], + "poll": "/gdc/md/PROJECT_ID/tasks/task/ID/status", + "status": "ERROR" + } +} \ No newline at end of file diff --git a/src/test/resources/dataset/pullTaskStatusOk.json b/src/test/resources/dataset/pullTaskStatusOk.json index 2333f8b6b..24e561efd 100644 --- a/src/test/resources/dataset/pullTaskStatusOk.json +++ b/src/test/resources/dataset/pullTaskStatusOk.json @@ -1,3 +1,6 @@ { - "taskStatus" : "OK" -} + "wTaskStatus": { + "poll": "/gdc/md/PROJECT_ID/task/tasks/ID/status", + "status": "OK" + } +} \ No newline at end of file diff --git a/src/test/resources/dataset/pullTaskStatusRunning.json b/src/test/resources/dataset/pullTaskStatusRunning.json new file mode 100644 index 000000000..cfebe7487 --- /dev/null +++ b/src/test/resources/dataset/pullTaskStatusRunning.json @@ -0,0 +1,6 @@ +{ + "wTaskStatus": { + "poll": "/gdc/md/PROJECT_ID/task/tasks/ID/status", + "status": "RUNNING" + } +} \ No newline at end of file From 2f42358e5096b3bc7883de2b3c1e83c883c9c523 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 14 Mar 2016 08:56:49 +0100 Subject: [PATCH 079/934] deserialize metric with folder close: #289 --- src/main/java/com/gooddata/md/Fact.java | 4 + src/main/java/com/gooddata/md/Metric.java | 19 +++- .../java/com/gooddata/md/NestedAttribute.java | 4 + src/test/java/com/gooddata/md/MetricTest.java | 8 ++ src/test/resources/md/metric-folder.json | 95 +++++++++++++++++++ 5 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/md/metric-folder.json diff --git a/src/main/java/com/gooddata/md/Fact.java b/src/main/java/com/gooddata/md/Fact.java index 886195312..f9c7f2757 100644 --- a/src/main/java/com/gooddata/md/Fact.java +++ b/src/main/java/com/gooddata/md/Fact.java @@ -42,6 +42,10 @@ public Collection getExpressions() { return content.getExpression(); } + /** + * URIs of folders containing this object + * @return collection of URIs or null + */ @JsonIgnore public Collection getFolders() { return content.getFolders(); diff --git a/src/main/java/com/gooddata/md/Metric.java b/src/main/java/com/gooddata/md/Metric.java index c7cb40a98..e0a25522d 100644 --- a/src/main/java/com/gooddata/md/Metric.java +++ b/src/main/java/com/gooddata/md/Metric.java @@ -10,6 +10,8 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.Collection; + /** * Metric */ @@ -46,6 +48,15 @@ public MaqlAst getMaqlAst() { return content.getMaqlAst(); } + /** + * URIs of folders containing this object + * @return collection of URIs or null + */ + @JsonIgnore + public Collection getFolders() { + return content.getFolders(); + } + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { @@ -57,15 +68,18 @@ private static class Content { @JsonProperty("tree") private MaqlAst maqlAst; + private final Collection folders; @JsonCreator - public Content(@JsonProperty("expression") String expression) { + public Content(@JsonProperty("expression") String expression, @JsonProperty("folders") Collection folders) { this.expression = expression; + this.folders = folders; } public Content(final String expression, final String format) { this.expression = expression; this.format = format; + this.folders = null; } public String getExpression() { @@ -88,5 +102,8 @@ public MaqlAst getMaqlAst() { return maqlAst; } + public Collection getFolders() { + return folders; + } } } diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index 2bba4f208..d8835db97 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -127,6 +127,10 @@ public String getLinkedDisplayFormLink() { return content.getLinkedDisplayFormLink(); } + /** + * URIs of folders containing this object + * @return collection of URIs or null + */ @JsonIgnore public Collection getFolders() { return content.getFolders(); diff --git a/src/test/java/com/gooddata/md/MetricTest.java b/src/test/java/com/gooddata/md/MetricTest.java index 84d4b24c5..ba63fd291 100644 --- a/src/test/java/com/gooddata/md/MetricTest.java +++ b/src/test/java/com/gooddata/md/MetricTest.java @@ -10,6 +10,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; public class MetricTest { @@ -26,6 +27,13 @@ public void testDeserialization() throws Exception { assertThat(metric.getMaqlAst().getContent().length, is(1)); } + @Test + public void shouldDeserializeFolder() throws Exception { + final Metric metric = new ObjectMapper() + .readValue(getClass().getResourceAsStream("/md/metric-folder.json"), Metric.class); + assertThat(metric.getFolders(), contains("/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/51430")); + } + @Test public void testSerialization() throws Exception { final Metric metric = new Metric("Person Name", "SELECT SUM([/gdc/md/PROJECT_ID/obj/EXPR_ID])", "FORMAT"); diff --git a/src/test/resources/md/metric-folder.json b/src/test/resources/md/metric-folder.json new file mode 100644 index 000000000..dd6548c8e --- /dev/null +++ b/src/test/resources/md/metric-folder.json @@ -0,0 +1,95 @@ +{ + "metric": { + "content": { + "folders": [ + "/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/51430" + ], + "format": "$#,##0.00", + "tree": { + "content": [ + { + "content": [ + { + "value": "SUM", + "content": [ + { + "value": "/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/1144", + "position": { + "column": 12, + "line": 2 + }, + "type": "fact object" + } + ], + "position": { + "column": 8, + "line": 2 + }, + "type": "function" + } + ], + "position": { + "column": 8, + "line": 2 + }, + "type": "expression" + }, + { + "content": [ + { + "content": [ + { + "value": "/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/1147", + "position": { + "column": 71, + "line": 2 + }, + "type": "fact object" + }, + { + "value": "/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/1275", + "position": { + "column": 123, + "line": 2 + }, + "type": "metric object" + } + ], + "position": { + "column": 122, + "line": 2 + }, + "type": "=" + } + ], + "position": { + "column": 65, + "line": 2 + }, + "type": "where" + } + ], + "position": { + "column": 1, + "line": 2 + }, + "type": "metric" + }, + "expression": "SELECT SUM([/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/1144]) where [/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/1147]=[/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/1275]" + }, + "meta": { + "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff", + "uri": "/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/1279", + "tags": "", + "created": "2016-03-14 04:35:30", + "identifier": "ah1EuQxwaCqs", + "deprecated": "0", + "summary": "A sum of all deals, regardless of stage or status.", + "isProduction": 1, + "title": "Amount", + "category": "metric", + "updated": "2016-03-14 04:35:30", + "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff" + } + } +} From c7bb047913b1068219032df298564933b44fff34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Tos=CC=8Covsky=CC=81?= Date: Fri, 11 Mar 2016 16:23:47 +0100 Subject: [PATCH 080/934] Metric.MaqlAst.content is serialized as 'absent' instead of null Fix the problem when Metric is created and later updated by MetadataService. In case that Metric is created the Metric.MaqlAst.content might be null in some cases which leads to failed call (400 MD server response) during update. --- src/main/java/com/gooddata/md/MaqlAst.java | 3 ++- src/test/java/com/gooddata/JsonMatchers.java | 23 ++++++++++--------- src/test/java/com/gooddata/md/MetricTest.java | 17 +++++++++++--- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/gooddata/md/MaqlAst.java b/src/main/java/com/gooddata/md/MaqlAst.java index 745beed1a..49462cc55 100644 --- a/src/main/java/com/gooddata/md/MaqlAst.java +++ b/src/main/java/com/gooddata/md/MaqlAst.java @@ -4,12 +4,13 @@ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; /** * MAQL AST representation */ +@JsonInclude(JsonInclude.Include.NON_NULL) public class MaqlAst { private final String type; diff --git a/src/test/java/com/gooddata/JsonMatchers.java b/src/test/java/com/gooddata/JsonMatchers.java index 0206e1060..a45fee411 100644 --- a/src/test/java/com/gooddata/JsonMatchers.java +++ b/src/test/java/com/gooddata/JsonMatchers.java @@ -1,21 +1,22 @@ package com.gooddata; -import net.javacrumbs.jsonunit.core.Configuration; -import net.javacrumbs.jsonunit.core.internal.Diff; -import com.fasterxml.jackson.databind.ObjectMapper; +import static java.lang.String.format; +import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER; +import static net.javacrumbs.jsonunit.core.internal.Diff.create; + +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; + import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Factory; import org.hamcrest.Matcher; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Paths; +import com.fasterxml.jackson.databind.ObjectMapper; -import static java.lang.String.format; -import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER; -import static net.javacrumbs.jsonunit.core.Option.TREATING_NULL_AS_ABSENT; -import static net.javacrumbs.jsonunit.core.internal.Diff.create; +import net.javacrumbs.jsonunit.core.Configuration; +import net.javacrumbs.jsonunit.core.internal.Diff; /** * Contains Hamcrest matchers to be used with Hamcrest assertThat and other tools. @@ -81,7 +82,7 @@ public boolean matches(final Object actual) { } this.expectedJsonString = expectedJsonString; - final Diff diff = create(expectedJsonString, actual, "fullJson", "", Configuration.empty().withOptions(TREATING_NULL_AS_ABSENT, IGNORING_ARRAY_ORDER)); + final Diff diff = create(expectedJsonString, actual, "fullJson", "", Configuration.empty().withOptions(IGNORING_ARRAY_ORDER)); if (!diff.similar()) { differences = diff.differences(); } diff --git a/src/test/java/com/gooddata/md/MetricTest.java b/src/test/java/com/gooddata/md/MetricTest.java index 84d4b24c5..b49f9bda9 100644 --- a/src/test/java/com/gooddata/md/MetricTest.java +++ b/src/test/java/com/gooddata/md/MetricTest.java @@ -3,14 +3,17 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - import static com.gooddata.JsonMatchers.serializesToJson; +import static net.javacrumbs.jsonunit.JsonMatchers.jsonNodeAbsent; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; +import org.testng.annotations.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; + public class MetricTest { @Test @@ -24,6 +27,12 @@ public void testDeserialization() throws Exception { assertThat(metric.getMaqlAst().getPosition().getColumn(), is(1)); assertThat(metric.getMaqlAst().getType(), is("metric")); assertThat(metric.getMaqlAst().getContent().length, is(1)); + assertThat(metric.getMaqlAst().getContent()[0].getContent().length, is(1)); + assertThat(metric.getMaqlAst().getContent()[0].getContent()[0].getValue(), is("AVG")); + assertThat(metric.getMaqlAst().getContent()[0].getContent()[0].getContent().length, is(1)); + assertThat(metric.getMaqlAst().getContent()[0].getContent()[0].getContent()[0].getValue(), + is("/gdc/md/PROJECT_ID/obj/EXPR_ID")); + assertThat(metric.getMaqlAst().getContent()[0].getContent()[0].getContent()[0].getContent(), nullValue()); } @Test @@ -36,6 +45,8 @@ public void testSerialization() throws Exception { public void fullJsonShouldStayTheSameAfterDeserializationAndSerializationBack() throws Exception { final Metric metric = new ObjectMapper() .readValue(getClass().getResourceAsStream("/md/metric-out.json"), Metric.class); + + assertThat(metric, jsonNodeAbsent("metric.content.tree.content[0].content[0].content[0].content")); assertThat(metric, serializesToJson("/md/metric-out.json")); } } \ No newline at end of file From a4baac294292aeae6d08cd29aec01fbe338d1afe Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 14 Mar 2016 10:51:24 +0100 Subject: [PATCH 081/934] Remove projectToken from ProjectServiceAT --- src/test/java/com/gooddata/project/ProjectServiceAT.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index e446aa420..a881186c7 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -23,8 +23,6 @@ */ public class ProjectServiceAT extends AbstractGoodDataAT { - private final String projectToken; - public ProjectServiceAT() { projectToken = getProperty("projectToken"); } From f62990b6c3283fe124130cf785414952fc95d227 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 14 Mar 2016 14:06:57 +0100 Subject: [PATCH 082/934] Modify FeatureFlagServiceAT To cope with eventual consistency of API --- .../featureflag/FeatureFlagServiceAT.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java index 64e7676df..4330ca014 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -11,9 +11,7 @@ import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.hasItems; +import static org.hamcrest.Matchers.*; import static org.testng.AssertJUnit.fail; /** @@ -22,22 +20,25 @@ public class FeatureFlagServiceAT extends AbstractGoodDataAT { private static final String PROJECT_FEATURE_FLAG = "testFeatureFlag"; + private static final String SECOND_FEATURE_FLAG = "mostRecentFeatureFlag"; @Test(groups = "featureFlag", dependsOnGroups = "project") public void createProjectFeatureFlag() throws Exception { final ProjectFeatureFlag featureFlag = gd.getFeatureFlagService() .createProjectFeatureFlag(project, new ProjectFeatureFlag(PROJECT_FEATURE_FLAG)); - checkProjectFeatureFlag(featureFlag, true); + final ProjectFeatureFlag secondFeatureFlag = gd.getFeatureFlagService() + .createProjectFeatureFlag(project, new ProjectFeatureFlag(SECOND_FEATURE_FLAG, false)); + + checkProjectFeatureFlag(featureFlag, PROJECT_FEATURE_FLAG, true); + checkProjectFeatureFlag(secondFeatureFlag, SECOND_FEATURE_FLAG, false); } @Test(groups = "featureFlag", dependsOnMethods = "createProjectFeatureFlag") public void listProjectFeatureFlags() throws Exception { - gd.getFeatureFlagService().createProjectFeatureFlag(project, new ProjectFeatureFlag("mostRecentFeatureFlag")); - final ProjectFeatureFlags flags = gd.getFeatureFlagService().listProjectFeatureFlags(project); assertThat(flags, hasItems( - new ProjectFeatureFlag("mostRecentFeatureFlag", true), + new ProjectFeatureFlag(SECOND_FEATURE_FLAG, false), new ProjectFeatureFlag(PROJECT_FEATURE_FLAG, true))); } @@ -46,15 +47,15 @@ public void listFeatureFlags() throws Exception { final FeatureFlags flags = gd.getFeatureFlagService().listFeatureFlags(project); assertThat(flags, hasItems( - new com.gooddata.featureflag.FeatureFlag("mostRecentFeatureFlag", true), - new com.gooddata.featureflag.FeatureFlag(PROJECT_FEATURE_FLAG, true))); + new FeatureFlag(SECOND_FEATURE_FLAG, false), + new FeatureFlag(PROJECT_FEATURE_FLAG, true))); } @Test(groups = "featureFlag", dependsOnMethods = "createProjectFeatureFlag") public void getProjectFeatureFlag() throws Exception { final ProjectFeatureFlag featureFlag = gd.getFeatureFlagService().getProjectFeatureFlag(project, PROJECT_FEATURE_FLAG); - checkProjectFeatureFlag(featureFlag, true); + checkProjectFeatureFlag(featureFlag, PROJECT_FEATURE_FLAG, true); } @Test(groups = "featureFlag", dependsOnMethods = "getProjectFeatureFlag") @@ -65,12 +66,14 @@ public void updateProjectFeatureFlag() throws Exception { // disable (update) feature flag featureFlag.setEnabled(false); final ProjectFeatureFlag disabledFlag = gd.getFeatureFlagService().updateProjectFeatureFlag(featureFlag); - checkProjectFeatureFlag(disabledFlag, false); + // can not check value because of eventual consistency of this API + // checkProjectFeatureFlag(disabledFlag, false); // enable again featureFlag.setEnabled(true); final ProjectFeatureFlag enabledFlag = gd.getFeatureFlagService().updateProjectFeatureFlag(featureFlag); - checkProjectFeatureFlag(enabledFlag, true); + // can not check value because of eventual consistency of this API + // checkProjectFeatureFlag(enabledFlag, true); } @Test(groups = "featureFlag", dependsOnMethods = "createProjectFeatureFlag") @@ -90,9 +93,10 @@ public void deleteProjectFeatureFlag() throws Exception { } - private void checkProjectFeatureFlag(ProjectFeatureFlag featureFlag, boolean expectedValue) { + private void checkProjectFeatureFlag(final ProjectFeatureFlag featureFlag, final String expectedName, + final boolean expectedValue) { assertThat(featureFlag, is(notNullValue())); - assertThat(featureFlag.getName(), is(PROJECT_FEATURE_FLAG)); + assertThat(featureFlag.getName(), is(expectedName)); assertThat(featureFlag.isEnabled(), is(expectedValue)); } From 25ff90e793ce497236337d3692c798cf517a6803 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 14 Mar 2016 14:26:22 +0100 Subject: [PATCH 083/934] [maven-release-plugin] prepare release gooddata-java-1.5.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 18cf05512..f6ff0b155 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.4.1-SNAPSHOT + 1.5.0 ${project.artifactId} GoodData Java SDK From 3b6dc7b838bb1b4a4aaf5b595bfd30b893c77e33 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 14 Mar 2016 14:26:22 +0100 Subject: [PATCH 084/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f6ff0b155..5271c7041 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.5.0 + 1.5.1-SNAPSHOT ${project.artifactId} GoodData Java SDK From 69110a0f6ed627ca004a390206f5468d944ab403 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 14 Mar 2016 14:40:02 +0100 Subject: [PATCH 085/934] Bump version in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 863a4902c..777a2fcda 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.4.0 + 1.5.0 ``` From 5fc138a7eebe30a6ac56476104f7793879d49705 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 14 Mar 2016 16:12:08 +0100 Subject: [PATCH 086/934] Use createAndGet when creating metadata object This saves one REST API call and closes: #112 --- src/main/java/com/gooddata/md/MetadataService.java | 6 +++--- src/main/java/com/gooddata/md/Obj.java | 1 + .../java/com/gooddata/md/MetadataServiceIT.java | 14 ++------------ .../java/com/gooddata/md/MetadataServiceTest.java | 8 ++++---- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index 165564c64..47fcd38b4 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -52,9 +52,9 @@ public T createObj(Project project, T obj) { notNull(project, "project"); notNull(obj, "obj"); - final UriResponse response; + final T response; try { - response = restTemplate.postForObject(Obj.URI, obj, UriResponse.class, project.getId()); + response = restTemplate.postForObject(Obj.CREATE_URI, obj, (Class)obj.getClass(), project.getId()); } catch (GoodDataRestException | RestClientException e) { throw new ObjCreateException(obj, e); } @@ -62,7 +62,7 @@ public T createObj(Project project, T obj) { if (response == null) { throw new ObjCreateException("empty response from API call", obj); } - return getObjByUri(response.getUri(), (Class) obj.getClass()); + return response; } /** diff --git a/src/main/java/com/gooddata/md/Obj.java b/src/main/java/com/gooddata/md/Obj.java index ac9f098d4..814dbcd4d 100644 --- a/src/main/java/com/gooddata/md/Obj.java +++ b/src/main/java/com/gooddata/md/Obj.java @@ -8,6 +8,7 @@ public interface Obj { String URI = "/gdc/md/{projectId}/obj"; + String CREATE_URI = URI + "?createAndGet=true"; String OBJ_URI = URI + "/{objId}"; UriTemplate OBJ_TEMPLATE = new UriTemplate(OBJ_URI); diff --git a/src/test/java/com/gooddata/md/MetadataServiceIT.java b/src/test/java/com/gooddata/md/MetadataServiceIT.java index 56ac2aa5d..6b788a774 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceIT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceIT.java @@ -149,12 +149,7 @@ public void shouldCreateObj() throws Exception { onRequest() .havingMethodEqualTo("POST") .havingPathEqualTo(OBJ_URI) - .respond() - .withStatus(200) - .withBody(MAPPER.writeValueAsString(new UriResponse(SPECIFIC_OBJ_URI))); - onRequest() - .havingMethodEqualTo("GET") - .havingPathEqualTo(SPECIFIC_OBJ_URI) + .havingParameterEqualTo("createAndGet", "true") .respond() .withStatus(200) .withBody(readFromResource("/md/metric.json")); @@ -219,12 +214,7 @@ public void shouldCreateMailScheduleObj() throws Exception { onRequest() .havingMethodEqualTo("POST") .havingPathEqualTo(OBJ_URI) - .respond() - .withStatus(200) - .withBody(MAPPER.writeValueAsString(new UriResponse(SPECIFIC_OBJ_URI))); - onRequest() - .havingMethodEqualTo("GET") - .havingPathEqualTo(SPECIFIC_OBJ_URI) + .havingParameterEqualTo("createAndGet", "true") .respond() .withStatus(200) .withBody(readFromResource("/md/scheduledMail.json")); diff --git a/src/test/java/com/gooddata/md/MetadataServiceTest.java b/src/test/java/com/gooddata/md/MetadataServiceTest.java index f93e8ff76..15405d8ce 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceTest.java +++ b/src/test/java/com/gooddata/md/MetadataServiceTest.java @@ -8,6 +8,7 @@ import com.gooddata.gdc.UriResponse; import com.gooddata.md.report.ReportDefinition; import com.gooddata.project.Project; +import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.http.HttpStatus; @@ -28,6 +29,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -80,11 +82,9 @@ public void testCreateObjRestClientException() throws Exception { public void testCreateObj() throws Exception { final Obj obj = mock(Obj.class); final Obj resultObj = mock(Obj.class); - final UriResponse uriResp = mock(UriResponse.class); - when(restTemplate.postForObject(Obj.URI, obj, UriResponse.class, PROJECT_ID)).thenReturn(uriResp); - when(uriResp.getUri()).thenReturn(URI); - when(restTemplate.getForObject(URI, obj.getClass())).thenReturn(resultObj); + when(restTemplate.postForObject(eq(Obj.CREATE_URI), eq(obj), Matchers.>any(), eq(PROJECT_ID))) + .thenReturn(resultObj); final Obj result = service.createObj(project, obj); assertThat(result, is(notNullValue())); From 076cdb766ac80f7a90de5c1e1b503401c1a9e368 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 16 Mar 2016 15:30:43 +0100 Subject: [PATCH 087/934] introduce BooleanDeserializer Unify BooleanStringDeserializer (boolean values "0" and "1") and BooleanIntegerDeserializer (integer values 0 and 1). The main reason is md/obj resource which returns integer boolean representation upon POST request but string boolean representation on GET. Relates #112 --- .../com/gooddata/dataset/DatasetManifest.java | 4 +- .../com/gooddata/md/AttributeDisplayForm.java | 4 +- .../com/gooddata/md/DataLoadingColumn.java | 6 +-- src/main/java/com/gooddata/md/Dataset.java | 4 +- src/main/java/com/gooddata/md/Entry.java | 6 +-- src/main/java/com/gooddata/md/InUseMany.java | 4 +- src/main/java/com/gooddata/md/Meta.java | 10 ++--- .../java/com/gooddata/project/Project.java | 13 +++--- .../project/ProjectValidationResults.java | 6 +-- src/main/java/com/gooddata/project/Role.java | 4 +- ...rializer.java => BooleanDeserializer.java} | 8 ++-- .../util/BooleanStringDeserializer.java | 29 ------------- .../com/gooddata/md/MetadataServiceIT.java | 2 +- ...Test.java => BooleanDeserializerTest.java} | 31 ++++++++++---- .../gooddata/util/BooleanIntegerClass.java | 2 +- .../com/gooddata/util/BooleanStringClass.java | 2 +- .../util/BooleanStringDeserializerTest.java | 41 ------------------- src/test/resources/md/metric-created.json | 21 ++++++++++ 18 files changed, 83 insertions(+), 114 deletions(-) rename src/main/java/com/gooddata/util/{BooleanIntegerDeserializer.java => BooleanDeserializer.java} (69%) delete mode 100644 src/main/java/com/gooddata/util/BooleanStringDeserializer.java rename src/test/java/com/gooddata/util/{BooleanIntegerDeserializerTest.java => BooleanDeserializerTest.java} (51%) delete mode 100644 src/test/java/com/gooddata/util/BooleanStringDeserializerTest.java create mode 100644 src/test/resources/md/metric-created.json diff --git a/src/main/java/com/gooddata/dataset/DatasetManifest.java b/src/main/java/com/gooddata/dataset/DatasetManifest.java index 5b80c9135..6455e35f9 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifest.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifest.java @@ -4,7 +4,7 @@ package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonInclude; -import com.gooddata.util.BooleanIntegerDeserializer; +import com.gooddata.util.BooleanDeserializer; import com.gooddata.util.BooleanIntegerSerializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -138,7 +138,7 @@ public static class Part { Part(@JsonProperty("mode") String uploadMode, @JsonProperty("columnName") String columnName, @JsonProperty("populates") List populates, - @JsonProperty("referenceKey") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean referenceKey, + @JsonProperty("referenceKey") @JsonDeserialize(using = BooleanDeserializer.class) Boolean referenceKey, @JsonProperty("constraints") Map constraints) { this.uploadMode = uploadMode; this.columnName = columnName; diff --git a/src/main/java/com/gooddata/md/AttributeDisplayForm.java b/src/main/java/com/gooddata/md/AttributeDisplayForm.java index 0463befb3..d870861d4 100644 --- a/src/main/java/com/gooddata/md/AttributeDisplayForm.java +++ b/src/main/java/com/gooddata/md/AttributeDisplayForm.java @@ -1,7 +1,7 @@ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonInclude; -import com.gooddata.util.BooleanIntegerDeserializer; +import com.gooddata.util.BooleanDeserializer; import com.gooddata.util.BooleanIntegerSerializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -45,7 +45,7 @@ private static class Content extends DisplayForm.Content { private final boolean isDefault; private Content(@JsonProperty("formOf") String formOf, @JsonProperty("expression") String expression, - @JsonProperty("default") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean isDefault, + @JsonProperty("default") @JsonDeserialize(using = BooleanDeserializer.class) Boolean isDefault, @JsonProperty("ldmexpression") String ldmExpression, @JsonProperty("type") String type) { super(formOf, expression, ldmExpression, type); diff --git a/src/main/java/com/gooddata/md/DataLoadingColumn.java b/src/main/java/com/gooddata/md/DataLoadingColumn.java index ff901c8b8..e34ec64cb 100644 --- a/src/main/java/com/gooddata/md/DataLoadingColumn.java +++ b/src/main/java/com/gooddata/md/DataLoadingColumn.java @@ -11,7 +11,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.gooddata.gdc.UriResponse; -import com.gooddata.util.BooleanIntegerDeserializer; +import com.gooddata.util.BooleanDeserializer; /** * Represents datasets' loading column. @@ -100,8 +100,8 @@ private static class Content { private Content(@JsonProperty("column") UriResponse columnUri, @JsonProperty("columnName") String columnName, @JsonProperty("type") String columnType, @JsonProperty("length") Integer columnLength, @JsonProperty("precision") Integer columnPrecision, - @JsonProperty("columnUnique") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean columnUnique, - @JsonProperty("columnNull") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean columnNull, + @JsonProperty("columnUnique") @JsonDeserialize(using = BooleanDeserializer.class) boolean columnUnique, + @JsonProperty("columnNull") @JsonDeserialize(using = BooleanDeserializer.class) boolean columnNull, @JsonProperty("columnSynchronize") ColumnSynchronize columnSynchronize) { this.columnUri = columnUri; this.columnName = columnName; diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index 121ce111c..a957d7a99 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -5,7 +5,7 @@ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonInclude; -import com.gooddata.util.BooleanStringDeserializer; +import com.gooddata.util.BooleanDeserializer; import com.gooddata.util.BooleanStringSerializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -105,7 +105,7 @@ private Content(@JsonProperty("ties") List ties, @JsonProperty("facts") List facts, @JsonProperty("dataLoadingColumns") List dataLoadingColumns, @JsonProperty("attributes") List attributes, - @JsonProperty("hasUploadConfiguration") @JsonDeserialize(using = BooleanStringDeserializer.class) Boolean hasUploadConfiguration) { + @JsonProperty("hasUploadConfiguration") @JsonDeserialize(using = BooleanDeserializer.class) Boolean hasUploadConfiguration) { this.ties = ties; this.mode = mode; this.facts = facts; diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 735bf69e5..77f8b3f3b 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -38,13 +38,13 @@ public Entry(@JsonProperty("link") String link, @JsonProperty("category") String category, @JsonProperty("author") String author, @JsonProperty("contributor") String contributor, - @JsonProperty("deprecated") @JsonDeserialize(using = BooleanStringDeserializer.class) Boolean deprecated, + @JsonProperty("deprecated") @JsonDeserialize(using = BooleanDeserializer.class) Boolean deprecated, @JsonProperty("identifier") String identifier, @JsonProperty("tags") String tags, @JsonProperty("created") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime created, @JsonProperty("updated") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime updated, - @JsonProperty("locked") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean locked, - @JsonProperty("unlisted") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean unlisted) { + @JsonProperty("locked") @JsonDeserialize(using = BooleanDeserializer.class) Boolean locked, + @JsonProperty("unlisted") @JsonDeserialize(using = BooleanDeserializer.class) Boolean unlisted) { this.link = link; this.title = title; this.summary = summary; diff --git a/src/main/java/com/gooddata/md/InUseMany.java b/src/main/java/com/gooddata/md/InUseMany.java index 15e39f334..1794508cd 100644 --- a/src/main/java/com/gooddata/md/InUseMany.java +++ b/src/main/java/com/gooddata/md/InUseMany.java @@ -1,7 +1,7 @@ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonInclude; -import com.gooddata.util.BooleanStringDeserializer; +import com.gooddata.util.BooleanDeserializer; import com.gooddata.util.BooleanStringSerializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -39,7 +39,7 @@ class InUseMany { @JsonCreator InUseMany(@JsonProperty("uris") Collection uris, - @JsonProperty("nearest") @JsonDeserialize(using = BooleanStringDeserializer.class) boolean nearest, + @JsonProperty("nearest") @JsonDeserialize(using = BooleanDeserializer.class) boolean nearest, @JsonProperty("types") Set types) { this.uris = notEmpty(uris, "uris"); diff --git a/src/main/java/com/gooddata/md/Meta.java b/src/main/java/com/gooddata/md/Meta.java index 60ecfa291..fb713fa11 100644 --- a/src/main/java/com/gooddata/md/Meta.java +++ b/src/main/java/com/gooddata/md/Meta.java @@ -160,7 +160,7 @@ public Boolean isDeprecated() { } @JsonProperty("deprecated") - @JsonDeserialize(using = BooleanStringDeserializer.class) + @JsonDeserialize(using = BooleanDeserializer.class) public void setDeprecated(Boolean deprecated) { this.deprecated = deprecated; } @@ -184,7 +184,7 @@ public Boolean isProduction() { } @JsonProperty("isProduction") - @JsonDeserialize(using = BooleanIntegerDeserializer.class) + @JsonDeserialize(using = BooleanDeserializer.class) public void setProduction(final Boolean production) { this.production = production; } @@ -200,7 +200,7 @@ public Boolean isLocked() { } @JsonProperty("locked") - @JsonDeserialize(using = BooleanIntegerDeserializer.class) + @JsonDeserialize(using = BooleanDeserializer.class) public void setLocked(Boolean locked) { this.locked = locked; } @@ -216,7 +216,7 @@ public Boolean isUnlisted() { } @JsonProperty("unlisted") - @JsonDeserialize(using = BooleanIntegerDeserializer.class) + @JsonDeserialize(using = BooleanDeserializer.class) public void setUnlisted(Boolean unlisted) { this.unlisted = unlisted; } @@ -232,7 +232,7 @@ public Boolean isSharedWithSomeone() { } @JsonProperty("sharedWithSomeone") - @JsonDeserialize(using = BooleanIntegerDeserializer.class) + @JsonDeserialize(using = BooleanDeserializer.class) public void setSharedWithSomeone(final Boolean sharedWithSomeone) { this.sharedWithSomeone = sharedWithSomeone; } diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index 5325ed02a..1f2c13483 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -5,8 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.Meta; -import com.gooddata.util.BooleanIntegerDeserializer; -import com.gooddata.util.BooleanStringDeserializer; +import com.gooddata.util.BooleanDeserializer; import com.gooddata.util.GDDateTimeDeserializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -486,11 +485,11 @@ private ProjectMeta(@JsonProperty("author") String author, @JsonProperty("tags") String tags, @JsonProperty("uri") String uri, @JsonProperty("identifier") String identifier, - @JsonProperty("deprecated") @JsonDeserialize(using = BooleanStringDeserializer.class) Boolean deprecated, - @JsonProperty("isProduction") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean production, - @JsonProperty("locked") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean locked, - @JsonProperty("unlisted") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean unlisted, - @JsonProperty("sharedWithSomeone") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean sharedWithSomeone) { + @JsonProperty("deprecated") @JsonDeserialize(using = BooleanDeserializer.class) Boolean deprecated, + @JsonProperty("isProduction") @JsonDeserialize(using = BooleanDeserializer.class) Boolean production, + @JsonProperty("locked") @JsonDeserialize(using = BooleanDeserializer.class) Boolean locked, + @JsonProperty("unlisted") @JsonDeserialize(using = BooleanDeserializer.class) Boolean unlisted, + @JsonProperty("sharedWithSomeone") @JsonDeserialize(using = BooleanDeserializer.class) Boolean sharedWithSomeone) { super(author, contributor, created, updated, summary, title, category, tags, uri, identifier, deprecated, production, locked, unlisted, sharedWithSomeone); diff --git a/src/main/java/com/gooddata/project/ProjectValidationResults.java b/src/main/java/com/gooddata/project/ProjectValidationResults.java index 240a6c4df..5a96adf5a 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResults.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResults.java @@ -1,6 +1,6 @@ package com.gooddata.project; -import com.gooddata.util.BooleanIntegerDeserializer; +import com.gooddata.util.BooleanDeserializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -28,8 +28,8 @@ public class ProjectValidationResults { private final List results = new LinkedList<>(); @JsonCreator - private ProjectValidationResults(@JsonProperty("error_found") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean error, - @JsonProperty("fatal_error_found") @JsonDeserialize(using = BooleanIntegerDeserializer.class) boolean fatalError, + private ProjectValidationResults(@JsonProperty("error_found") @JsonDeserialize(using = BooleanDeserializer.class) boolean error, + @JsonProperty("fatal_error_found") @JsonDeserialize(using = BooleanDeserializer.class) boolean fatalError, @JsonProperty("results") List resultItems) { this.error = error; this.fatalError = fatalError; diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index 272d0d8d3..c3664e59c 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.Meta; -import com.gooddata.util.BooleanStringDeserializer; +import com.gooddata.util.BooleanDeserializer; import com.gooddata.util.BooleanStringSerializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -34,7 +34,7 @@ public class Role { private static final String SELF_LINK = "self"; - @JsonDeserialize(contentUsing = BooleanStringDeserializer.class) + @JsonDeserialize(contentUsing = BooleanDeserializer.class) @JsonSerialize(contentUsing = BooleanStringSerializer.class) private final Map permissions; diff --git a/src/main/java/com/gooddata/util/BooleanIntegerDeserializer.java b/src/main/java/com/gooddata/util/BooleanDeserializer.java similarity index 69% rename from src/main/java/com/gooddata/util/BooleanIntegerDeserializer.java rename to src/main/java/com/gooddata/util/BooleanDeserializer.java index 6195cea69..4465b233e 100644 --- a/src/main/java/com/gooddata/util/BooleanIntegerDeserializer.java +++ b/src/main/java/com/gooddata/util/BooleanDeserializer.java @@ -11,9 +11,9 @@ import java.io.IOException; /** - * Deserializes Integer 1 or 0 as boolean + * Deserializes String or Integer 1 or 0 as boolean */ -public class BooleanIntegerDeserializer extends JsonDeserializer { +public class BooleanDeserializer extends JsonDeserializer { private static final Integer ONE = 1; @@ -23,8 +23,10 @@ public Boolean deserialize(JsonParser jp, DeserializationContext ctx) throws IOE notNull(root, "jsonNode"); if (root.isInt()) { return ONE.equals(root.numberValue()); + } else if (root.isTextual()) { + return "1".equals(root.textValue()); } else { - throw new JsonMappingException("Expected int value: " + root.asText(), jp.getCurrentLocation()); + throw new JsonMappingException("Unknown value of type: " + root.getNodeType(), jp.getCurrentLocation()); } } diff --git a/src/main/java/com/gooddata/util/BooleanStringDeserializer.java b/src/main/java/com/gooddata/util/BooleanStringDeserializer.java deleted file mode 100644 index 34ea28358..000000000 --- a/src/main/java/com/gooddata/util/BooleanStringDeserializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.gooddata.util; - -import static com.gooddata.util.Validate.notNull; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonMappingException; - -import java.io.IOException; - -/** - * Deserializes String "1" or "0" as boolean - */ -public class BooleanStringDeserializer extends JsonDeserializer { - - @Override - public Boolean deserialize(JsonParser jp, DeserializationContext ctx) throws IOException { - final JsonNode root = jp.readValueAsTree(); - notNull(root, "jsonNode"); - if (root.isTextual()) { - return "1".equals(root.textValue()); - } else { - throw new JsonMappingException("Expected textual value: " + root.asText(), jp.getCurrentLocation()); - } - } - -} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/MetadataServiceIT.java b/src/test/java/com/gooddata/md/MetadataServiceIT.java index 6b788a774..dd247032a 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceIT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceIT.java @@ -152,7 +152,7 @@ public void shouldCreateObj() throws Exception { .havingParameterEqualTo("createAndGet", "true") .respond() .withStatus(200) - .withBody(readFromResource("/md/metric.json")); + .withBody(readFromResource("/md/metric-created.json")); final Obj result = gd.getMetadataService().createObj(project, metricInput); diff --git a/src/test/java/com/gooddata/util/BooleanIntegerDeserializerTest.java b/src/test/java/com/gooddata/util/BooleanDeserializerTest.java similarity index 51% rename from src/test/java/com/gooddata/util/BooleanIntegerDeserializerTest.java rename to src/test/java/com/gooddata/util/BooleanDeserializerTest.java index 311368d31..47a392eb6 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerDeserializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanDeserializerTest.java @@ -1,19 +1,18 @@ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -public class BooleanIntegerDeserializerTest { +public class BooleanDeserializerTest { private static final ObjectMapper MAPPER = new ObjectMapper(); @Test - public void shouldDeserializeTrue() throws Exception { + public void shouldDeserializeIntegerTrue() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(true)); final JsonNode node = MAPPER.readTree(json); @@ -24,7 +23,7 @@ public void shouldDeserializeTrue() throws Exception { } @Test - public void shouldDeserializeFalse() throws Exception { + public void shouldDeserializeIntegerFalse() throws Exception { final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(false)); final JsonNode node = MAPPER.readTree(json); @@ -34,8 +33,26 @@ public void shouldDeserializeFalse() throws Exception { assertThat(moo.isFoo(), is(false)); } - @Test(expectedExceptions = JsonMappingException.class) - public void shouldThrowOnDeserializingString() throws Exception { - MAPPER.readValue("{\"foo\":\"1\"}", BooleanIntegerClass.class); + @Test + public void shouldDeserializeStringTrue() throws Exception { + final String json = MAPPER.writeValueAsString(new BooleanStringClass(true)); + + final JsonNode node = MAPPER.readTree(json); + assertThat(node.path("foo").textValue(), is("1")); + + final BooleanStringClass moo = MAPPER.readValue(json, BooleanStringClass.class); + assertThat(moo.isFoo(), is(true)); } + + @Test + public void shouldDeserializeStringFalse() throws Exception { + final String json = MAPPER.writeValueAsString(new BooleanStringClass(false)); + + final JsonNode node = MAPPER.readTree(json); + assertThat(node.path("foo").textValue(), is("0")); + + final BooleanStringClass moo = MAPPER.readValue(json, BooleanStringClass.class); + assertThat(moo.isFoo(), is(false)); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/BooleanIntegerClass.java b/src/test/java/com/gooddata/util/BooleanIntegerClass.java index 1f6acaa2a..b485c6cbb 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerClass.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerClass.java @@ -9,7 +9,7 @@ public class BooleanIntegerClass { private final boolean foo; @JsonCreator - public BooleanIntegerClass(@JsonProperty("foo") @JsonDeserialize(using = BooleanIntegerDeserializer.class) final boolean foo) { + public BooleanIntegerClass(@JsonProperty("foo") @JsonDeserialize(using = BooleanDeserializer.class) final boolean foo) { this.foo = foo; } diff --git a/src/test/java/com/gooddata/util/BooleanStringClass.java b/src/test/java/com/gooddata/util/BooleanStringClass.java index d7b322ebf..8104c59bc 100644 --- a/src/test/java/com/gooddata/util/BooleanStringClass.java +++ b/src/test/java/com/gooddata/util/BooleanStringClass.java @@ -9,7 +9,7 @@ public class BooleanStringClass { private final boolean foo; @JsonCreator - public BooleanStringClass(@JsonProperty("foo") @JsonDeserialize(using = BooleanStringDeserializer.class) final boolean foo) { + public BooleanStringClass(@JsonProperty("foo") @JsonDeserialize(using = BooleanDeserializer.class) final boolean foo) { this.foo = foo; } diff --git a/src/test/java/com/gooddata/util/BooleanStringDeserializerTest.java b/src/test/java/com/gooddata/util/BooleanStringDeserializerTest.java deleted file mode 100644 index a45d0ddd7..000000000 --- a/src/test/java/com/gooddata/util/BooleanStringDeserializerTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.gooddata.util; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; - -public class BooleanStringDeserializerTest { - - private static final ObjectMapper MAPPER = new ObjectMapper(); - - @Test - public void shouldDeserializeTrue() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanStringClass(true)); - - final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").textValue(), is("1")); - - final BooleanStringClass moo = MAPPER.readValue(json, BooleanStringClass.class); - assertThat(moo.isFoo(), is(true)); - } - - @Test - public void shouldDeserializeFalse() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanStringClass(false)); - - final JsonNode node = MAPPER.readTree(json); - assertThat(node.path("foo").textValue(), is("0")); - - final BooleanStringClass moo = MAPPER.readValue(json, BooleanStringClass.class); - assertThat(moo.isFoo(), is(false)); - } - - @Test(expectedExceptions = JsonMappingException.class) - public void shouldThrowOnDeserializingInt() throws Exception { - MAPPER.readValue("{\"foo\":0}", BooleanStringClass.class); - } -} \ No newline at end of file diff --git a/src/test/resources/md/metric-created.json b/src/test/resources/md/metric-created.json new file mode 100644 index 000000000..90cd68f9f --- /dev/null +++ b/src/test/resources/md/metric-created.json @@ -0,0 +1,21 @@ +{ + "metric" : { + "content" : { + "expression" : "[/gdc/md/PROJECT_ID/obj/EXPR_ID]", + "format" : "FORMAT" + }, + "meta" : { + "author" : "/gdc/account/profile/USER_ID", + "uri" : "/gdc/md/PROJECT_ID/obj/DF_ID", + "tags" : "", + "created" : "2014-04-11 13:45:56", + "identifier" : "attr.person.id.name", + "deprecated" : 0, + "summary" : "", + "title" : "Person Name", + "category" : "attributeDisplayForm", + "updated" : "2014-04-11 13:45:56", + "contributor" : "/gdc/account/profile/USER_ID" + } + } +} From 77d71949c71cbd435a3637ec85cba22677572a47 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 4 Apr 2016 07:57:36 +0200 Subject: [PATCH 088/934] Add @SafeVarargs to MetadataService.usedBy methods It's necessary to make those methods final and that's not backward compatible. --- src/main/java/com/gooddata/md/MetadataService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index 165564c64..a18e48ba4 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -306,7 +306,8 @@ public Collection findUris(Project project, * 'table'...) * @return objects using given objects. */ - public Collection usedBy(Project project, Obj obj, boolean nearest, Class... types) { + @SafeVarargs + public final Collection usedBy(Project project, Obj obj, boolean nearest, Class... types) { notNull(obj, "obj"); return usedBy(project, obj.getUri(), nearest, types); } @@ -321,7 +322,8 @@ public Collection usedBy(Project project, Obj obj, boolean nearest, Class * @return objects using given objects. * @see #usedBy(Project, Collection, boolean, Class[]) */ - public Collection usedBy(Project project, String uri, boolean nearest, Class... types) { + @SafeVarargs + public final Collection usedBy(Project project, String uri, boolean nearest, Class... types) { notNull(uri, "uri"); notNull(project, "project"); @@ -339,7 +341,8 @@ public Collection usedBy(Project project, String uri, boolean nearest, Cl * @return objects usages * @see #usedBy(Project, String, boolean, Class[]) */ - public Collection usedBy(Project project, Collection uris, boolean nearest, Class... types) { + @SafeVarargs + public final Collection usedBy(Project project, Collection uris, boolean nearest, Class... types) { notNull(uris, "uris"); notNull(project, "project"); From 68baa2b5563a2a7d89af19d1fb3e0aa70e95ce80 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 8 Apr 2016 00:49:20 +0200 Subject: [PATCH 089/934] replace noopRequestCallback with null value --- src/main/java/com/gooddata/AbstractService.java | 11 +---------- .../gooddata/dataload/processes/ProcessService.java | 4 ++-- src/main/java/com/gooddata/report/ReportService.java | 2 +- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gooddata/AbstractService.java b/src/main/java/com/gooddata/AbstractService.java index a949989ea..8d728411c 100644 --- a/src/main/java/com/gooddata/AbstractService.java +++ b/src/main/java/com/gooddata/AbstractService.java @@ -10,11 +10,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.http.client.ClientHttpRequest; import org.springframework.http.client.ClientHttpResponse; import org.springframework.util.FileCopyUtils; import org.springframework.web.client.HttpMessageConverterExtractor; -import org.springframework.web.client.RequestCallback; import org.springframework.web.client.ResponseExtractor; import org.springframework.web.client.RestTemplate; @@ -24,7 +22,6 @@ import java.io.OutputStream; import java.util.concurrent.TimeUnit; - /** * Parent for GoodData services providing helpers for REST API calls and polling. */ @@ -36,12 +33,6 @@ public abstract class AbstractService { protected final ObjectMapper mapper = new ObjectMapper(); - protected final RequestCallback noopRequestCallback = new RequestCallback() { - @Override - public void doWithRequest(final ClientHttpRequest request) throws IOException { - } - }; - private final ResponseExtractor reusableResponseExtractor = new ResponseExtractor() { @Override public ClientHttpResponse extractData(final ClientHttpResponse response) throws IOException { @@ -83,7 +74,7 @@ final

boolean pollOnce(final PollHandler handler) { notNull(handler, "handler"); final ClientHttpResponse response; try { - response = restTemplate.execute(handler.getPollingUri(), GET, noopRequestCallback, reusableResponseExtractor); + response = restTemplate.execute(handler.getPollingUri(), GET, null, reusableResponseExtractor); } catch (GoodDataRestException e) { handler.handlePollException(e); throw new GoodDataException("Handler " + handler.getClass().getName() + " didn't handle exception", e); diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index 208c72118..9fbccf5b3 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -186,7 +186,7 @@ public void getProcessSource(DataloadProcess process, OutputStream outputStream) notNull(outputStream, "outputStream"); try { restTemplate.execute(process.getSourceLink(), HttpMethod.GET, - noopRequestCallback, new OutputStreamResponseExtractor(outputStream)); + null, new OutputStreamResponseExtractor(outputStream)); } catch (GoodDataException | RestClientException e) { throw new GoodDataException("Unable to get process source " + process.getSourceLink(), e); } @@ -202,7 +202,7 @@ public void getExecutionLog(ProcessExecutionDetail executionDetail, OutputStream notNull(outputStream, "outputStream"); try { restTemplate.execute(executionDetail.getLogLink(), HttpMethod.GET, - noopRequestCallback, new OutputStreamResponseExtractor(outputStream)); + null, new OutputStreamResponseExtractor(outputStream)); } catch (GoodDataException | RestClientException e) { throw new GoodDataException("Unable to get process execution log " + executionDetail.getLogLink(), e); } diff --git a/src/main/java/com/gooddata/report/ReportService.java b/src/main/java/com/gooddata/report/ReportService.java index a45169d6b..06ef1e607 100644 --- a/src/main/java/com/gooddata/report/ReportService.java +++ b/src/main/java/com/gooddata/report/ReportService.java @@ -94,7 +94,7 @@ public void handlePollException(final GoodDataRestException e) { @Override protected void onFinish() { try { - restTemplate.execute(uri, GET, noopRequestCallback, new OutputStreamResponseExtractor(output)); + restTemplate.execute(uri, GET, null, new OutputStreamResponseExtractor(output)); } catch (GoodDataException | RestClientException e) { throw new ReportException("Unable to export report", e); } From 2c922704036e3fb2d9f4b8f715010573e72d5b3d Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Sat, 9 Apr 2016 00:42:33 +0200 Subject: [PATCH 090/934] fix: git links --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5271c7041..ad7439402 100644 --- a/pom.xml +++ b/pom.xml @@ -21,8 +21,8 @@ - git@github.com:martiner/java.git - scm:git:git@github.com:martiner/java.git + git@github.com:martiner/gooddata-java.git + scm:git:git@github.com:martiner/gooddata-java.git scm:git:${basedir} From 499de638914ff3777c17cf9629ffe09e8c963b81 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 11 Apr 2016 19:26:31 +0200 Subject: [PATCH 091/934] Add AboutLinks to unify Gdc and Datasets links --- .../java/com/gooddata/dataset/Dataset.java | 29 ++---- .../com/gooddata/dataset/DatasetService.java | 30 ++++-- .../java/com/gooddata/dataset/Datasets.java | 36 ++----- .../java/com/gooddata/gdc/AboutLinks.java | 94 +++++++++++++++++++ src/main/java/com/gooddata/gdc/Gdc.java | 76 ++------------- .../java/com/gooddata/gdc/GdcService.java | 6 ++ .../gooddata/dataset/DatasetServiceIT.java | 23 ++++- .../gooddata/dataset/DatasetServiceTest.java | 43 ++++++++- .../com/gooddata/dataset/DatasetsTest.java | 15 ++- .../java/com/gooddata/gdc/AboutLinksTest.java | 41 ++++++++ src/test/resources/dataset/datasets.json | 2 +- 11 files changed, 254 insertions(+), 141 deletions(-) create mode 100644 src/main/java/com/gooddata/gdc/AboutLinks.java create mode 100644 src/test/java/com/gooddata/gdc/AboutLinksTest.java diff --git a/src/main/java/com/gooddata/dataset/Dataset.java b/src/main/java/com/gooddata/dataset/Dataset.java index daab0dd44..fe0806f82 100644 --- a/src/main/java/com/gooddata/dataset/Dataset.java +++ b/src/main/java/com/gooddata/dataset/Dataset.java @@ -3,33 +3,20 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.gdc.AboutLinks; +import com.gooddata.gdc.AboutLinks.Link; /** - * Dataset + * Dataset link + * @deprecated use {@link Link} instead */ +@Deprecated @JsonIgnoreProperties(ignoreUnknown = true) -public class Dataset { - private final String identifier; - private final String link; - private final String title; +public class Dataset extends Link { @JsonCreator - public Dataset(@JsonProperty("identifier") String identifier, @JsonProperty("link") String link, + public Dataset(@JsonProperty("identifier") String identifier, @JsonProperty("link") String uri, @JsonProperty("title") String title) { - this.identifier = identifier; - this.link = link; - this.title = title; - } - - public String getIdentifier() { - return identifier; - } - - public String getLink() { - return link; - } - - public String getTitle() { - return title; + super(identifier, uri, title, null, null); } } diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 4424625e8..c2e68305d 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -9,10 +9,8 @@ import com.gooddata.PollResult; import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; -import com.gooddata.gdc.DataStoreException; -import com.gooddata.gdc.DataStoreService; -import com.gooddata.gdc.TaskStatus; -import com.gooddata.gdc.UriResponse; +import com.gooddata.gdc.*; +import com.gooddata.gdc.AboutLinks.Link; import com.gooddata.project.Project; import org.apache.commons.lang.RandomStringUtils; import org.springframework.http.client.ClientHttpResponse; @@ -24,9 +22,7 @@ import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; @@ -216,12 +212,28 @@ protected void onFinish() { } /** - * Lists datasets in project. Returns empty list in case there are no datasets. + * Lists datasets (links) in project. Returns empty list in case there are no datasets. * * @param project project to list datasets in - * @return collection of datasets in project or empty list + * @return collection of dataset links or empty list + * @deprecated use {@link #listDatasetLinks(Project)} instead */ + @Deprecated public Collection listDatasets(Project project) { + final HashSet datasets = new HashSet<>(); + for (final Link link : listDatasetLinks(project)) { + datasets.add(new Dataset(link.getIdentifier(), link.getUri(), link.getTitle())); + } + return datasets; + } + + /** + * Lists datasets (links) in project. Returns empty list in case there are no datasets. + * + * @param project project to list datasets in + * @return collection of dataset links or empty list + */ + public Collection listDatasetLinks(final Project project) { notNull(project, "project"); try { final Datasets result = restTemplate.getForObject(Datasets.URI, Datasets.class, project.getId()); diff --git a/src/main/java/com/gooddata/dataset/Datasets.java b/src/main/java/com/gooddata/dataset/Datasets.java index 433c7971c..126ac8f62 100644 --- a/src/main/java/com/gooddata/dataset/Datasets.java +++ b/src/main/java/com/gooddata/dataset/Datasets.java @@ -3,50 +3,26 @@ */ package com.gooddata.dataset; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.*; +import com.gooddata.gdc.AboutLinks; -import java.util.Collection; import java.util.List; /** - * Datasets + * Dataset links */ @JsonTypeName("about") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) -// todo this is almost copy of Gdc -public class Datasets { +class Datasets extends AboutLinks { public static final String URI = "/gdc/md/{project}/ldm/singleloadinterface"; - private final String category; - private final String summary; - private final List links; - @JsonCreator public Datasets(@JsonProperty("category") String category, @JsonProperty("summary") String summary, - @JsonProperty("links") List links) { - this.category = category; - this.summary = summary; - this.links = links; - } - - public String getCategory() { - return category; - } - - public String getSummary() { - return summary; - } - - public Collection getLinks() { - return links; + @JsonProperty("links") List links) { + super(category, summary, null, links); } } diff --git a/src/main/java/com/gooddata/gdc/AboutLinks.java b/src/main/java/com/gooddata/gdc/AboutLinks.java new file mode 100644 index 000000000..c3e62439f --- /dev/null +++ b/src/main/java/com/gooddata/gdc/AboutLinks.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.gdc; + +import com.fasterxml.jackson.annotation.*; + +import java.util.Collection; +import java.util.List; + +/** + * Collection of links with "about" metadata. + * Deserialization only. + */ +@JsonTypeName("about") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class AboutLinks { + + private final String category; + private final String summary; + private final String instance; + private final List links; + + @JsonCreator + public AboutLinks(@JsonProperty("category") String category, @JsonProperty("summary") String summary, + @JsonProperty("instance") String instance, @JsonProperty("links") List links) { + this.category = category; + this.summary = summary; + this.instance = instance; + this.links = links; + } + + public String getCategory() { + return category; + } + + public String getSummary() { + return summary; + } + + public String getInstance() { + return instance; + } + + public Collection getLinks() { + return links; + } + + /** + * Link with metadata. + * Deserialization only. + */ + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Link { + private final String identifier; + private final String uri; + private final String title; + private final String category; + private final String summary; + + @JsonCreator + public Link(@JsonProperty("identifier") String identifier, @JsonProperty("link") String uri, + @JsonProperty("title") String title, @JsonProperty("category") String category, + @JsonProperty("summary") String summary) { + this.identifier = identifier; + this.uri = uri; + this.title = title; + this.category = category; + this.summary = summary; + } + + public String getIdentifier() { + return identifier; + } + + public String getUri() { + return uri; + } + + public String getTitle() { + return title; + } + + public String getCategory() { + return category; + } + + public String getSummary() { + return summary; + } + } +} diff --git a/src/main/java/com/gooddata/gdc/Gdc.java b/src/main/java/com/gooddata/gdc/Gdc.java index cabaa2b34..3f83476fd 100644 --- a/src/main/java/com/gooddata/gdc/Gdc.java +++ b/src/main/java/com/gooddata/gdc/Gdc.java @@ -10,28 +10,24 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.gdc.AboutLinks.Link; import java.util.List; /** - * GoodData API root response (aka "about" or "home") + * GoodData API root links (aka "about" or "home"). + * Deserialization only. */ -@JsonTypeName("about") -@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonIgnoreProperties(ignoreUnknown = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class Gdc { +public class Gdc extends AboutLinks { /** * URI of GoodData API root */ public static final String URI = "/gdc"; - private final List links; - @JsonCreator public Gdc(@JsonProperty("links") List links) { - this.links = links; + super(null, null, null, links); } /** @@ -172,7 +168,7 @@ public String getUserStagingLink() { */ @JsonIgnore private Link getLink(LinkCategory category) { - for (Link link : links) { + for (Link link : getLinks()) { if (category.value.equals(link.getCategory())) { return link; } @@ -180,66 +176,10 @@ private Link getLink(LinkCategory category) { return null; } - /** - * GoodData API root link - */ - @JsonIgnoreProperties(ignoreUnknown = true) - private static class Link { - private final String category; - private final String link; - private final String summary; - private final String title; - - @JsonCreator - public Link(@JsonProperty("category") String category, @JsonProperty("link") String link, - @JsonProperty("summary") String summary, @JsonProperty("title") String title) { - this.category = category; - this.link = link; - this.summary = summary; - this.title = title; - } - - /** - * Get link category - * - * @return link category - */ - public String getCategory() { - return category; - } - - /** - * Get link URI - * - * @return link URI - */ - public String getUri() { - return link; - } - - /** - * Get link summary - * - * @return link summary - */ - public String getSummary() { - return summary; - } - - /** - * Get link title - * - * @return link title - */ - public String getTitle() { - return title; - } - } - /** * GoodData API root link category enum */ - private static enum LinkCategory { + private enum LinkCategory { /** * GoodData API root */ @@ -295,7 +235,7 @@ private static enum LinkCategory { private final String value; - private LinkCategory(final String value) { + LinkCategory(final String value) { this.value = value; } } diff --git a/src/main/java/com/gooddata/gdc/GdcService.java b/src/main/java/com/gooddata/gdc/GdcService.java index cc1555b2e..e256c90d4 100644 --- a/src/main/java/com/gooddata/gdc/GdcService.java +++ b/src/main/java/com/gooddata/gdc/GdcService.java @@ -9,6 +9,7 @@ import org.springframework.web.client.RestTemplate; /** + * Service to work with GoodData API root. */ public class GdcService extends AbstractService { @@ -16,6 +17,11 @@ public GdcService(RestTemplate restTemplate) { super(restTemplate); } + /** + * Obtains GoodData API root links. + * + * @return GoodData API root links + */ public Gdc getGdc() { try { return restTemplate.getForObject(Gdc.URI, Gdc.class); diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index 1b6b9d7af..7609f187b 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -2,6 +2,7 @@ import com.gooddata.AbstractGoodDataIT; import com.gooddata.GoodDataException; +import com.gooddata.gdc.AboutLinks.Link; import com.gooddata.gdc.TaskStatus; import com.gooddata.project.Project; import org.testng.annotations.BeforeClass; @@ -16,10 +17,7 @@ import static com.gooddata.util.ResourceUtils.readFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.startsWith; +import static org.hamcrest.Matchers.*; import static org.testng.Assert.fail; public class DatasetServiceIT extends AbstractGoodDataIT { @@ -145,6 +143,23 @@ public void shouldListDatasets() throws Exception { final Collection datasets = gd.getDatasetService().listDatasets(project); assertThat(datasets, hasSize(1)); + assertThat(datasets.iterator().next().getUri(), + is("/gdc/md/PROJECT_ID/ldm/singleloadinterface/dataset.person")); + } + + @Test + public void shouldListDatasetLinks() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc/md/PROJECT_ID/ldm/singleloadinterface") + .respond() + .withBody(readFromResource("/dataset/datasets.json")) + ; + + final Collection datasets = gd.getDatasetService().listDatasetLinks(project); + assertThat(datasets, hasSize(1)); + assertThat(datasets.iterator().next().getUri(), + is("/gdc/md/PROJECT_ID/ldm/singleloadinterface/dataset.person")); } @Test diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java index f09a0754a..32b816cbb 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java @@ -5,6 +5,7 @@ import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; +import com.gooddata.gdc.AboutLinks.Link; import com.gooddata.gdc.DataStoreException; import com.gooddata.gdc.DataStoreService; import com.gooddata.project.Project; @@ -20,6 +21,7 @@ import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; @@ -41,7 +43,7 @@ public class DatasetServiceTest { @Mock private Project project; @Mock - private Dataset dataset; + private Link datasetLink; @Mock private DatasetManifest manifest; @Mock @@ -152,13 +154,13 @@ public void testListDatasetsWithNullProject() throws Exception { @Test(expectedExceptions = GoodDataException.class) public void testListDatasetsWithNullResponse() throws Exception { - when(restTemplate.getForObject(Datasets.URI, Dataset.class, PROJECT_ID)).thenReturn(null); + when(restTemplate.getForObject(Datasets.URI, Link.class, PROJECT_ID)).thenReturn(null); service.listDatasets(project); } @Test(expectedExceptions = GoodDataException.class) public void testListDatasetsWithRestClientError() throws Exception { - when(restTemplate.getForObject(Datasets.URI, Dataset.class, PROJECT_ID)).thenThrow(new RestClientException("")); + when(restTemplate.getForObject(Datasets.URI, Link.class, PROJECT_ID)).thenThrow(new RestClientException("")); service.listDatasets(project); } @@ -166,10 +168,41 @@ public void testListDatasetsWithRestClientError() throws Exception { public void testListDatasetsWithEmptyResponse() throws Exception { final Datasets datasets = mock(Datasets.class); when(restTemplate.getForObject(Datasets.URI, Datasets.class, PROJECT_ID)).thenReturn(datasets); - when(datasets.getLinks()).thenReturn(asList(dataset)); + when(datasets.getLinks()).thenReturn(asList(datasetLink)); + when(datasetLink.getIdentifier()).thenReturn("ID"); final Collection result = service.listDatasets(project); assertThat(result, hasSize(1)); - assertThat(result, contains(dataset)); + final Dataset dataset = result.iterator().next(); + assertThat(dataset, is(notNullValue())); + assertThat(dataset.getIdentifier(), is("ID")); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testListDatasetLinksWithNullProject() throws Exception { + service.listDatasetLinks(null); + } + + @Test(expectedExceptions = GoodDataException.class) + public void testListDatasetLinksWithNullResponse() throws Exception { + when(restTemplate.getForObject(Datasets.URI, Link.class, PROJECT_ID)).thenReturn(null); + service.listDatasetLinks(project); + } + + @Test(expectedExceptions = GoodDataException.class) + public void testListDatasetLinksWithRestClientError() throws Exception { + when(restTemplate.getForObject(Datasets.URI, Link.class, PROJECT_ID)).thenThrow(new RestClientException("")); + service.listDatasetLinks(project); + } + + @Test + public void testListDatasetLinksWithEmptyResponse() throws Exception { + final Datasets datasets = mock(Datasets.class); + when(restTemplate.getForObject(Datasets.URI, Datasets.class, PROJECT_ID)).thenReturn(datasets); + when(datasets.getLinks()).thenReturn(asList(datasetLink)); + + final Collection result = service.listDatasetLinks(project); + assertThat(result, hasSize(1)); + assertThat(result, contains(datasetLink)); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/DatasetsTest.java b/src/test/java/com/gooddata/dataset/DatasetsTest.java index b87eb7926..cfb2bdda7 100644 --- a/src/test/java/com/gooddata/dataset/DatasetsTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetsTest.java @@ -1,6 +1,7 @@ package com.gooddata.dataset; import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.gdc.AboutLinks.Link; import org.testng.annotations.Test; import java.io.InputStream; @@ -8,22 +9,30 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; public class DatasetsTest { + @Test public void deserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/dataset/datasets.json"); final Datasets datasets = new ObjectMapper().readValue(stream, Datasets.class); assertThat(datasets, is(notNullValue())); + assertThat(datasets.getCategory(), is("singleloadinterface")); + assertThat(datasets.getInstance(), is("MD::LDM::SingleLoadInterface")); + assertThat(datasets.getSummary(), is("single loading interfaces")); - final Collection links = datasets.getLinks(); + final Collection links = datasets.getLinks(); assertThat(links, is(notNullValue())); assertThat(links, hasSize(1)); - final Dataset link = links.iterator().next(); + final Link link = links.iterator().next(); assertThat(link, is(notNullValue())); assertThat(link.getIdentifier(), is("dataset.person")); + assertThat(link.getUri(), is("/gdc/md/PROJECT_ID/ldm/singleloadinterface/dataset.person")); + assertThat(link.getCategory(), is("dataset-singleloadinterface")); + assertThat(link.getTitle(), is("Person")); + assertThat(link.getSummary(), is("dataset single data loading interface specifications")); } } diff --git a/src/test/java/com/gooddata/gdc/AboutLinksTest.java b/src/test/java/com/gooddata/gdc/AboutLinksTest.java new file mode 100644 index 000000000..15d6458cb --- /dev/null +++ b/src/test/java/com/gooddata/gdc/AboutLinksTest.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.gdc; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; +import java.util.Collection; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; + +public class AboutLinksTest { + + @Test + public void deserialize() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataset/datasetLinks.json"); + final AboutLinks aboutLinks = new ObjectMapper().readValue(stream, AboutLinks.class); + assertThat(aboutLinks, is(notNullValue())); + assertThat(aboutLinks.getCategory(), is("singleloadinterface")); + assertThat(aboutLinks.getInstance(), is("MD::LDM::SingleLoadInterface")); + assertThat(aboutLinks.getSummary(), is("single loading interfaces")); + + final Collection links = aboutLinks.getLinks(); + assertThat(links, is(notNullValue())); + assertThat(links, hasSize(1)); + + final AboutLinks.Link link = links.iterator().next(); + assertThat(link, is(notNullValue())); + assertThat(link.getIdentifier(), is("dataset.person")); + assertThat(link.getUri(), is("/gdc/md/PROJECT_ID/ldm/singleloadinterface/dataset.person")); + assertThat(link.getCategory(), is("dataset-singleloadinterface")); + assertThat(link.getTitle(), is("Person")); + assertThat(link.getSummary(), is("dataset single data loading interface specifications")); + } + +} \ No newline at end of file diff --git a/src/test/resources/dataset/datasets.json b/src/test/resources/dataset/datasets.json index aa368d6d1..4827ae04a 100644 --- a/src/test/resources/dataset/datasets.json +++ b/src/test/resources/dataset/datasets.json @@ -5,7 +5,7 @@ "instance": "MD::LDM::SingleLoadInterface", "links": [ { - "link": "/gdc/md/vra1wg1m6r0gzl8i8r8y3h1bk0kkzkpo/ldm/singleloadinterface/dataset.person", + "link": "/gdc/md/PROJECT_ID/ldm/singleloadinterface/dataset.person", "identifier": "dataset.person", "summary": "dataset single data loading interface specifications", "category": "dataset-singleloadinterface", From 6559d723408b6b62eb7a9fd4a211d65919a87ecb Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 15 Apr 2016 09:15:32 +0200 Subject: [PATCH 092/934] Rename deleteProjectFeatureFlag To have consistent naming with the rest. --- .../featureflag/FeatureFlagService.java | 23 ++++++++++++----- .../com/gooddata/project/ProjectService.java | 2 +- .../featureflag/FeatureFlagServiceAT.java | 2 +- .../featureflag/FeatureFlagServiceIT.java | 2 +- .../featureflag/FeatureFlagServiceTest.java | 25 ++++++++++++++++--- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index 29034a6f4..1f63beff8 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -124,16 +124,16 @@ public ProjectFeatureFlag createProjectFeatureFlag(final Project project, final try { final URI featureFlagUri = restTemplate.postForLocation(featureFlagsUri, flag); if (featureFlagUri == null) { - throw new GoodDataException("URI of new flag can't be null"); + throw new GoodDataException("URI of new project feature flag can't be null"); } return getProjectFeatureFlag(featureFlagUri.toString()); } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to create feature flag: " + flag, e); + throw new GoodDataException("Unable to create project feature flag: " + flag, e); } } /** - * Updates existing project's feature flag. + * Updates existing project feature flag. * Note that it doesn't make sense to update any other property than {@link ProjectFeatureFlag#enabled}. * * @param flag feature flag to be updated, cannot be null and it has to contain URI @@ -147,7 +147,7 @@ public ProjectFeatureFlag updateProjectFeatureFlag(final ProjectFeatureFlag flag restTemplate.put(flag.getUri(), flag); return getProjectFeatureFlag(flag.getUri()); } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to update feature flag: " + flag, e); + throw new GoodDataException("Unable to update project feature flag: " + flag, e); } } @@ -155,15 +155,26 @@ public ProjectFeatureFlag updateProjectFeatureFlag(final ProjectFeatureFlag flag * Deletes existing project feature flag. * * @param flag existing project feature flag with links set properly, cannot be null + * @deprecated use {@link #deleteProjectFeatureFlag(ProjectFeatureFlag)} instead */ + @Deprecated public void deleteFeatureFlag(final ProjectFeatureFlag flag) { + deleteProjectFeatureFlag(flag); + } + + /** + * Deletes existing project feature flag. + * + * @param flag existing project feature flag with links set properly, cannot be null + */ + public void deleteProjectFeatureFlag(final ProjectFeatureFlag flag) { notNull(flag, "flag"); notEmpty(flag.getUri(), "flag URI"); try { restTemplate.delete(flag.getUri()); } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to delete feature flag=" + flag, e); + throw new GoodDataException("Unable to delete project feature flag: " + flag, e); } } @@ -175,7 +186,7 @@ String getProjectFeatureFlagUri(final Project project, final String flagName) { private ProjectFeatureFlag getProjectFeatureFlag(final String flagUri) { final ProjectFeatureFlag result = restTemplate.getForObject(flagUri, ProjectFeatureFlag.class); if (result == null) { - throw new GoodDataException("flag cannot be retrieved"); + throw new GoodDataException("Project feature flag cannot be retrieved from URI " + flagUri); } return result; } diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index e27e86934..8b04be135 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -473,7 +473,7 @@ public ProjectFeatureFlag updateFeatureFlag(final ProjectFeatureFlag featureFlag * Deletes existing project feature flag. * * @param featureFlag existing project feature flag with links set properly, cannot be null - * @deprecated use {@link FeatureFlagService#deleteFeatureFlag(com.gooddata.featureflag.ProjectFeatureFlag)} + * @deprecated use {@link FeatureFlagService#deleteProjectFeatureFlag(com.gooddata.featureflag.ProjectFeatureFlag)} */ @Deprecated @SuppressWarnings("deprecation") diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java index 4330ca014..989d7e8d2 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -82,7 +82,7 @@ public void deleteProjectFeatureFlag() throws Exception { gd.getFeatureFlagService().createProjectFeatureFlag(project, new ProjectFeatureFlag("temporaryFeatureFlag")); - gd.getFeatureFlagService().deleteFeatureFlag(featureFlag); + gd.getFeatureFlagService().deleteProjectFeatureFlag(featureFlag); try { gd.getFeatureFlagService().getProjectFeatureFlag(project, featureFlag.getName()); diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java index 47342e760..9e466e600 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -143,7 +143,7 @@ public void deleteProjectFeatureFlagShouldRemoveIt() throws Exception { final ProjectFeatureFlag flag = MAPPER .readValue(readFromResource("/featureflag/projectFeatureFlag.json"), ProjectFeatureFlag.class); - service.deleteFeatureFlag(flag); + service.deleteProjectFeatureFlag(flag); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java index de3f415ea..8719ebcab 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -211,22 +211,41 @@ public void testUpdateProjectFeatureFlag() throws Exception { } @Test(expectedExceptions = IllegalArgumentException.class) - public void whenNullFlagThenDeleteProjectFeatureFlagShouldThrow() throws Exception { + public void whenNullFlagThenDeleteFeatureFlagShouldThrow() throws Exception { service.deleteFeatureFlag(null); } @Test(expectedExceptions = GoodDataException.class) - public void whenClientErrorResponseThenDeleteProjectFeatureFlagShouldThrow() throws Exception { + public void whenClientErrorResponseThenDeleteFeatureFlagShouldThrow() throws Exception { when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); doThrow(new RestClientException("")).when(restTemplate).delete(PROJECT_FEATURE_FLAG_URI); service.deleteFeatureFlag(projectFeatureFlag); } @Test - public void testDeleteProjectFeatureFlag() throws Exception { + public void testDeleteFeatureFlag() throws Exception { when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); service.deleteFeatureFlag(projectFeatureFlag); verify(restTemplate).delete(PROJECT_FEATURE_FLAG_URI); } + @Test(expectedExceptions = IllegalArgumentException.class) + public void whenNullFlagThenDeleteProjectFeatureFlagShouldThrow() throws Exception { + service.deleteProjectFeatureFlag(null); + } + + @Test(expectedExceptions = GoodDataException.class) + public void whenClientErrorResponseThenDeleteProjectFeatureFlagShouldThrow() throws Exception { + when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); + doThrow(new RestClientException("")).when(restTemplate).delete(PROJECT_FEATURE_FLAG_URI); + service.deleteProjectFeatureFlag(projectFeatureFlag); + } + + @Test + public void testDeleteProjectFeatureFlag() throws Exception { + when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); + service.deleteProjectFeatureFlag(projectFeatureFlag); + verify(restTemplate).delete(PROJECT_FEATURE_FLAG_URI); + } + } \ No newline at end of file From dcb1f13482e6f36465ead48c2b55c8cc78469327 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Sun, 17 Apr 2016 22:01:01 +0200 Subject: [PATCH 093/934] add url to pom.xml --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index ad7439402..6308c8a9d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,7 @@ 1.5.1-SNAPSHOT ${project.artifactId} GoodData Java SDK + https://github.com/martiner/gooddata-java org.sonatype.oss From a33fad5369f908f70b7d472323a0d5989b9a9d85 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Mon, 18 Apr 2016 08:17:45 +0200 Subject: [PATCH 094/934] fix: deserialize ColumnSynchronize.precision correctly from "columnPrecision" --- src/main/java/com/gooddata/md/DataLoadingColumn.java | 2 +- src/test/resources/md/dataLoadingColumn.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gooddata/md/DataLoadingColumn.java b/src/main/java/com/gooddata/md/DataLoadingColumn.java index e34ec64cb..af32f9f79 100644 --- a/src/main/java/com/gooddata/md/DataLoadingColumn.java +++ b/src/main/java/com/gooddata/md/DataLoadingColumn.java @@ -153,7 +153,7 @@ private static class ColumnSynchronize { @JsonCreator private ColumnSynchronize(@JsonProperty("columnType") String type, @JsonProperty("columnLength") Integer length, - @JsonProperty("precision") Integer precision) { + @JsonProperty("columnPrecision") Integer precision) { this.type = type; this.length = length; this.precision = precision; diff --git a/src/test/resources/md/dataLoadingColumn.json b/src/test/resources/md/dataLoadingColumn.json index 5da9b05b9..d292b98a1 100644 --- a/src/test/resources/md/dataLoadingColumn.json +++ b/src/test/resources/md/dataLoadingColumn.json @@ -13,7 +13,7 @@ "columnSynchronize" : { "columnType" : "INT", "columnLength" : 128, - "precision" : 0 + "columnPrecision" : 0 } }, "meta" : { From d6d9adbd6a886c3813993968795f1cff48a96bac Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 19 May 2016 10:10:27 +0200 Subject: [PATCH 095/934] Revert "Add @SafeVarargs to MetadataService.usedBy methods" --- src/main/java/com/gooddata/md/MetadataService.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index 93f73d455..47fcd38b4 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -306,8 +306,7 @@ public Collection findUris(Project project, * 'table'...) * @return objects using given objects. */ - @SafeVarargs - public final Collection usedBy(Project project, Obj obj, boolean nearest, Class... types) { + public Collection usedBy(Project project, Obj obj, boolean nearest, Class... types) { notNull(obj, "obj"); return usedBy(project, obj.getUri(), nearest, types); } @@ -322,8 +321,7 @@ public final Collection usedBy(Project project, Obj obj, boolean nearest, * @return objects using given objects. * @see #usedBy(Project, Collection, boolean, Class[]) */ - @SafeVarargs - public final Collection usedBy(Project project, String uri, boolean nearest, Class... types) { + public Collection usedBy(Project project, String uri, boolean nearest, Class... types) { notNull(uri, "uri"); notNull(project, "project"); @@ -341,8 +339,7 @@ public final Collection usedBy(Project project, String uri, boolean neare * @return objects usages * @see #usedBy(Project, String, boolean, Class[]) */ - @SafeVarargs - public final Collection usedBy(Project project, Collection uris, boolean nearest, Class... types) { + public Collection usedBy(Project project, Collection uris, boolean nearest, Class... types) { notNull(uris, "uris"); notNull(project, "project"); From 23302019a73d4063c9571e65eb8f312d3add6267 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 4 Apr 2016 07:57:36 +0200 Subject: [PATCH 096/934] Add @SafeVarargs to MetadataService.usedBy methods It's necessary to make those methods final and that's not backward compatible. --- src/main/java/com/gooddata/md/MetadataService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index 47fcd38b4..93f73d455 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -306,7 +306,8 @@ public Collection findUris(Project project, * 'table'...) * @return objects using given objects. */ - public Collection usedBy(Project project, Obj obj, boolean nearest, Class... types) { + @SafeVarargs + public final Collection usedBy(Project project, Obj obj, boolean nearest, Class... types) { notNull(obj, "obj"); return usedBy(project, obj.getUri(), nearest, types); } @@ -321,7 +322,8 @@ public Collection usedBy(Project project, Obj obj, boolean nearest, Class * @return objects using given objects. * @see #usedBy(Project, Collection, boolean, Class[]) */ - public Collection usedBy(Project project, String uri, boolean nearest, Class... types) { + @SafeVarargs + public final Collection usedBy(Project project, String uri, boolean nearest, Class... types) { notNull(uri, "uri"); notNull(project, "project"); @@ -339,7 +341,8 @@ public Collection usedBy(Project project, String uri, boolean nearest, Cl * @return objects usages * @see #usedBy(Project, String, boolean, Class[]) */ - public Collection usedBy(Project project, Collection uris, boolean nearest, Class... types) { + @SafeVarargs + public final Collection usedBy(Project project, Collection uris, boolean nearest, Class... types) { notNull(uris, "uris"); notNull(project, "project"); From 5bc1a4f9f80a8c77ddc550ad013887901f6b30d8 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 19 May 2016 11:16:44 +0200 Subject: [PATCH 097/934] [maven-release-plugin] prepare release gooddata-java-1.5.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6308c8a9d..f9e1924c4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.5.1-SNAPSHOT + 1.5.1 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 11927c35a1c0b84ced3b7bd404cb7a9b0a5fe8b5 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 19 May 2016 11:16:44 +0200 Subject: [PATCH 098/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f9e1924c4..c291e6226 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.5.1 + 1.5.2-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 14ed5bcfdf02f6fa825da51bf552dafd82c03f28 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 19 May 2016 11:23:48 +0200 Subject: [PATCH 099/934] Bump version in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 777a2fcda..f1f35e0ca 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.5.0 + 1.5.1 ``` From 1d16bd8f88782a77b6c008dc4d85beee0d7e9d83 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 14 Jul 2016 08:59:04 +0200 Subject: [PATCH 100/934] bump version to 2.0.0.RC --- README.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f1f35e0ca..2b358b13b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.5.1 + 2.0.0.RC ``` diff --git a/pom.xml b/pom.xml index c291e6226..f6edd8073 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.5.2-SNAPSHOT + 2.0.0.RC-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From aa83a5d609140131b2e1635f2e7b1819a4e6698e Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 14 Jul 2016 13:57:06 +0200 Subject: [PATCH 101/934] build release candidate branches in travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ad0e8370c..aa60e061a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,4 +7,5 @@ jdk: branches: only: - master + - /\D\.0\.0-RC/ sudo: false From dc8fdc9f1801db7cf379b2542a814b3fc5596d28 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 14 Jul 2016 14:52:26 +0200 Subject: [PATCH 102/934] fix: match the numbered release candidate branch properly --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index aa60e061a..3f65c6ac0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,5 +7,5 @@ jdk: branches: only: - master - - /\D\.0\.0-RC/ + - /\d\.0\.0-RC/ sudo: false From c27bf413451f8be8ee925df9c6990985c4fa8cf9 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 20 May 2016 14:07:59 +0200 Subject: [PATCH 103/934] remove deprecated featureflag handling in ProjectService --- .../java/com/gooddata/gdc/FeatureFlag.java | 57 ------- .../java/com/gooddata/gdc/FeatureFlags.java | 67 -------- .../gooddata/project/ProjectFeatureFlag.java | 137 --------------- .../gooddata/project/ProjectFeatureFlags.java | 39 ----- .../com/gooddata/project/ProjectService.java | 156 ------------------ .../featureflag/FeatureFlagsTest.java | 4 +- .../featureflag/ProjectFeatureFlagsTest.java | 4 +- .../com/gooddata/gdc/FeatureFlagsTest.java | 29 ---- .../project/ProjectFeatureFlagTest.java | 45 ----- .../project/ProjectFeatureFlagsTest.java | 49 ------ .../gooddata/project/ProjectServiceIT.java | 143 ---------------- .../gooddata/project/ProjectServiceTest.java | 39 ----- src/test/resources/gdc/featureFlags.json | 6 - src/test/resources/project/feature-flag.json | 9 - src/test/resources/project/feature-flags.json | 29 ---- 15 files changed, 4 insertions(+), 809 deletions(-) delete mode 100644 src/main/java/com/gooddata/gdc/FeatureFlag.java delete mode 100644 src/main/java/com/gooddata/gdc/FeatureFlags.java delete mode 100644 src/main/java/com/gooddata/project/ProjectFeatureFlag.java delete mode 100644 src/main/java/com/gooddata/project/ProjectFeatureFlags.java delete mode 100644 src/test/java/com/gooddata/gdc/FeatureFlagsTest.java delete mode 100644 src/test/java/com/gooddata/project/ProjectFeatureFlagTest.java delete mode 100644 src/test/java/com/gooddata/project/ProjectFeatureFlagsTest.java delete mode 100644 src/test/resources/gdc/featureFlags.json delete mode 100644 src/test/resources/project/feature-flag.json delete mode 100644 src/test/resources/project/feature-flags.json diff --git a/src/main/java/com/gooddata/gdc/FeatureFlag.java b/src/main/java/com/gooddata/gdc/FeatureFlag.java deleted file mode 100644 index 4ce05d17a..000000000 --- a/src/main/java/com/gooddata/gdc/FeatureFlag.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. - */ -package com.gooddata.gdc; - -import static com.gooddata.util.Validate.notNull; - -/** - * Feature flag is a boolean flag used for enabling / disabling some specific feature of GoodData platform. - * It can be used in various scopes (per project, per project group, per user, global etc.). - * - * @deprecated use {@link com.gooddata.featureflag.FeatureFlagService} and {@link com.gooddata.featureflag.FeatureFlag} instead - */ -@Deprecated -@SuppressWarnings("deprecation") -public class FeatureFlag { - - private final String name; - private boolean enabled; - - public FeatureFlag(final String name, final boolean enabled) { - this.name = notNull(name, "name cannot be null"); - this.enabled = enabled; - } - - public String getName() { - return name; - } - - public boolean getEnabled() { - return enabled; - } - - @Override - public boolean equals(final Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - final FeatureFlag that = (FeatureFlag) o; - - if (enabled != that.enabled) return false; - return !(name != null ? !name.equals(that.name) : that.name != null); - - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (enabled ? 1 : 0); - return result; - } - - @Override - public String toString() { - return "{name='" + name + '\'' + ", enabled=" + enabled + "}"; - } -} diff --git a/src/main/java/com/gooddata/gdc/FeatureFlags.java b/src/main/java/com/gooddata/gdc/FeatureFlags.java deleted file mode 100644 index b67883b7e..000000000 --- a/src/main/java/com/gooddata/gdc/FeatureFlags.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. - */ -package com.gooddata.gdc; - -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; -import org.springframework.web.util.UriTemplate; - -import java.util.ArrayList; -import java.util.List; - -import static org.springframework.util.Assert.notNull; - -/** - * @deprecated use {@link com.gooddata.featureflag.FeatureFlagService} and {@link com.gooddata.featureflag.FeatureFlags} instead - */ -@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonTypeName("featureFlags") -@JsonIgnoreProperties(ignoreUnknown = true) -@Deprecated -@SuppressWarnings("deprecation") -public class FeatureFlags { - - public static final String AGGREGATED_FEATURE_FLAGS_URI = "/gdc/internal/projects/{projectId}/featureFlags"; - public static final UriTemplate AGGREGATED_FEATURE_FLAGS_TEMPLATE = new UriTemplate(AGGREGATED_FEATURE_FLAGS_URI); - - private final List featureFlags = new ArrayList<>(); - - /* protected helper method for JSON deserialization */ - @JsonAnySetter - protected void addFlag(final String name, final boolean enabled) { - notNull(name); - featureFlags.add(new FeatureFlag(name, enabled)); - } - - /** - * @deprecated use {@link com.gooddata.featureflag.FeatureFlags#isEnabled(String)} method or its {@link Iterable} feature - * @return list of feature flags - */ - @Deprecated - public List getFeatureFlags() { - return featureFlags; - } - - @Override - public boolean equals(final Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - final FeatureFlags that = (FeatureFlags) o; - - return !(featureFlags != null ? !featureFlags.equals(that.featureFlags) : that.featureFlags != null); - } - - @Override - public int hashCode() { - return featureFlags != null ? featureFlags.hashCode() : 0; - } - - @Override - public String toString() { - return "FeatureFlags{" + featureFlags + "}"; - } -} diff --git a/src/main/java/com/gooddata/project/ProjectFeatureFlag.java b/src/main/java/com/gooddata/project/ProjectFeatureFlag.java deleted file mode 100644 index fb3ffac8c..000000000 --- a/src/main/java/com/gooddata/project/ProjectFeatureFlag.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.gooddata.project; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; -import org.springframework.web.util.UriTemplate; - -import static com.gooddata.util.Validate.notNull; - -/** - * Project feature flag is a boolean flag used for enabling / disabling some specific feature of GoodData platform - * on per project basis. - * - * @deprecated use {@link com.gooddata.featureflag.FeatureFlagService} and {@link com.gooddata.featureflag.ProjectFeatureFlags} instead - */ -@JsonTypeName("featureFlag") -@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonIgnoreProperties(ignoreUnknown = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -@Deprecated -public class ProjectFeatureFlag { - - public static final String FEATURE_FLAG_URI = ProjectFeatureFlags.FEATURE_FLAGS_URI + "/{featureFlag}"; - public static final UriTemplate FEATURE_FLAG_TEMPLATE = new UriTemplate(FEATURE_FLAG_URI); - - private final String name; - private boolean enabled; - - @JsonIgnore - private Links links; - - /** - * Creates new project feature flag which is by default enabled (true). - * - * @param name unique name of feature flag - */ - public ProjectFeatureFlag(String name) { - this(name, true, null); - } - - /** - * Creates new project feature flag with given value. - * - * @param name unique name of feature flag - * @param enabled true (flag enabled) or false (flag disabled) - */ - public ProjectFeatureFlag(String name, boolean enabled) { - this(name, enabled, null); - } - - @JsonCreator - ProjectFeatureFlag(@JsonProperty("key") String name, - @JsonProperty("value") boolean enabled, - @JsonProperty("links") Links links) { - this.name = name; - this.enabled = enabled; - this.links = links; - } - - @JsonProperty("key") - public String getName() { - return name; - } - - @JsonProperty("value") - public boolean getEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - @JsonIgnore - public String getUri() { - notNull(links, "links cannot be null if you want to get feature flag uri!"); - return links.getSelf(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - final ProjectFeatureFlag that = (ProjectFeatureFlag) o; - - if (enabled != that.enabled) { - return false; - } - return !(name != null ? !name.equals(that.name) : that.name != null); - - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (enabled ? 1 : 0); - return result; - } - - @Override - public String toString() { - return "FeatureFlag{" + - "name='" + name + '\'' + - ", enabled=" + enabled + - ", links=" + links + - '}'; - } - - @JsonIgnoreProperties(ignoreUnknown = true) - static class Links { - private final String self; - @JsonCreator - public Links(@JsonProperty("self") String self) { - this.self = self; - } - - public String getSelf() { - return self; - } - - @Override - public String toString() { - return "Links{" + - "self='" + self + '\'' + - '}'; - } - } -} diff --git a/src/main/java/com/gooddata/project/ProjectFeatureFlags.java b/src/main/java/com/gooddata/project/ProjectFeatureFlags.java deleted file mode 100644 index 8e617df0a..000000000 --- a/src/main/java/com/gooddata/project/ProjectFeatureFlags.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gooddata.project; - -import static org.springframework.util.CollectionUtils.isEmpty; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; -import org.springframework.web.util.UriTemplate; - -import java.util.ArrayList; -import java.util.List; - -/** - * @deprecated use {@link com.gooddata.featureflag.FeatureFlagService} and {@link com.gooddata.featureflag.ProjectFeatureFlags} instead - */ -@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonTypeName("featureFlags") -@JsonIgnoreProperties(ignoreUnknown = true) -@Deprecated -public class ProjectFeatureFlags { - - public static final String FEATURE_FLAGS_URI = Project.URI + "/projectFeatureFlags"; - public static final UriTemplate FEATURE_FLAGS_TEMPLATE = new UriTemplate(FEATURE_FLAGS_URI); - - private final List items = new ArrayList<>(); - - @JsonCreator - ProjectFeatureFlags(@JsonProperty("items") List items) { - if (!isEmpty(items)) { - this.items.addAll(items); - } - } - - public List getItems() { - return items; - } -} diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index 8b04be135..5f38c4896 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -13,10 +13,7 @@ import com.gooddata.account.AccountService; import com.gooddata.collections.Page; import com.gooddata.collections.PageableList; -import com.gooddata.featureflag.FeatureFlagService; import com.gooddata.gdc.AsyncTask; -import com.gooddata.gdc.FeatureFlag; -import com.gooddata.gdc.FeatureFlags; import com.gooddata.gdc.UriResponse; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; @@ -31,9 +28,6 @@ import java.util.List; import java.util.Set; -import static com.gooddata.gdc.FeatureFlags.AGGREGATED_FEATURE_FLAGS_TEMPLATE; -import static com.gooddata.project.ProjectFeatureFlag.FEATURE_FLAG_TEMPLATE; -import static com.gooddata.project.ProjectFeatureFlags.FEATURE_FLAGS_TEMPLATE; import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; import static java.util.Arrays.asList; @@ -347,154 +341,4 @@ public Role getRoleByUri(String uri) { throw new GoodDataException("Unable to get role " + uri, e); } } - - /** - * Lists aggregated feature flags for given project and current user (aggregates global, project group, project and user feature flags). - * It doesn't matter whether feature flag is enabled or not, it'll be included in all cases. - * - * @param project project, cannot be null - * @return list of aggregated feature flags for given project and current user - * @deprecated use {@link FeatureFlagService#listFeatureFlags(Project)} instead - */ - @Deprecated - @SuppressWarnings("deprecation") - public List listAggregatedFeatureFlags(final Project project) { - notNull(project, "project"); - try { - final FeatureFlags featureFlags = - restTemplate.getForObject(AGGREGATED_FEATURE_FLAGS_TEMPLATE.expand(project.getId()), - FeatureFlags.class); - - if (featureFlags == null) { - throw new GoodDataException("empty response from API call"); - } - - return featureFlags.getFeatureFlags(); - } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to list aggregated feature flags for project ID=" + project.getId(), e); - } - } - - /** - * Lists all project feature flags (only project scoped flags, use {@link FeatureFlagService#listFeatureFlags(Project)} - * for aggregated flags from all scopes). - * It doesn't matter whether feature flag is enabled or not, it'll be included in all cases. - * - * @param project project, cannot be null - * @return list of all feature flags for given project - * @deprecated use {@link FeatureFlagService#listProjectFeatureFlags(Project)} instead - */ - @Deprecated - @SuppressWarnings("deprecation") - public List listFeatureFlags(Project project) { - notNull(project, "project"); - try { - final ProjectFeatureFlags projectFeatureFlags = - restTemplate.getForObject(FEATURE_FLAGS_TEMPLATE.expand(project.getId()), ProjectFeatureFlags.class); - - if (projectFeatureFlags == null) { - throw new GoodDataException("empty response from API call"); - } - - return projectFeatureFlags.getItems(); - } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to list project feature flags for project ID=" + project.getId(), e); - } - } - - /** - * Creates new feature flag for given project. - * - * Usually, it doesn't make sense to create feature flag that is disabled because - * this is the same as having no feature flag at all. - * - * @param project project for which the feature flag should be created, cannot be null - * @param featureFlag feature flag to be created, cannot be null - * @return created feature flag - * @deprecated use {@link FeatureFlagService#createProjectFeatureFlag(Project, com.gooddata.featureflag.ProjectFeatureFlag)} - */ - @Deprecated - @SuppressWarnings("deprecation") - public ProjectFeatureFlag createFeatureFlag(final Project project, final ProjectFeatureFlag featureFlag) { - notNull(project, "project"); - notNull(featureFlag, "featureFlag"); - - final String featureFlagsUri = FEATURE_FLAGS_TEMPLATE.expand(project.getId()).toString(); - - try { - final URI featureFlagUri = restTemplate.postForLocation(featureFlagsUri, featureFlag); - notNull(featureFlagsUri, "URI of new featureFlag"); - return getFeatureFlag(featureFlagUri.toString()); - } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to create feature flag: " + featureFlag, e); - } - } - - /** - * Get feature flag by unique name (aka "key"). - * - * @param project project, cannot be null - * @param featureFlagName name of feature flag, cannot be empty - * @return feature flag - * @deprecated use {@link FeatureFlagService#getProjectFeatureFlag(Project, String)} - */ - @Deprecated - @SuppressWarnings("deprecation") - public ProjectFeatureFlag getFeatureFlag(final Project project, final String featureFlagName) { - notNull(project, "project"); - notEmpty(featureFlagName, "featureFlagName"); - - return restTemplate.getForObject(getFeatureFlagUri(project, featureFlagName), ProjectFeatureFlag.class); - } - - /** - * Updates existing feature flag. - * Note that it doesn't make sense to update any other field than {@link ProjectFeatureFlag#enabled}. - * - * @param featureFlag updated feature flag - * @return updated feature flag - * @deprecated use {@link FeatureFlagService#updateProjectFeatureFlag(com.gooddata.featureflag.ProjectFeatureFlag)} - */ - @Deprecated - @SuppressWarnings("deprecation") - public ProjectFeatureFlag updateFeatureFlag(final ProjectFeatureFlag featureFlag) { - notNull(featureFlag, "featureFlag"); - notEmpty(featureFlag.getUri(), "featureFlag"); - - try { - restTemplate.put(featureFlag.getUri(), featureFlag); - return getFeatureFlag(featureFlag.getUri()); - } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to create feature flag: " + featureFlag, e); - } - } - - /** - * Deletes existing project feature flag. - * - * @param featureFlag existing project feature flag with links set properly, cannot be null - * @deprecated use {@link FeatureFlagService#deleteProjectFeatureFlag(com.gooddata.featureflag.ProjectFeatureFlag)} - */ - @Deprecated - @SuppressWarnings("deprecation") - public void deleteFeatureFlag(ProjectFeatureFlag featureFlag) { - notNull(featureFlag, "featureFlag"); - notEmpty(featureFlag.getUri(), "featureFlag URI"); - - try { - restTemplate.delete(featureFlag.getUri()); - } catch (GoodDataRestException | RestClientException e) { - throw new GoodDataException("Unable to delete feature flag=" + featureFlag, e); - } - } - - - @SuppressWarnings("deprecation") - private ProjectFeatureFlag getFeatureFlag(String featureFlagUri) { - return restTemplate.getForObject(featureFlagUri, ProjectFeatureFlag.class); - } - - private String getFeatureFlagUri(final Project project, final String featureFlagName) { - return FEATURE_FLAG_TEMPLATE.expand(project.getId(), featureFlagName).toString(); - } } diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java index df9664834..18a65c246 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java @@ -16,7 +16,7 @@ public class FeatureFlagsTest { @Test public void testDeserialize() { - final FeatureFlags flags = readObjectFromResource(getClass(), "/gdc/featureFlags.json", FeatureFlags.class); + final FeatureFlags flags = readObjectFromResource(getClass(), "/featureflag/featureFlags.json", FeatureFlags.class); assertNotNull(flags); assertThat(flags, containsInAnyOrder( @@ -26,7 +26,7 @@ public void testDeserialize() { @Test public void shouldIterateThroughFlagsInForeach() throws Exception { - final FeatureFlags flags = readObjectFromResource(getClass(), "/gdc/featureFlags.json", FeatureFlags.class); + final FeatureFlags flags = readObjectFromResource(getClass(), "/featureflag/featureFlags.json", FeatureFlags.class); for (FeatureFlag flag : flags) { assertThat(flag, isOneOf( new FeatureFlag("testFeature", true), diff --git a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java index b9b29fef0..663e6e210 100644 --- a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java +++ b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java @@ -23,7 +23,7 @@ public class ProjectFeatureFlagsTest { @Test public void testDeserialize() { - final ProjectFeatureFlags featureFlags = readObjectFromResource(getClass(), "/project/feature-flags.json", + final ProjectFeatureFlags featureFlags = readObjectFromResource(getClass(), "/featureflag/projectFeatureFlags.json", ProjectFeatureFlags.class); assertNotNull(featureFlags); @@ -48,7 +48,7 @@ public void testSerialize() throws IOException { @Test public void shouldIterateThroughFlagsInForeach() throws Exception { - final ProjectFeatureFlags flags = readObjectFromResource(getClass(), "/project/feature-flags.json", + final ProjectFeatureFlags flags = readObjectFromResource(getClass(), "/featureflag/projectFeatureFlags.json", ProjectFeatureFlags.class); for (ProjectFeatureFlag flag : flags) { assertThat(flag, isOneOf( diff --git a/src/test/java/com/gooddata/gdc/FeatureFlagsTest.java b/src/test/java/com/gooddata/gdc/FeatureFlagsTest.java deleted file mode 100644 index 54ef24649..000000000 --- a/src/test/java/com/gooddata/gdc/FeatureFlagsTest.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. - */ -package com.gooddata.gdc; - -import org.testng.annotations.Test; - -import static com.gooddata.util.ResourceUtils.readObjectFromResource; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.hasSize; -import static org.testng.AssertJUnit.assertNotNull; - -@SuppressWarnings("deprecation") -public class FeatureFlagsTest { - - @Test - public void testDeserialize() { - final FeatureFlags featureFlags = readObjectFromResource(getClass(), "/gdc/featureFlags.json", - FeatureFlags.class); - - assertNotNull(featureFlags); - assertThat(featureFlags.getFeatureFlags(), hasSize(2)); - assertThat(featureFlags.getFeatureFlags(), contains( - new FeatureFlag("testFeature", true), - new FeatureFlag("testFeature2", false))); - } - -} diff --git a/src/test/java/com/gooddata/project/ProjectFeatureFlagTest.java b/src/test/java/com/gooddata/project/ProjectFeatureFlagTest.java deleted file mode 100644 index 1151ca2d3..000000000 --- a/src/test/java/com/gooddata/project/ProjectFeatureFlagTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.gooddata.project; - -import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; -import static com.gooddata.util.ResourceUtils.readObjectFromResource; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.core.Is.is; -import static org.hamcrest.core.IsNot.not; -import static org.hamcrest.core.StringContains.containsString; -import static org.hamcrest.core.StringStartsWith.startsWith; -import static org.testng.AssertJUnit.assertTrue; - -import org.testng.annotations.Test; - -import java.io.IOException; - -public class ProjectFeatureFlagTest { - - @Test - public void testDeserialize() { - final ProjectFeatureFlag featureFlag = readObjectFromResource(getClass(), "/project/feature-flag.json", ProjectFeatureFlag.class); - assertThat(featureFlag.getName(), is("myCoolFeature")); - assertTrue(featureFlag.getEnabled()); - assertThat(featureFlag.getUri(), is("/gdc/projects/PROJECT_ID/projectFeatureFlags/myCoolFeature")); - } - - @Test - public void testSerializeDefaultValueTrue() throws IOException { - checkFeatureFlagSerialization(new ProjectFeatureFlag("myFeature"), true); - } - - @Test - public void testSerializeWithValueFalse() throws IOException { - checkFeatureFlagSerialization(new ProjectFeatureFlag("myFeature", false), false); - } - - - private void checkFeatureFlagSerialization(ProjectFeatureFlag featureFlag, boolean expectedValue) throws IOException { - final String serializedFeatureFlag = OBJECT_MAPPER.writeValueAsString(featureFlag); - - assertThat(serializedFeatureFlag, startsWith("{\"featureFlag\"")); - assertThat(serializedFeatureFlag, containsString("\"key\":\"myFeature\"")); - assertThat(serializedFeatureFlag, containsString("\"value\":" + expectedValue)); - assertThat(serializedFeatureFlag, not(containsString("\"links\""))); - } -} \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectFeatureFlagsTest.java b/src/test/java/com/gooddata/project/ProjectFeatureFlagsTest.java deleted file mode 100644 index fa8e5211d..000000000 --- a/src/test/java/com/gooddata/project/ProjectFeatureFlagsTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.gooddata.project; - -import org.testng.annotations.Test; - -import java.io.IOException; -import java.util.Collections; - -import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; -import static com.gooddata.util.ResourceUtils.readObjectFromResource; -import static java.util.Arrays.asList; -import static java.util.Collections.singletonList; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.isOneOf; -import static org.hamcrest.core.StringContains.containsString; -import static org.hamcrest.core.StringStartsWith.startsWith; -import static org.testng.AssertJUnit.assertNotNull; - -@SuppressWarnings("deprecation") -public class ProjectFeatureFlagsTest { - - @Test - public void testDeserialize() { - final ProjectFeatureFlags featureFlags = readObjectFromResource(getClass(), "/project/feature-flags.json", - ProjectFeatureFlags.class); - assertNotNull(featureFlags); - - assertThat(featureFlags.getItems(), containsInAnyOrder( - new ProjectFeatureFlag("myCoolFeature", true), - new ProjectFeatureFlag("mySuperCoolFeature", true), - new ProjectFeatureFlag("mySuperSecretFeature", false))); - } - - @Test - public void testSerialize() throws IOException { - final ProjectFeatureFlags projectFeatureFlags = new ProjectFeatureFlags(asList( - new ProjectFeatureFlag("enabledFeatureFlag", true), - new ProjectFeatureFlag("disabledFeatureFlag", false))); - - final String serializedFeatureFlags = OBJECT_MAPPER.writeValueAsString(projectFeatureFlags); - - assertThat(serializedFeatureFlags, startsWith("{\"featureFlags\"")); - assertThat(serializedFeatureFlags, containsString("\"key\":\"enabledFeatureFlag\",\"value\":true")); - assertThat(serializedFeatureFlags, containsString("\"key\":\"disabledFeatureFlag\",\"value\":false")); - } - -} \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectServiceIT.java b/src/test/java/com/gooddata/project/ProjectServiceIT.java index 83206c2c8..a54f654f2 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceIT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceIT.java @@ -4,8 +4,6 @@ import com.gooddata.GoodDataException; import com.gooddata.collections.PageRequest; import com.gooddata.gdc.AsyncTask; -import com.gooddata.gdc.FeatureFlag; -import com.gooddata.gdc.FeatureFlags; import com.gooddata.gdc.TaskStatus; import com.gooddata.gdc.UriResponse; import com.fasterxml.jackson.databind.ObjectMapper; @@ -13,10 +11,7 @@ import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.isJsonString; -import static com.gooddata.project.ProjectFeatureFlags.FEATURE_FLAGS_TEMPLATE; -import static com.gooddata.project.ProjectFeatureFlag.FEATURE_FLAG_TEMPLATE; import static com.gooddata.util.ResourceUtils.readFromResource; -import static com.gooddata.util.ResourceUtils.readStringFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.empty; @@ -29,7 +24,6 @@ import java.util.List; import java.util.Set; -@SuppressWarnings("deprecation") public class ProjectServiceIT extends AbstractGoodDataIT { private static final ObjectMapper MAPPER = new ObjectMapper(); @@ -322,141 +316,4 @@ public void shouldListPagedUsers() throws Exception { assertThat(secondPage, empty()); } - @Test - public void shouldListAggregatedFeatureFlags() throws Exception { - onRequest() - .havingMethodEqualTo("GET") - .havingPathEqualTo(FeatureFlags.AGGREGATED_FEATURE_FLAGS_TEMPLATE.expand(PROJECT_ID).toString()) - .respond() - .withBody(readStringFromResource("/gdc/featureFlags.json")) - .withStatus(200); - - final List featureFlags = gd.getProjectService().listAggregatedFeatureFlags(enabled); - - assertThat(featureFlags, hasSize(2)); - assertThat(featureFlags, contains( - new FeatureFlag("testFeature", true), - new FeatureFlag("testFeature2", false))); - } - - @Test - public void shouldListProjectFeatureFlags() throws Exception { - - mockListFeatureFlagsRequest(); - - final List projectFeatureFlags = gd.getProjectService().listFeatureFlags(enabled); - - assertThat(projectFeatureFlags, contains( - new ProjectFeatureFlag("myCoolFeature", true), - new ProjectFeatureFlag("mySuperCoolFeature", true), - new ProjectFeatureFlag("mySuperSecretFeature", false))); - } - - @Test - public void shouldGetProjectFeatureFlag() { - final String featureFlagName = "myCoolFeature"; - - mockGetFeatureFlagRequest(getFeatureFlagUri(featureFlagName), true); - - final ProjectFeatureFlag featureFlag = gd.getProjectService().getFeatureFlag(enabled, featureFlagName); - - checkFeatureFlag(featureFlag, featureFlagName, true); - } - - @Test - public void shouldSetProjectFeatureFlag() { - final String featureFlagName = "myCoolFeature"; - - final String featureFlagUri = getFeatureFlagUri(featureFlagName); - - mockCreateFeatureFlagRequest(featureFlagUri); - - mockGetFeatureFlagRequest(featureFlagUri, true); - - final ProjectFeatureFlag featureFlag = gd.getProjectService().createFeatureFlag(enabled, - new ProjectFeatureFlag(featureFlagName)); - - checkFeatureFlag(featureFlag, featureFlagName, true); - } - - @Test - public void shouldDisableExistingFeatureFlag() { - - final String featureFlagName = "myCoolFeature"; - - final String featureFlagUri = getFeatureFlagUri(featureFlagName); - mockUpdateFeatureFlagRequest(featureFlagUri); - mockGetFeatureFlagRequest(featureFlagUri, false); - - final ProjectFeatureFlag updatedFeatureFlag = gd.getProjectService().updateFeatureFlag( - new ProjectFeatureFlag(featureFlagName, false, new ProjectFeatureFlag.Links(featureFlagUri))); - - checkFeatureFlag(updatedFeatureFlag, featureFlagName, false); - } - - @Test - public void shouldDeleteExistingFeatureFlag() { - - final String featureFlagName = "myCoolFeature"; - - final String featureFlagUri = getFeatureFlagUri(featureFlagName); - onRequest() - .havingMethodEqualTo("DELETE") - .havingPathEqualTo(featureFlagUri) - .respond() - .withStatus(204); - - gd.getProjectService().deleteFeatureFlag(new ProjectFeatureFlag(featureFlagName, true, - new ProjectFeatureFlag.Links(featureFlagUri))); - } - - - private String getFeatureFlagUri(String featureFlagName) { - return FEATURE_FLAG_TEMPLATE.expand(PROJECT_ID, featureFlagName).toString(); - } - - private void mockListFeatureFlagsRequest() { - onRequest() - .havingMethodEqualTo("GET") - .havingPathEqualTo(FEATURE_FLAGS_TEMPLATE.expand(PROJECT_ID).toString()) - .respond() - .withBody(readStringFromResource("/project/feature-flags.json")) - .withStatus(200); - } - - private void mockCreateFeatureFlagRequest(String featureFlagUri) { - onRequest() - .havingMethodEqualTo("POST") - .havingPathEqualTo(FEATURE_FLAGS_TEMPLATE.expand(PROJECT_ID).toString()) - .respond() - .withHeader("Location", featureFlagUri) - .withStatus(201); - } - - private void mockGetFeatureFlagRequest(String featureFlagUri, boolean featureFlagValue) { - final String jsonWithValue = readStringFromResource("/project/feature-flag.json") - .replaceAll("\"value\"\\s*:\\s*(true|false)", - "\"value\" : " + featureFlagValue); - onRequest() - .havingMethodEqualTo("GET") - .havingPathEqualTo(featureFlagUri) - .respond() - .withBody(jsonWithValue) - .withStatus(200); - } - - private void mockUpdateFeatureFlagRequest(String featureFlagUri) { - onRequest() - .havingMethodEqualTo("PUT") - .havingPathEqualTo(featureFlagUri) - .respond() - .withStatus(200); - } - - private void checkFeatureFlag(ProjectFeatureFlag featureFlag, String expectedName, boolean expectedValue) { - assertThat(featureFlag, is(notNullValue())); - assertThat(featureFlag.getName(), is(expectedName)); - assertThat(featureFlag.getEnabled(), is(expectedValue)); - } - } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectServiceTest.java b/src/test/java/com/gooddata/project/ProjectServiceTest.java index c72e7f0a2..b04dab0ae 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceTest.java +++ b/src/test/java/com/gooddata/project/ProjectServiceTest.java @@ -7,8 +7,6 @@ import com.gooddata.GoodDataRestException; import com.gooddata.account.Account; import com.gooddata.account.AccountService; -import com.gooddata.gdc.FeatureFlag; -import com.gooddata.gdc.FeatureFlags; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.web.client.RestClientException; @@ -16,9 +14,7 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import java.net.URI; import java.util.Collection; -import java.util.List; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.hasItem; @@ -28,13 +24,11 @@ import static org.hamcrest.Matchers.hasSize; import static org.mockito.Mockito.when; -@SuppressWarnings("deprecation") public class ProjectServiceTest { private static final String ACCOUNT_ID = "17"; private static final String ID = "11"; private static final String URI = "/gdc/projects/11"; - private static final String FEATURE_FLAGS_URI = "/gdc/internal/projects/11/featureFlags"; @Mock private Project project; @@ -116,37 +110,4 @@ public void testGetProjectById() throws Exception { final Project result = service.getProjectById(ID); assertThat(result, is(project)); } - - @Test(expectedExceptions = IllegalArgumentException.class) - public void testListAggregatedFeatureFlagsWithNullId() throws Exception { - service.listAggregatedFeatureFlags(null); - } - - @Test(expectedExceptions = GoodDataException.class) - public void testListAggregatedFeatureFlagsWithEmptyResponse() throws Exception { - when(restTemplate.getForObject(new URI(FEATURE_FLAGS_URI), FeatureFlags.class)).thenReturn(null); - service.listAggregatedFeatureFlags(project); - } - - @Test(expectedExceptions = GoodDataException.class) - public void testListAggregatedFeatureFlagsWithClientErrorResponse() throws Exception { - when(restTemplate.getForObject(new URI(FEATURE_FLAGS_URI), FeatureFlags.class)) - .thenThrow(new RestClientException("")); - service.listAggregatedFeatureFlags(project); - } - - @Test - public void testListAggregatedFeatureFlags() throws Exception { - when(restTemplate.getForObject(new URI(FEATURE_FLAGS_URI), FeatureFlags.class)) - .thenReturn(new FeatureFlags() {{ - this.addFlag("flag1", true); - }}); - - final List flagList = service.listAggregatedFeatureFlags(project); - - assertThat(flagList, hasSize(1)); - assertThat(flagList, contains( - new FeatureFlag("flag1", true))); - } - } \ No newline at end of file diff --git a/src/test/resources/gdc/featureFlags.json b/src/test/resources/gdc/featureFlags.json deleted file mode 100644 index 72ff8f9d2..000000000 --- a/src/test/resources/gdc/featureFlags.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "featureFlags": { - "testFeature": true, - "testFeature2": false - } -} \ No newline at end of file diff --git a/src/test/resources/project/feature-flag.json b/src/test/resources/project/feature-flag.json deleted file mode 100644 index 26916a200..000000000 --- a/src/test/resources/project/feature-flag.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "featureFlag" : { - "key" : "myCoolFeature", - "value" : true, - "links" : { - "self" : "/gdc/projects/PROJECT_ID/projectFeatureFlags/myCoolFeature" - } - } -} \ No newline at end of file diff --git a/src/test/resources/project/feature-flags.json b/src/test/resources/project/feature-flags.json deleted file mode 100644 index 1e77993a7..000000000 --- a/src/test/resources/project/feature-flags.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "featureFlags" : { - "items" : [ { - "featureFlag" : { - "key" : "myCoolFeature", - "value" : true, - "links" : { - "self" : "/gdc/projects/PROJECT_ID/projectFeatureFlags/myCoolFeature" - } - } - }, { - "featureFlag" : { - "key" : "mySuperCoolFeature", - "value" : true, - "links" : { - "self" : "/gdc/projects/PROJECT_ID/projectFeatureFlags/mySuperCoolFeature" - } - } - }, { - "featureFlag" : { - "key" : "mySuperSecretFeature", - "value" : false, - "links" : { - "self" : "/gdc/projects/PROJECT_ID/projectFeatureFlags/mySuperSecretFeature" - } - } - }] - } -} \ No newline at end of file From 7cd18899a1ea7b43a6caf6d49c8800642fb93c0c Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 20 May 2016 14:55:22 +0200 Subject: [PATCH 104/934] remove deprecated featureflag delete method --- .../featureflag/FeatureFlagService.java | 11 ----------- .../featureflag/FeatureFlagServiceTest.java | 19 ------------------- 2 files changed, 30 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index 1f63beff8..415e4a408 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -151,17 +151,6 @@ public ProjectFeatureFlag updateProjectFeatureFlag(final ProjectFeatureFlag flag } } - /** - * Deletes existing project feature flag. - * - * @param flag existing project feature flag with links set properly, cannot be null - * @deprecated use {@link #deleteProjectFeatureFlag(ProjectFeatureFlag)} instead - */ - @Deprecated - public void deleteFeatureFlag(final ProjectFeatureFlag flag) { - deleteProjectFeatureFlag(flag); - } - /** * Deletes existing project feature flag. * diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java index 8719ebcab..62b2feec6 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -210,25 +210,6 @@ public void testUpdateProjectFeatureFlag() throws Exception { assertThat(result, is(newFlag)); } - @Test(expectedExceptions = IllegalArgumentException.class) - public void whenNullFlagThenDeleteFeatureFlagShouldThrow() throws Exception { - service.deleteFeatureFlag(null); - } - - @Test(expectedExceptions = GoodDataException.class) - public void whenClientErrorResponseThenDeleteFeatureFlagShouldThrow() throws Exception { - when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); - doThrow(new RestClientException("")).when(restTemplate).delete(PROJECT_FEATURE_FLAG_URI); - service.deleteFeatureFlag(projectFeatureFlag); - } - - @Test - public void testDeleteFeatureFlag() throws Exception { - when(projectFeatureFlag.getUri()).thenReturn(PROJECT_FEATURE_FLAG_URI); - service.deleteFeatureFlag(projectFeatureFlag); - verify(restTemplate).delete(PROJECT_FEATURE_FLAG_URI); - } - @Test(expectedExceptions = IllegalArgumentException.class) public void whenNullFlagThenDeleteProjectFeatureFlagShouldThrow() throws Exception { service.deleteProjectFeatureFlag(null); From b8b8983ada68aa9a39d0553b070c1a5e265329ee Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Tue, 31 May 2016 08:31:58 +0200 Subject: [PATCH 105/934] remove deprecated Warehouse.getJdbcConnectionString use getConnectionUrl() instead --- src/main/java/com/gooddata/warehouse/Warehouse.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index 5a5b24d67..d6967cc00 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -147,17 +147,6 @@ public Map getLinks() { return links; } - /** - * Get jdbc connection string. Works only on Warehouse loaded from API (using WarehouseService). - * @deprecated Use {@link #getConnectionUrl()} instead. - * @return jdbc connection string - */ - @JsonIgnore - @Deprecated - public String getJdbcConnectionString() { - return getConnectionUrl(); - } - @JsonIgnore public String getUri() { return links != null ? links.get(SELF_LINK): null; From a3e7ca510b611c80a61a11e4d5af5e1d3077a7d7 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Tue, 31 May 2016 08:35:35 +0200 Subject: [PATCH 106/934] remove deprecated ProjectFeatureFlags.getItems use isEnabled(String) method or Iterable feature of ProjectFeatureFlags class --- .../com/gooddata/featureflag/ProjectFeatureFlags.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java index 33861277b..758778cd3 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java @@ -22,6 +22,7 @@ public class ProjectFeatureFlags implements Iterable { public static final String PROJECT_FEATURE_FLAGS_URI = Project.URI + "/projectFeatureFlags"; public static final UriTemplate PROJECT_FEATURE_FLAGS_TEMPLATE = new UriTemplate(PROJECT_FEATURE_FLAGS_URI); + @JsonProperty("items") private final List items = new LinkedList<>(); @JsonCreator @@ -52,12 +53,4 @@ public boolean isEnabled(final String flagName) { return false; } - /** - * @deprecated use {@link #isEnabled(String)} method or {@link Iterable} feature of this class - * @return list of project feature flags - */ - @Deprecated - public List getItems() { - return items; - } } From dd091e5e88c1c322a4fb0227df359263f153d448 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Tue, 31 May 2016 08:36:31 +0200 Subject: [PATCH 107/934] remove deprecated FeatureFlags.getFeatureFlags use isEnabled(String) method or Iterable feature of FeatureFlags class --- src/main/java/com/gooddata/featureflag/FeatureFlags.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlags.java b/src/main/java/com/gooddata/featureflag/FeatureFlags.java index eb25d66a2..4ecce59b3 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlags.java @@ -33,15 +33,6 @@ protected void addFlag(final String name, final boolean enabled) { featureFlags.add(new FeatureFlag(name, enabled)); } - /** - * @deprecated use {@link #isEnabled(String)} method or {@link Iterable} feature of this class - * @return list of feature flags - */ - @Deprecated - public List getFeatureFlags() { - return featureFlags; - } - @Override public Iterator iterator() { return featureFlags.iterator(); From efca80911f9bb6c6ac6245a2f3b674fe7acb3686 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 14 Jul 2016 13:08:28 +0200 Subject: [PATCH 108/934] remove deprecated paging constructor --- src/main/java/com/gooddata/collections/Paging.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/com/gooddata/collections/Paging.java b/src/main/java/com/gooddata/collections/Paging.java index ca80477a9..f03e4c3c6 100644 --- a/src/main/java/com/gooddata/collections/Paging.java +++ b/src/main/java/com/gooddata/collections/Paging.java @@ -28,11 +28,6 @@ public Paging(@JsonProperty("offset") final String offset, @JsonProperty("next") this.next = next == null ? null : new UriPage(next); } - @Deprecated - public Paging(final int offset, final int count, final String next) { - this(Integer.toString(offset), next); - } - public Paging(final String next) { this(null, next); } From 7a23d3e614b8c6e8abea3a78dff60b16607af9f5 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 14 Jul 2016 13:11:06 +0200 Subject: [PATCH 109/934] remove deprecated getDataset method from DatasetException use getDatasets method instead --- src/main/java/com/gooddata/dataset/DatasetException.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/com/gooddata/dataset/DatasetException.java b/src/main/java/com/gooddata/dataset/DatasetException.java index 11f42ae7a..b217d0cb3 100644 --- a/src/main/java/com/gooddata/dataset/DatasetException.java +++ b/src/main/java/com/gooddata/dataset/DatasetException.java @@ -41,13 +41,4 @@ public Collection getDatasets() { return datasets; } - /** - * @return string representation of collection containing dataset names - * @deprecated since this exception may contain more than one dataset, use {@link #getDatasets} instead - * @see #getDatasets() - */ - @Deprecated - public String getDataset() { - return datasets.toString(); - } } From e69f120fe24259cd6bd42f5d23048b6bceff7a38 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 20 May 2016 11:03:56 +0200 Subject: [PATCH 110/934] use spring 4.3.1.RELEASE --- README.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2b358b13b..aa876d134 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ See [releases page](https://github.com/martiner/gooddata-java/releases) for info The *GoodData Java SDK* uses: * the [GoodData HTTP client](https://github.com/gooddata/gooddata-http-client) version 0.9.3 or later * the *Apache HTTP Client* version 4.3 or later (for white-labeled domains at least version 4.3.2 is required) -* the *Spring Framework* version 3.x +* the *Spring Framework* version 4.3.* * the *Jackson JSON Processor* version 2.7.0 (*GoodData Java SDK* version 0.x requires version 1.9) * the *Java Development Kit (JDK)* version 7 or later diff --git a/pom.xml b/pom.xml index f6edd8073..0875e9700 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@ UTF-8 4.3.3 2.7.0 - 3.2.13.RELEASE + 4.3.1.RELEASE 1.1.1 1.5.3 From a8edb0e06ad6fb70d4aa2b54c5b51ea389a83dd2 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 20 May 2016 11:31:30 +0200 Subject: [PATCH 111/934] upgrade to jackson 2.8.0 and use DateTime for zendesk start times There was a BUG in jackson https://github.com/FasterXML/jackson-databind/issues/1124 fixed in 2.7.2. In addition spring 4.3.0 officially claims compatibility with jackson 2.8.0 --- README.md | 2 +- pom.xml | 2 +- .../connector/Zendesk4ProcessExecution.java | 16 +++++++--------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index aa876d134..2b699d91e 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ The *GoodData Java SDK* uses: * the [GoodData HTTP client](https://github.com/gooddata/gooddata-http-client) version 0.9.3 or later * the *Apache HTTP Client* version 4.3 or later (for white-labeled domains at least version 4.3.2 is required) * the *Spring Framework* version 4.3.* -* the *Jackson JSON Processor* version 2.7.0 (*GoodData Java SDK* version 0.x requires version 1.9) +* the *Jackson JSON Processor* version 2.8.* * the *Java Development Kit (JDK)* version 7 or later ## License diff --git a/pom.xml b/pom.xml index 0875e9700..7b44cfe26 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ UTF-8 UTF-8 4.3.3 - 2.7.0 + 2.8.0 4.3.1.RELEASE 1.1.1 1.5.3 diff --git a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java index a2fca64d0..8fd3e0e3d 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java @@ -8,10 +8,9 @@ import static com.gooddata.util.Validate.notNull; import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.ISODateTimeSerializer; import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.format.DateTimeFormatter; -import org.joda.time.format.ISODateTimeFormat; import java.util.Map; import java.util.TreeMap; @@ -21,11 +20,9 @@ */ public class Zendesk4ProcessExecution implements ProcessExecution { - private static final DateTimeFormatter FORMATTER = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC); - private Boolean incremental; - private Map startTimes; + private Map startTimes; @Override public ConnectorType getConnectorType() { @@ -41,7 +38,8 @@ public void setIncremental(final Boolean incremental) { } @JsonAnyGetter - public Map getStartTimes() { + @JsonSerialize(contentUsing = ISODateTimeSerializer.class) + public Map getStartTimes() { return startTimes; } @@ -50,8 +48,8 @@ public void setStartTime(final String resource, final DateTime startTime) { notEmpty(resource, "resource can't be empty"); notNull(startTime, "startTime can't be null"); - startTimes = startTimes == null ? new TreeMap() : startTimes; + startTimes = startTimes == null ? new TreeMap() : startTimes; - startTimes.put(resource + "StartDate", FORMATTER.print(startTime)); + startTimes.put(resource + "StartDate", startTime); } } From 3c8b19c12167ceccc4ddac38939c1e502323e594 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 15 Jul 2016 10:57:19 +0200 Subject: [PATCH 112/934] do not use deprecated GoodDataHttpClient constructor --- src/main/java/com/gooddata/GoodData.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 52b13dad6..5bd4173d8 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -233,8 +233,8 @@ protected HttpClient createHttpClient(final String login, final String password, final int port, final String protocol, final HttpClientBuilder builder) { final HttpHost host = new HttpHost(hostname, port, protocol); final HttpClient httpClient = builder.build(); - final SSTRetrievalStrategy strategy = new LoginSSTRetrievalStrategy(httpClient, host, login, password); - return new GoodDataHttpClient(httpClient, strategy); + final SSTRetrievalStrategy strategy = new LoginSSTRetrievalStrategy(login, password); + return new GoodDataHttpClient(httpClient, host, strategy); } private String getUserAgent() { From d81990bf43030b3c824f71acb5a72a4eace8ff82 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 18 Apr 2016 08:58:34 +0200 Subject: [PATCH 113/934] Use set of strings for tags in Meta object --- .../java/com/gooddata/md/AbstractObj.java | 6 ++- src/main/java/com/gooddata/md/Meta.java | 12 +++--- .../java/com/gooddata/md/ScheduledMail.java | 24 +++++------ .../java/com/gooddata/project/Project.java | 2 +- .../com/gooddata/util/TagsDeserializer.java | 37 +++++++++++++++++ .../com/gooddata/util/TagsSerializer.java | 23 +++++++++++ src/test/java/com/gooddata/md/MetaTest.java | 7 +++- src/test/java/com/gooddata/md/ObjTest.java | 5 ++- .../gooddata/util/TagsDeserializerTest.java | 34 +++++++++++++++ .../com/gooddata/util/TagsSerializerTest.java | 41 +++++++++++++++++++ .../java/com/gooddata/util/TagsTestClass.java | 26 ++++++++++++ 11 files changed, 195 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/gooddata/util/TagsDeserializer.java create mode 100644 src/main/java/com/gooddata/util/TagsSerializer.java create mode 100644 src/test/java/com/gooddata/util/TagsDeserializerTest.java create mode 100644 src/test/java/com/gooddata/util/TagsSerializerTest.java create mode 100644 src/test/java/com/gooddata/util/TagsTestClass.java diff --git a/src/main/java/com/gooddata/md/AbstractObj.java b/src/main/java/com/gooddata/md/AbstractObj.java index b0847d8dd..7f383a0d8 100644 --- a/src/main/java/com/gooddata/md/AbstractObj.java +++ b/src/main/java/com/gooddata/md/AbstractObj.java @@ -7,6 +7,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.joda.time.DateTime; +import java.util.Set; + import static com.gooddata.util.Validate.noNullElements; /** @@ -69,11 +71,11 @@ public void setCategory(String category) { } @JsonIgnore - public String getTags() { + public Set getTags() { return meta.getTags(); } - public void setTags(String tags) { + public void setTags(Set tags) { meta.setTags(tags); } diff --git a/src/main/java/com/gooddata/md/Meta.java b/src/main/java/com/gooddata/md/Meta.java index fb713fa11..7284b59c3 100644 --- a/src/main/java/com/gooddata/md/Meta.java +++ b/src/main/java/com/gooddata/md/Meta.java @@ -13,6 +13,7 @@ import org.joda.time.DateTime; import java.io.Serializable; +import java.util.Set; import static org.apache.commons.lang.StringUtils.substring; @@ -33,7 +34,7 @@ public class Meta implements Serializable { private String summary; private String title; private String category; - private String tags; //TODO collection + private Set tags; private String uri; private String identifier; private Boolean deprecated; @@ -50,7 +51,7 @@ protected Meta(@JsonProperty("author") String author, @JsonProperty("summary") String summary, @JsonProperty("title") String title, @JsonProperty("category") String category, - @JsonProperty("tags") String tags, + @JsonProperty("tags") @JsonDeserialize(using = TagsDeserializer.class) Set tags, @JsonProperty("uri") String uri, @JsonProperty("identifier") String identifier) { super(); @@ -67,7 +68,7 @@ protected Meta(@JsonProperty("author") String author, } public Meta(String author, String contributor, DateTime created, DateTime updated, String summary, - String title, String category, String tags, String uri, String identifier, + String title, String category, Set tags, String uri, String identifier, Boolean deprecated, Boolean production, Boolean locked, Boolean unlisted, Boolean sharedWithSomeone) { this.author = author; this.contributor = contributor; @@ -137,11 +138,12 @@ public void setCategory(String category) { this.category = category; } - public String getTags() { + @JsonSerialize(using = TagsSerializer.class) + public Set getTags() { return tags; } - public void setTags(String tags) { + public void setTags(Set tags) { this.tags = tags; } diff --git a/src/main/java/com/gooddata/md/ScheduledMail.java b/src/main/java/com/gooddata/md/ScheduledMail.java index d8a6d33b2..76b8093de 100644 --- a/src/main/java/com/gooddata/md/ScheduledMail.java +++ b/src/main/java/com/gooddata/md/ScheduledMail.java @@ -3,14 +3,9 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.*; import com.gooddata.md.report.ReportDefinition; import com.gooddata.report.ReportExportFormat; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; import org.joda.time.LocalDate; import java.util.*; @@ -35,14 +30,17 @@ public class ScheduledMail extends AbstractObj implements Queryable, Updatable { this.content = content; } - private ScheduledMail(String title, String summary, String tags, boolean deprecated, String recurrency, LocalDate startDate, String timeZone, - Collection toAddresses, Collection bccAddresses, String subject, String body, List attachments) { - super(new Meta(null, null, null, null, summary, title, null, tags, null, null, deprecated, null, false, false, null)); + private ScheduledMail(String title, String summary, Set tags, boolean deprecated, String recurrency, + LocalDate startDate, String timeZone, Collection toAddresses, + Collection bccAddresses, String subject, String body, List attachments) { + super(new Meta(null, null, null, null, summary, title, null, tags, null, null, deprecated, null, false, false, + null)); notNull(toAddresses, "toAddresses"); notNull(subject, "subject"); notNull(body, "body"); notNull(attachments, "attachments"); - content = new Content(new ScheduledMailWhen(recurrency, startDate, timeZone), toAddresses, bccAddresses, subject, body, attachments); + content = new Content(new ScheduledMailWhen(recurrency, startDate, timeZone), toAddresses, bccAddresses, + subject, body, attachments); } /** @@ -52,7 +50,8 @@ private ScheduledMail(String title, String summary, String tags, boolean depreca * @param summary the summary of the MD object */ public ScheduledMail(String title, String summary) { - super(new Meta(null, null, null, null, summary, title, null, "", null, null, false, null, false, false, null)); + super(new Meta(null, null, null, null, summary, title, null, Collections.emptySet(), null, null, false, + null, false, false, null)); this.content = new Content(); } @@ -73,7 +72,8 @@ public ScheduledMail(String title, String summary) { public ScheduledMail(String title, String summary, String recurrency, LocalDate startDate, String timeZone, Collection toAddresses, Collection bccAddresses, String subject, String body, List attachments) { - this(title, summary, "", false, recurrency, startDate, timeZone, toAddresses, bccAddresses, subject, body, attachments); + this(title, summary, Collections.emptySet(), false, recurrency, startDate, timeZone, toAddresses, + bccAddresses, subject, body, attachments); } /** diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index 1f2c13483..62972d127 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -482,7 +482,7 @@ private ProjectMeta(@JsonProperty("author") String author, @JsonProperty("summary") String summary, @JsonProperty("title") String title, @JsonProperty("category") String category, - @JsonProperty("tags") String tags, + @JsonProperty("tags") Set tags, @JsonProperty("uri") String uri, @JsonProperty("identifier") String identifier, @JsonProperty("deprecated") @JsonDeserialize(using = BooleanDeserializer.class) Boolean deprecated, diff --git a/src/main/java/com/gooddata/util/TagsDeserializer.java b/src/main/java/com/gooddata/util/TagsDeserializer.java new file mode 100644 index 000000000..7e9a2ed17 --- /dev/null +++ b/src/main/java/com/gooddata/util/TagsDeserializer.java @@ -0,0 +1,37 @@ +package com.gooddata.util; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Scanner; +import java.util.Set; + +import static com.gooddata.util.Validate.notNull; + +/** + * Deserializes whitespace separated tags from one string to set of tags (strings) + */ +public class TagsDeserializer extends JsonDeserializer> { + + @Override + public Set deserialize(JsonParser jp, DeserializationContext ctx) throws IOException { + final JsonNode root = jp.readValueAsTree(); + notNull(root, "jsonNode"); + if (root.isTextual()) { + final Scanner scanner = new Scanner(root.textValue()); + final HashSet tags = new HashSet<>(); + while (scanner.hasNext()) { + tags.add(scanner.next()); + } + return tags; + } else { + throw new JsonMappingException(jp, "Unknown value of type: " + root.getNodeType(), jp.getCurrentLocation()); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/gooddata/util/TagsSerializer.java b/src/main/java/com/gooddata/util/TagsSerializer.java new file mode 100644 index 000000000..dd539bc41 --- /dev/null +++ b/src/main/java/com/gooddata/util/TagsSerializer.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.util; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.apache.commons.lang.StringUtils; + +import java.io.IOException; +import java.util.Set; + +/** + * Serializes set of tags (strings) to whitespace separated string of tags + */ +public class TagsSerializer extends JsonSerializer> { + + @Override + public void serialize(Set set, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeString(StringUtils.join(set, " ")); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/MetaTest.java b/src/test/java/com/gooddata/md/MetaTest.java index c1c945934..08192eb8d 100644 --- a/src/test/java/com/gooddata/md/MetaTest.java +++ b/src/test/java/com/gooddata/md/MetaTest.java @@ -8,7 +8,12 @@ import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Set; + import static com.gooddata.JsonMatchers.serializesToJson; +import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -22,7 +27,7 @@ public class MetaTest { public static final String TITLE = "Obj title"; public static final DateTime UPDATED = new DateTime(2014, 4, 11, 13, 45, 57, DateTimeZone.UTC); public static final String CATEGORY = "attributeDisplayForm"; - public static final String TAGS = "TAG1 TAG2"; + public static final Set TAGS = new LinkedHashSet<>(asList("TAG1", "TAG2")); public static final String URI = "/gdc/md/PROJECT_ID/obj/OBJ_ID"; public static final boolean DEPRECATED = false; public static final String IDENTIFIER = "attr.person.id.name"; diff --git a/src/test/java/com/gooddata/md/ObjTest.java b/src/test/java/com/gooddata/md/ObjTest.java index 7465f6d5a..95edc1cb1 100644 --- a/src/test/java/com/gooddata/md/ObjTest.java +++ b/src/test/java/com/gooddata/md/ObjTest.java @@ -10,8 +10,11 @@ import org.testng.annotations.Test; import java.io.InputStream; +import java.util.LinkedHashSet; +import java.util.Set; import static com.gooddata.JsonMatchers.serializesToJson; +import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -25,7 +28,7 @@ public class ObjTest { public static final String TITLE = "Obj title"; public static final DateTime UPDATED = new DateTime(2014, 4, 11, 13, 45, 57, DateTimeZone.UTC); public static final String CATEGORY = "attributeDisplayForm"; - public static final String TAGS = "TAG1 TAG2"; + public static final Set TAGS = new LinkedHashSet<>(asList("TAG1", "TAG2")); public static final String URI = "/gdc/md/PROJECT_ID/obj/OBJ_ID"; public static final boolean DEPRECATED = false; public static final String IDENTIFIER = "attr.person.id.name"; diff --git a/src/test/java/com/gooddata/util/TagsDeserializerTest.java b/src/test/java/com/gooddata/util/TagsDeserializerTest.java new file mode 100644 index 000000000..047d9b71a --- /dev/null +++ b/src/test/java/com/gooddata/util/TagsDeserializerTest.java @@ -0,0 +1,34 @@ +package com.gooddata.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +public class TagsDeserializerTest { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + @Test + public void shouldDeserializeOneToken() throws Exception { + final TagsTestClass tags = MAPPER.readValue("{\"tags\":\"TAG\"}", TagsTestClass.class); + assertThat(tags.getTags(), hasSize(1)); + assertThat(tags.getTags().iterator().next(), is("TAG")); + } + + @Test + public void shouldDeserializeTwoTokens() throws Exception { + final TagsTestClass tags = MAPPER.readValue("{\"tags\":\"TAG TAG2\"}", TagsTestClass.class); + assertThat(tags.getTags(), hasSize(2)); + assertThat(tags.getTags(), hasItems("TAG", "TAG2")); + } + + @Test + public void shouldDeserializeMultipleWhitespaceSeparatedTokens() throws Exception { + final TagsTestClass tags = MAPPER.readValue("{\"tags\":\"TAG TAG2\"}", TagsTestClass.class); + assertThat(tags.getTags(), hasSize(2)); + assertThat(tags.getTags(), hasItems("TAG", "TAG2")); + } + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/TagsSerializerTest.java b/src/test/java/com/gooddata/util/TagsSerializerTest.java new file mode 100644 index 000000000..d0cb5d651 --- /dev/null +++ b/src/test/java/com/gooddata/util/TagsSerializerTest.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.util.Collections; +import java.util.LinkedHashSet; + +import static java.util.Arrays.asList; +import static java.util.Collections.singleton; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; + +public class TagsSerializerTest { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + @Test + public void shouldSerializeOneTag() throws Exception { + final TagsTestClass tags = new TagsTestClass(singleton("TAG")); + final String jsonString = MAPPER.writeValueAsString(tags); + assertThat(jsonString, is("{\"tags\":\"TAG\"}")); + } + + @Test + public void shouldSerializeZeroTags() throws Exception { + final TagsTestClass tags = new TagsTestClass(Collections.emptySet()); + final String jsonString = MAPPER.writeValueAsString(tags); + assertThat(jsonString, is("{\"tags\":\"\"}")); + } + + @Test + public void shouldSerializeTwoTags() throws Exception { + final TagsTestClass tags = new TagsTestClass(new LinkedHashSet<>(asList("TAG", "TAG2"))); + final String jsonString = MAPPER.writeValueAsString(tags); + assertThat(jsonString, is("{\"tags\":\"TAG TAG2\"}")); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/TagsTestClass.java b/src/test/java/com/gooddata/util/TagsTestClass.java new file mode 100644 index 000000000..1f74a7b1c --- /dev/null +++ b/src/test/java/com/gooddata/util/TagsTestClass.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.util; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import java.util.Set; + +class TagsTestClass { + + private final Set tags; + + @JsonCreator + TagsTestClass(@JsonProperty("tags") @JsonDeserialize(using = TagsDeserializer.class) final Set tags) { + this.tags = tags; + } + + @JsonSerialize(using = TagsSerializer.class) + public Set getTags() { + return tags; + } +} From a00a28a735f9d818645188e5dcde18a8a7734c75 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 18 Apr 2016 09:46:57 +0200 Subject: [PATCH 114/934] Use set of strings for tags in Entry object --- src/main/java/com/gooddata/md/Entry.java | 15 +++++++-------- src/test/java/com/gooddata/md/EntryTest.java | 6 +++++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 77f8b3f3b..570d753bd 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -1,15 +1,13 @@ package com.gooddata.md; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.*; import com.gooddata.util.*; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; +import java.util.Set; + /** * Metadata entry (can be named "LINK" in some API docs) */ @@ -25,7 +23,7 @@ public class Entry { private final String contributor; private final Boolean deprecated; private final String identifier; - private final String tags; //TODO collection + private final Set tags; private final DateTime created; private final DateTime updated; private final Boolean locked; @@ -40,7 +38,7 @@ public Entry(@JsonProperty("link") String link, @JsonProperty("contributor") String contributor, @JsonProperty("deprecated") @JsonDeserialize(using = BooleanDeserializer.class) Boolean deprecated, @JsonProperty("identifier") String identifier, - @JsonProperty("tags") String tags, + @JsonProperty("tags") @JsonDeserialize(using = TagsDeserializer.class) Set tags, @JsonProperty("created") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime created, @JsonProperty("updated") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime updated, @JsonProperty("locked") @JsonDeserialize(using = BooleanDeserializer.class) Boolean locked, @@ -101,7 +99,8 @@ public String getIdentifier() { return identifier; } - public String getTags() { + @JsonSerialize(using = TagsSerializer.class) + public Set getTags() { return tags; } diff --git a/src/test/java/com/gooddata/md/EntryTest.java b/src/test/java/com/gooddata/md/EntryTest.java index 6d15b4804..714db982a 100644 --- a/src/test/java/com/gooddata/md/EntryTest.java +++ b/src/test/java/com/gooddata/md/EntryTest.java @@ -8,7 +8,11 @@ import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import java.util.Collections; +import java.util.Set; + import static com.gooddata.JsonMatchers.serializesToJson; +import static java.util.Collections.singleton; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -23,7 +27,7 @@ public class EntryTest { public static final String TITLE = "Entry title"; public static final DateTime UPDATED = new DateTime(2014, 4, 11, 13, 45, 55, DateTimeZone.UTC); public static final String CATEGORY = "ENTRY_CATEGORY"; - public static final String TAGS = "TAG"; + public static final Set TAGS = singleton("TAG"); public static final boolean DEPRECATED = true; public static final String IDENTIFIER = "ID"; public static final boolean LOCKED = true; From cd79aa134db3520590b80c0d9a07c01469fa3031 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 11 Mar 2016 20:14:16 +0100 Subject: [PATCH 115/934] Get rid of UriResponse from object APIs Unfortunately the change in DataLoadingColumn is not backward compatible. On the other hand this Object has been added recently. --- src/main/java/com/gooddata/gdc/UriResponse.java | 4 +++- .../java/com/gooddata/md/DataLoadingColumn.java | 4 ++-- .../md/maintenance/ExportImportService.java | 2 +- .../md/maintenance/PartialMdArtifact.java | 16 +++++++++------- .../com/gooddata/md/DataLoadingColumnTest.java | 3 +-- .../md/maintenance/PartialMdArtifactTest.java | 2 +- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/gooddata/gdc/UriResponse.java b/src/main/java/com/gooddata/gdc/UriResponse.java index 9b591c4d8..3889baeea 100644 --- a/src/main/java/com/gooddata/gdc/UriResponse.java +++ b/src/main/java/com/gooddata/gdc/UriResponse.java @@ -9,7 +9,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * Response containing URI + * Response containing URI string. + *

+ * Intended for internal library purposes only, not to be used in public API! */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) diff --git a/src/main/java/com/gooddata/md/DataLoadingColumn.java b/src/main/java/com/gooddata/md/DataLoadingColumn.java index e34ec64cb..e8eda71b6 100644 --- a/src/main/java/com/gooddata/md/DataLoadingColumn.java +++ b/src/main/java/com/gooddata/md/DataLoadingColumn.java @@ -33,8 +33,8 @@ private DataLoadingColumn(@JsonProperty("meta") Meta meta, @JsonProperty("conten this.content = content; } - public UriResponse getColumnUri() { - return content.getColumnUri(); + public String getColumnUri() { + return content.getColumnUri().getUri(); } public String getName() { diff --git a/src/main/java/com/gooddata/md/maintenance/ExportImportService.java b/src/main/java/com/gooddata/md/maintenance/ExportImportService.java index 07af4f2e9..d3078f155 100644 --- a/src/main/java/com/gooddata/md/maintenance/ExportImportService.java +++ b/src/main/java/com/gooddata/md/maintenance/ExportImportService.java @@ -47,7 +47,7 @@ public FutureResult partialExport(Project project, final P throw new ExportImportException("Unable to export metadata from objects " + export.getUris() + ".", e); } - return new PollResult<>(this, new AbstractPollHandler(partialMdArtifact.getStatus().getUri(), + return new PollResult<>(this, new AbstractPollHandler(partialMdArtifact.getStatusUri(), TaskStatus.class, PartialMdExportToken.class) { @Override public void handlePollResult(TaskStatus pollResult) { diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java index a3abec75b..0835c52b6 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java @@ -1,10 +1,6 @@ package com.gooddata.md.maintenance; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.*; import com.gooddata.gdc.UriResponse; /** @@ -25,11 +21,17 @@ public PartialMdArtifact(@JsonProperty("status") UriResponse status, @JsonProper this.token = token; } - public UriResponse getStatus() { - return status; + @JsonIgnore + public String getStatusUri() { + return getStatus().getUri(); } public String getToken() { return token; } + + @JsonProperty("status") + private UriResponse getStatus() { + return status; + } } diff --git a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java index c48bf30f3..0b8951ed1 100644 --- a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java +++ b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java @@ -22,8 +22,7 @@ public void shouldDeserialize() throws Exception { final DataLoadingColumn column = new ObjectMapper().readValue(stream, DataLoadingColumn.class); assertThat(column, is(notNullValue())); - assertThat(column.getColumnUri(), is(notNullValue())); - assertThat(column.getColumnUri().getUri(), is("/gdc/md/PROJECT_ID/obj/COLUMN_ID")); + assertThat(column.getColumnUri(), is("/gdc/md/PROJECT_ID/obj/COLUMN_ID")); assertThat(column.getType(), is("INT")); assertThat(column.hasTypeInt(), is(true)); diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java index 6cc8d255b..c1b0f7336 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java @@ -17,7 +17,7 @@ public void shouldDeserialize() throws Exception { final InputStream input = getClass().getResourceAsStream("/md/maintenance/partialMDArtifact.json"); final PartialMdArtifact partialMdArtifact = new ObjectMapper().readValue(input, PartialMdArtifact.class); - assertThat(partialMdArtifact.getStatus().getUri(), is("/gdc/md/projectId/tasks/taskId/status")); + assertThat(partialMdArtifact.getStatusUri(), is("/gdc/md/projectId/tasks/taskId/status")); assertThat(partialMdArtifact.getToken(), is("TOKEN123")); } From d4795f7b241e7a93e69b31a18c7db3214efc4f4d Mon Sep 17 00:00:00 2001 From: Peter Plochan Date: Fri, 15 Jul 2016 14:17:33 +0200 Subject: [PATCH 116/934] Introduce project uploads information and statistics in DatasetService --- .../dataset/DatasetNotFoundException.java | 10 +- .../com/gooddata/dataset/DatasetService.java | 80 ++++++++++- .../gooddata/dataset/DatasetUploadsInfo.java | 130 ++++++++++++++++++ .../gooddata/dataset/ProjectUploadsInfo.java | 66 +++++++++ .../java/com/gooddata/dataset/Upload.java | 119 ++++++++++++++++ .../gooddata/dataset/UploadStatistics.java | 41 ++++++ .../java/com/gooddata/dataset/Uploads.java | 31 +++++ .../gooddata/dataset/DatasetServiceAT.java | 44 ++++++ .../gooddata/dataset/DatasetServiceIT.java | 70 ++++++++++ .../gooddata/dataset/DatasetServiceTest.java | 62 ++++++++- .../dataset/ProjectUploadsInfoTest.java | 56 ++++++++ .../dataset/UploadStatisticsTest.java | 26 ++++ .../java/com/gooddata/dataset/UploadTest.java | 32 +++++ .../com/gooddata/dataset/UploadsTest.java | 25 ++++ .../resources/dataset/uploads/data-sets.json | 54 ++++++++ .../dataset/uploads/data-uploads-info.json | 9 ++ .../resources/dataset/uploads/upload.json | 14 ++ .../resources/dataset/uploads/uploads.json | 34 +++++ 18 files changed, 899 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/gooddata/dataset/DatasetUploadsInfo.java create mode 100644 src/main/java/com/gooddata/dataset/ProjectUploadsInfo.java create mode 100644 src/main/java/com/gooddata/dataset/Upload.java create mode 100644 src/main/java/com/gooddata/dataset/UploadStatistics.java create mode 100644 src/main/java/com/gooddata/dataset/Uploads.java create mode 100644 src/test/java/com/gooddata/dataset/ProjectUploadsInfoTest.java create mode 100644 src/test/java/com/gooddata/dataset/UploadStatisticsTest.java create mode 100644 src/test/java/com/gooddata/dataset/UploadTest.java create mode 100644 src/test/java/com/gooddata/dataset/UploadsTest.java create mode 100644 src/test/resources/dataset/uploads/data-sets.json create mode 100644 src/test/resources/dataset/uploads/data-uploads-info.json create mode 100644 src/test/resources/dataset/uploads/upload.json create mode 100644 src/test/resources/dataset/uploads/uploads.json diff --git a/src/main/java/com/gooddata/dataset/DatasetNotFoundException.java b/src/main/java/com/gooddata/dataset/DatasetNotFoundException.java index 309656d1d..034a35bcf 100644 --- a/src/main/java/com/gooddata/dataset/DatasetNotFoundException.java +++ b/src/main/java/com/gooddata/dataset/DatasetNotFoundException.java @@ -3,6 +3,8 @@ */ package com.gooddata.dataset; +import static java.lang.String.format; + import com.gooddata.GoodDataException; /** @@ -10,7 +12,13 @@ */ public class DatasetNotFoundException extends GoodDataException { + private static final String MESSAGE = "Dataset %s was not found"; + + public DatasetNotFoundException(String dataset) { + super(format(MESSAGE, dataset)); + } + public DatasetNotFoundException(String dataset, Throwable cause) { - super("Dataset " + dataset + " was not found", cause); + super(format(MESSAGE, dataset), cause); } } diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 4424625e8..b64477bbb 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -38,7 +38,7 @@ import static org.springframework.util.StringUtils.isEmpty; /** - * Service to work with datasets and manifests. + * Service to work with datasets, manifests and dataset uploads. */ public class DatasetService extends AbstractService { @@ -324,4 +324,82 @@ public void handlePollException(final GoodDataRestException e) { } }); } + + /** + * Returns {@link ProjectUploadsInfo} object containing upload information for every single dataset + * in the given project. + * + * @param project GoodData project + * @return information about dataset uploads + */ + public ProjectUploadsInfo getProjectUploadsInfo(Project project) { + notNull(project, "project"); + + try { + return restTemplate.getForObject(ProjectUploadsInfo.URI, ProjectUploadsInfo.class, project.getId()); + } catch (RestClientException e) { + throw new GoodDataException("Unable to get dataset uploads for project '" + project.getId() + "'.", e); + } + } + + /** + * Lists all uploads for the given dataset. Returns empty list if there are no uploads for the given dataset. + * + * @param datasetUploadsInfo {@link DatasetUploadsInfo} object for the given dataset + * @return collection of {@link Upload} objects or empty list + */ + public Collection listUploadsForDataset(DatasetUploadsInfo datasetUploadsInfo) { + notNull(datasetUploadsInfo, "datasetUploadsInfo"); + + if (isEmpty(datasetUploadsInfo.getUploadsUri())) { + throw new GoodDataException("Uploads link for dataset '" + datasetUploadsInfo.getDatasetId() + + "' does not exist."); + } + + try { + final Uploads result = restTemplate.getForObject(datasetUploadsInfo.getUploadsUri(), Uploads.class); + + if (result == null) { + throw new GoodDataException("empty response from API call"); + } else if (result.items() == null){ + return emptyList(); + } + + return result.items(); + } catch (RestClientException e) { + throw new GoodDataException("Unable to get uploads for dataset '" + datasetUploadsInfo.getDatasetId() + + "'.", e); + } + } + + /** + * Lists all uploads for the dataset with the given identifier in the given project. Returns empty list if there + * are no uploads for the given dataset. + * + * @param project GD project + * @param datasetId dataset identifier + * @return collection of {@link Upload} objects or empty list + */ + public Collection listUploadsForDataset(Project project, String datasetId) { + final ProjectUploadsInfo projectUploadsInfo = getProjectUploadsInfo(project); + final DatasetUploadsInfo datasetUploadsInfo = projectUploadsInfo.getDatasetUploadsInfo(datasetId); + + return listUploadsForDataset(datasetUploadsInfo); + } + + /** + * Returns global upload statistics for the given project. + * + * @param project GoodData project + * @return {@link UploadStatistics} object with project's upload statistics + */ + public UploadStatistics getUploadStatistics(Project project) { + notNull(project, "project"); + + try { + return restTemplate.getForObject(UploadStatistics.URI, UploadStatistics.class, project.getId()); + } catch (RestClientException e) { + throw new GoodDataException("Unable to get dataset uploads statistics.", e); + } + } } diff --git a/src/main/java/com/gooddata/dataset/DatasetUploadsInfo.java b/src/main/java/com/gooddata/dataset/DatasetUploadsInfo.java new file mode 100644 index 000000000..a3c459310 --- /dev/null +++ b/src/main/java/com/gooddata/dataset/DatasetUploadsInfo.java @@ -0,0 +1,130 @@ +package com.gooddata.dataset; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gooddata.md.Meta; +import com.gooddata.util.GDDateTimeDeserializer; +import org.joda.time.DateTime; + +/** + * Contains information about dataset uploads for one dataset in the project. Information contain: + *

    + *
  • dataset ID
  • + *
  • uri to all uploads for the given dataset
  • + *
  • date of the last successful upload
  • + *
  • last upload
  • + *
+ * + * Deserialization only. + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class DatasetUploadsInfo { + + private final Meta meta; + private final String datasetUploadsUri; + private final DateTime lastSuccess; + private final LastUpload lastUpload; + + private DatasetUploadsInfo( + @JsonProperty("meta") Meta meta, + @JsonProperty("dataUploads") String datasetUploadsUri, + @JsonProperty("lastSuccess") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime lastSuccess, + @JsonProperty("lastUpload") LastUpload lastUpload) { + this.meta = meta; + this.datasetUploadsUri = datasetUploadsUri; + this.lastSuccess = lastSuccess; + this.lastUpload = lastUpload; + } + + /** + * @return dataset identifier + */ + public String getDatasetId() { + return meta.getIdentifier(); + } + + /** + * @return dataset's author + */ + public String getDatasetAuthor() { + return meta.getAuthor(); + } + + /** + * @return dataset created date + */ + public DateTime getDatasetCreated() { + return meta.getCreated(); + } + + /** + * @return dataset title + */ + public String getDatasetTitle() { + return meta.getTitle(); + } + + /** + * @return dataset URI link + */ + public String getDatasetUri() { + return meta.getUri(); + } + + /** + * @return dataset's summary + */ + public String getDatasetSummary() { + return meta.getSummary(); + } + + /** + * @return URI for all uploads of this dataset + */ + public String getUploadsUri() { + return datasetUploadsUri; + } + + /** + * @return date of the last successful upload of this dataset + */ + public DateTime getLastSuccess() { + return lastSuccess; + } + + /** + * Returns object containing information about last dataset upload. This upload doesn't contain information + * about upload mode, size of data and date when this upload was processed. If you want to get more information about + * dataset uploads, use {@link DatasetService#listUploadsForDataset(DatasetUploadsInfo)} method. + * + * @return {@link Upload} object + */ + public Upload getLastUpload() { + return lastUpload.upload; + } + + /** + * Wrapper class for the last upload. + * Only for deserialization. For internal use only. + */ + @JsonIgnoreProperties(ignoreUnknown = true) + @JsonTypeName("dataUploadShort") + @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) + private static class LastUpload { + + private final Upload upload; + + private LastUpload( + @JsonProperty("uri") String uri, + @JsonProperty("status") String status, + @JsonProperty("progress") Double progress, + @JsonProperty("msg") String message, + @JsonProperty("date") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime date) { + + this.upload = new Upload(message, progress, status, null, uri, date, null, null); + } + } +} diff --git a/src/main/java/com/gooddata/dataset/ProjectUploadsInfo.java b/src/main/java/com/gooddata/dataset/ProjectUploadsInfo.java new file mode 100644 index 000000000..bab0b8662 --- /dev/null +++ b/src/main/java/com/gooddata/dataset/ProjectUploadsInfo.java @@ -0,0 +1,66 @@ +package com.gooddata.dataset; + +import static com.gooddata.util.Validate.notEmpty; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.springframework.web.util.UriTemplate; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * Contains information about dataset uploads for every single dataset in the project. + * For more about dataset uploads information, see {@link DatasetUploadsInfo}. + * Deserialization only. + */ +@JsonTypeName("dataSetsInfo") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectUploadsInfo { + + public static final String URI = "/gdc/md/{projectId}/data/sets"; + public static final UriTemplate URI_TEMPLATE = new UriTemplate(URI); + + private final Map datasets = new HashMap<>(); + + //for deserialization and testing purposes only + ProjectUploadsInfo(@JsonProperty("sets") Collection datasets) { + if (datasets != null) { + for (DatasetUploadsInfo dataset : datasets) { + this.datasets.put(dataset.getDatasetId(), dataset); + } + } + } + + /** + * Returns dataset uploads information for a dataset with the given ID. + * + * @param datasetId dataset identifier + * @return {@link DatasetUploadsInfo} object + */ + public DatasetUploadsInfo getDatasetUploadsInfo(String datasetId) { + notEmpty(datasetId, "datasetId"); + + if (hasDataset(datasetId)) { + return datasets.get(datasetId); + } else { + throw new DatasetNotFoundException(datasetId); + } + } + + /** + * Returns if dataset with the given identifier exists in the project dataset uploads. + * + * @param datasetId dataset identifier + * @return {@code true} if the dataset exists, {@code false} otherwise + */ + public boolean hasDataset(String datasetId) { + notEmpty(datasetId, "datasetId"); + + return datasets.containsKey(datasetId); + } +} diff --git a/src/main/java/com/gooddata/dataset/Upload.java b/src/main/java/com/gooddata/dataset/Upload.java new file mode 100644 index 000000000..77a819b83 --- /dev/null +++ b/src/main/java/com/gooddata/dataset/Upload.java @@ -0,0 +1,119 @@ +package com.gooddata.dataset; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gooddata.util.BooleanDeserializer; +import com.gooddata.util.GDDateTimeDeserializer; +import org.joda.time.DateTime; +import org.springframework.web.util.UriTemplate; + +/** + * Contains information about single dataset upload. + * Deserialization only. + */ +@JsonTypeName("dataUpload") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonIgnoreProperties(ignoreUnknown = true) +public class Upload { + + public static final String URI = "/gdc/md/{projectId}/data/upload/{uploadId}"; + public static final UriTemplate URI_TEMPLATE = new UriTemplate(URI); + + private final String uri; + private final String status; + private final double progress; + private final String message; + private final UploadMode uploadMode; + private final Integer size; + private final DateTime createdAt; + private final DateTime processedAt; + + Upload(@JsonProperty("msg") String message, + @JsonProperty("progress") Double progress, + @JsonProperty("status") String status, + @JsonProperty("fullUpload") @JsonDeserialize(using = BooleanDeserializer.class) Boolean fullUpload, + @JsonProperty("uri") String uri, + @JsonProperty("createdAt") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime createdAt, + @JsonProperty("fileSize") Integer size, + @JsonProperty("processedAt") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime processedAt) { + + this.uri = uri; + this.status = status; + this.progress = progress != null ? progress : 0; + this.message = message; + this.uploadMode = toUploadMode(fullUpload); + this.size = size; + this.createdAt = createdAt; + this.processedAt = processedAt; + } + + /** + * @return uri link to self + */ + public String getUri() { + return uri; + } + + /** + * @return upload status + */ + public String getStatus() { + return status; + } + + /** + * @return upload progress in percent as floating point number + */ + public double getProgress() { + return progress; + } + + /** + * @return error message if the upload failed, {@code null} otherwise + */ + public String getMessage() { + return message; + } + + /** + * @return {@link UploadMode} of this upload + */ + public UploadMode getUploadMode() { + return uploadMode; + } + + /** + * @return size of the data uploaded by this upload + */ + public Integer getSize() { + return size; + } + + /** + * @return date of creation of this upload + */ + public DateTime getCreatedAt() { + return createdAt; + } + + /** + * @return date when the upload was processed or {@code null} if upload is still being processed + */ + public DateTime getProcessedAt() { + return processedAt; + } + + /** + * Converts boolean value containing if the upload is full or incremental load to {@link UploadMode} enum. + */ + private UploadMode toUploadMode(Boolean fullUpload) { + if (fullUpload == null) { + return null; + } + + return fullUpload ? UploadMode.FULL : UploadMode.INCREMENTAL; + } +} diff --git a/src/main/java/com/gooddata/dataset/UploadStatistics.java b/src/main/java/com/gooddata/dataset/UploadStatistics.java new file mode 100644 index 000000000..61d7c6f94 --- /dev/null +++ b/src/main/java/com/gooddata/dataset/UploadStatistics.java @@ -0,0 +1,41 @@ +package com.gooddata.dataset; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; + +import org.springframework.web.util.UriTemplate; + +import java.util.HashMap; +import java.util.Map; + +/** + * Global statistics about project's uploads + */ +@JsonTypeName("dataUploadsInfo") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonIgnoreProperties(ignoreUnknown = true) +public class UploadStatistics { + + public static final String URI = "/gdc/md/{projectId}/data/uploads_info"; + public static final UriTemplate URI_TEMPLATE = new UriTemplate(URI); + + private final Map statusesCount; + + private UploadStatistics(@JsonProperty("statusesCount") Map statusesCount) { + this.statusesCount = new HashMap<>(statusesCount); + } + + /** + * Returns count of uploads finished in given status. + * + * @param uploadStatus status of uploads to be counted + * @return count of uploads or zero when statistics for given status don't exist + */ + public int getUploadsCount(String uploadStatus) { + final Integer uploadsCount = statusesCount.get(uploadStatus); + + return uploadsCount != null ? uploadsCount : 0; + } +} diff --git a/src/main/java/com/gooddata/dataset/Uploads.java b/src/main/java/com/gooddata/dataset/Uploads.java new file mode 100644 index 000000000..3eb507764 --- /dev/null +++ b/src/main/java/com/gooddata/dataset/Uploads.java @@ -0,0 +1,31 @@ +package com.gooddata.dataset; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; + +import java.util.Collection; + +/** + * Contains collection of dataset uploads. + * Deserialization only. For internal use only. + */ +@JsonTypeName("dataUploads") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonIgnoreProperties(ignoreUnknown = true) +class Uploads { + + private Collection uploads; + + Uploads(@JsonProperty("uploads") Collection uploads) { + this.uploads = uploads; + } + + /** + * @return all items of uploads collection + */ + Collection items() { + return uploads; + } +} diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java index c875dbb43..8d0628825 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java @@ -2,6 +2,10 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.Matchers.greaterThan; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import com.gooddata.AbstractGoodDataAT; @@ -9,6 +13,8 @@ import org.testng.annotations.Test; +import java.util.Collection; + /** * Dataset acceptance tests. */ @@ -68,4 +74,42 @@ public void loadDatasetBatchFail() throws Exception { assertThat(ex.getMessage(),is(equalTo("Load datasets [dataset.person, dataset.city] failed: [Number of columns doesn't corespond on line 3 in dataset.person.csv]"))); } } + + @Test(groups = "dataset", dependsOnMethods = {"loadDataset"}) + public void getProjectsUploadsInfo() throws Exception { + final ProjectUploadsInfo projectUploadsInfo = gd.getDatasetService().getProjectUploadsInfo(project); + + assertThat(projectUploadsInfo, notNullValue()); + assertTrue(projectUploadsInfo.hasDataset("dataset.person")); + assertThat(projectUploadsInfo.getDatasetUploadsInfo("dataset.person").getLastUpload(), notNullValue()); + } + + @Test(groups = "dataset", dependsOnMethods = {"getProjectsUploadsInfo"}) + public void listUploadsForDataset() throws Exception { + final DatasetService datasetService = gd.getDatasetService(); + + final DatasetUploadsInfo datasetUploadsInfo = + datasetService.getProjectUploadsInfo(project).getDatasetUploadsInfo("dataset.person"); + final Collection uploads = datasetService.listUploadsForDataset(datasetUploadsInfo); + + assertThat(uploads, notNullValue()); + assertFalse(uploads.isEmpty()); + } + + @Test(groups = "dataset", dependsOnMethods = {"getProjectsUploadsInfo"}) + public void listUploadsForDatasetId() throws Exception { + final Collection uploads = gd.getDatasetService().listUploadsForDataset(project, "dataset.person"); + + assertThat(uploads, notNullValue()); + assertFalse(uploads.isEmpty()); + } + + @Test(groups = "dataset", dependsOnMethods = {"loadDataset", "loadDatasetFail"}) + public void getUploadStatistics() throws Exception { + final UploadStatistics uploadStatistics = gd.getDatasetService().getUploadStatistics(project); + + assertThat(uploadStatistics, notNullValue()); + assertThat(uploadStatistics.getUploadsCount("OK"), greaterThan(0)); + assertThat(uploadStatistics.getUploadsCount("ERROR"), greaterThan(0)); + } } diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index 1b6b9d7af..e1e6e3cb1 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -20,6 +20,9 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.startsWith; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; public class DatasetServiceIT extends AbstractGoodDataIT { @@ -250,4 +253,71 @@ public void shouldFailUpdateProjectData() throws IOException { gd.getDatasetService().updateProjectData(project, DML_MAQL).get(); } + + @Test + public void shouldGetProjectUploadsInfo() { + onRequest() + .havingPathEqualTo("/gdc/md/PROJECT_ID/data/sets") + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/uploads/data-sets.json")); + + final ProjectUploadsInfo projectUploadsInfo = gd.getDatasetService().getProjectUploadsInfo(project); + + assertThat(projectUploadsInfo, notNullValue()); + assertTrue(projectUploadsInfo.hasDataset("dataset.campaign")); + } + + @Test + public void shouldListUploadsForDataset() { + final String datasetUploadsUri = "/gdc/md/PROJECT_ID/uploads/DATASET_ID"; + + onRequest() + .havingPathEqualTo(datasetUploadsUri) + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/uploads/uploads.json")); + + final DatasetUploadsInfo info = mock(DatasetUploadsInfo.class); + when(info.getUploadsUri()).thenReturn(datasetUploadsUri); + + final Collection uploads = gd.getDatasetService().listUploadsForDataset(info); + + assertThat(uploads, notNullValue()); + assertThat(uploads, hasSize(2)); + } + + @Test + public void shouldListUploadsForDatasetId() throws Exception { + onRequest() + .havingPathEqualTo("/gdc/md/PROJECT_ID/data/sets") + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/uploads/data-sets.json")); + + onRequest() + .havingPathEqualTo("/gdc/md/PROJECT_ID/data/uploads/814") + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/uploads/uploads.json")); + + final Collection uploads = gd.getDatasetService().listUploadsForDataset(project, "dataset.campaign"); + + assertThat(uploads, notNullValue()); + assertThat(uploads, hasSize(2)); + } + + @Test + public void shouldGetUploadStatistics() throws Exception { + onRequest() + .havingPathEqualTo("/gdc/md/PROJECT_ID/data/uploads_info") + .respond() + .withStatus(200) + .withBody(readFromResource("/dataset/uploads/data-uploads-info.json")); + + final UploadStatistics uploadStatistics = gd.getDatasetService().getUploadStatistics(project); + + assertThat(uploadStatistics, notNullValue()); + assertThat(uploadStatistics.getUploadsCount("OK"), is(845)); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java index f09a0754a..64adbb8d3 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java @@ -8,6 +8,7 @@ import com.gooddata.gdc.DataStoreException; import com.gooddata.gdc.DataStoreService; import com.gooddata.project.Project; +import org.hamcrest.Matchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.web.client.RestClientException; @@ -18,7 +19,7 @@ import java.io.InputStream; import java.util.Collection; -import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; @@ -48,6 +49,7 @@ public class DatasetServiceTest { private InputStream stream; private DatasetService service; + private static final String DATASET_UPLOADS_URI = "uploads/uri"; @BeforeMethod public void setUp() throws Exception { @@ -166,10 +168,66 @@ public void testListDatasetsWithRestClientError() throws Exception { public void testListDatasetsWithEmptyResponse() throws Exception { final Datasets datasets = mock(Datasets.class); when(restTemplate.getForObject(Datasets.URI, Datasets.class, PROJECT_ID)).thenReturn(datasets); - when(datasets.getLinks()).thenReturn(asList(dataset)); + when(datasets.getLinks()).thenReturn(singletonList(dataset)); final Collection result = service.listDatasets(project); assertThat(result, hasSize(1)); assertThat(result, contains(dataset)); } + + @Test(expectedExceptions = GoodDataException.class) + public void testGetProjectsUploadsInfoWithRestClientError() throws Exception { + when(restTemplate.getForObject(ProjectUploadsInfo.URI, ProjectUploadsInfo.class, PROJECT_ID)) + .thenThrow(new RestClientException("")); + service.getProjectUploadsInfo(project); + } + + @Test(expectedExceptions = GoodDataException.class) + public void testListUploadsForDatasetWhenMissingUploadsUri() throws Exception { + final DatasetUploadsInfo uploadsInfo = mockDatasetUploadsInfo(null); + + service.listUploadsForDataset(uploadsInfo); + } + + @Test(expectedExceptions = GoodDataException.class) + public void testListUploadsForDatasetWhenRestClientError() throws Exception { + final DatasetUploadsInfo uploadsInfo = mockDatasetUploadsInfo(DATASET_UPLOADS_URI); + + when(restTemplate.getForObject(DATASET_UPLOADS_URI, Uploads.class)).thenThrow(new RestClientException("")); + + service.listUploadsForDataset(uploadsInfo); + } + + @Test(expectedExceptions = GoodDataException.class) + public void testListUploadsForDatasetWithNoResponse() throws Exception { + final DatasetUploadsInfo uploadsInfo = mockDatasetUploadsInfo(DATASET_UPLOADS_URI); + + when(restTemplate.getForObject(DATASET_UPLOADS_URI, Uploads.class)).thenReturn(null); + + service.listUploadsForDataset(uploadsInfo); + } + + @Test + public void testListUploadsForDatasetWithEmptyResponseBody() throws Exception { + final DatasetUploadsInfo datasetUploadsInfo = mockDatasetUploadsInfo(DATASET_UPLOADS_URI); + + when(restTemplate.getForObject(DATASET_UPLOADS_URI, Uploads.class)).thenReturn(new Uploads(null)); + + assertThat(service.listUploadsForDataset(datasetUploadsInfo), Matchers.empty()); + } + + @Test(expectedExceptions = GoodDataException.class) + public void testGetUploadStatisticsWhenRestClientError() throws Exception { + when(restTemplate.getForObject(UploadStatistics.URI, UploadStatistics.class, PROJECT_ID)) + .thenThrow(new RestClientException("")); + + service.getUploadStatistics(project); + } + + private DatasetUploadsInfo mockDatasetUploadsInfo(String uploadsUri) { + final DatasetUploadsInfo uploadsInfo = mock(DatasetUploadsInfo.class); + when(uploadsInfo.getUploadsUri()).thenReturn(uploadsUri); + + return uploadsInfo; + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/ProjectUploadsInfoTest.java b/src/test/java/com/gooddata/dataset/ProjectUploadsInfoTest.java new file mode 100644 index 000000000..d1d3a919d --- /dev/null +++ b/src/test/java/com/gooddata/dataset/ProjectUploadsInfoTest.java @@ -0,0 +1,56 @@ +package com.gooddata.dataset; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.closeTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.testng.Assert.assertTrue; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.testng.annotations.Test; + +import java.io.InputStream; +import java.util.Collections; + +public class ProjectUploadsInfoTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-sets.json"); + final ProjectUploadsInfo projectUploadsInfo = new ObjectMapper().readValue(input, ProjectUploadsInfo.class); + + assertThat(projectUploadsInfo, notNullValue()); + assertTrue(projectUploadsInfo.hasDataset("dataset.campaign"), + "ProjectUploadsInfo must contain dataset with id: 'dataset.campaign'."); + + final DatasetUploadsInfo dataset = projectUploadsInfo.getDatasetUploadsInfo("dataset.campaign"); + + assertThat(dataset, notNullValue()); + + assertThat(dataset.getDatasetId(), is("dataset.campaign")); + assertThat(dataset.getDatasetUri(), is("/gdc/md/PROJECT_ID/obj/814")); + assertThat(dataset.getDatasetTitle(), is("Campaign")); + assertThat(dataset.getDatasetAuthor(), is("/gdc/account/profile/1")); + assertThat(dataset.getDatasetCreated(), is(new DateTime(2010, 11, 23, 10, 37, 54, DateTimeZone.UTC))); + assertThat(dataset.getDatasetSummary(), + is("Information about Medium, Campaign, Keyword, Ad Slot, Source and Referral Path")); + + assertThat(dataset.getUploadsUri(), is("/gdc/md/PROJECT_ID/data/uploads/814")); + assertThat(dataset.getLastSuccess(), is(new DateTime(2011, 9, 12, 13, 36, 27, DateTimeZone.UTC))); + + final Upload lastUpload = dataset.getLastUpload(); + assertThat(lastUpload, notNullValue()); + assertThat(lastUpload.getUri(), is("/gdc/md/PROJECT_ID/data/upload/1076")); + assertThat(lastUpload.getStatus(), is("WARNING")); + assertThat(lastUpload.getProgress(), closeTo(1, 0.0001)); + assertThat(lastUpload.getMessage(), is("1 of 7 parts went with warnings")); + assertThat(lastUpload.getCreatedAt(), is(new DateTime(2011, 10, 4, 10, 35, 5, DateTimeZone.UTC))); + } + + @Test(expectedExceptions = DatasetNotFoundException.class) + public void getDatasetUploadInfoFails() throws Exception { + new ProjectUploadsInfo(Collections.emptyList()).getDatasetUploadsInfo("dataset.non_existing_one"); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java new file mode 100644 index 000000000..27638562b --- /dev/null +++ b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java @@ -0,0 +1,26 @@ +package com.gooddata.dataset; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class UploadStatisticsTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-uploads-info.json"); + final UploadStatistics uploadStatistics = new ObjectMapper().readValue(input, UploadStatistics.class); + + assertThat(uploadStatistics, notNullValue()); + + assertThat(uploadStatistics.getUploadsCount("OK"), is(845)); + assertThat(uploadStatistics.getUploadsCount("ERROR"), is(25)); + assertThat(uploadStatistics.getUploadsCount("RUNNING"), is(1)); + assertThat(uploadStatistics.getUploadsCount("NOT_DEFINED"), is(0)); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/UploadTest.java b/src/test/java/com/gooddata/dataset/UploadTest.java new file mode 100644 index 000000000..6aac22e12 --- /dev/null +++ b/src/test/java/com/gooddata/dataset/UploadTest.java @@ -0,0 +1,32 @@ +package com.gooddata.dataset; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.closeTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class UploadTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/upload.json"); + final Upload upload = new ObjectMapper().readValue(input, Upload.class); + + assertThat(upload, notNullValue()); + assertThat(upload.getMessage(), is("some upload message")); + assertThat(upload.getProgress(), closeTo(1, 0.0001)); + assertThat(upload.getStatus(), is("OK")); + assertThat(upload.getUploadMode(), is(UploadMode.INCREMENTAL)); + assertThat(upload.getUri(), is("/gdc/md/project/data/upload/123")); + assertThat(upload.getCreatedAt(), is(new DateTime(2016, 4, 8, 12, 55, 21, DateTimeZone.UTC))); + assertThat(upload.getSize(), is(130501)); + assertThat(upload.getProcessedAt(), is(new DateTime(2016, 4, 8, 12, 55, 25, DateTimeZone.UTC))); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/UploadsTest.java b/src/test/java/com/gooddata/dataset/UploadsTest.java new file mode 100644 index 000000000..41904c24c --- /dev/null +++ b/src/test/java/com/gooddata/dataset/UploadsTest.java @@ -0,0 +1,25 @@ +package com.gooddata.dataset; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.hamcrest.Matchers; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class UploadsTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/uploads.json"); + final Uploads uploads = new ObjectMapper().readValue(input, Uploads.class); + + assertThat(uploads, notNullValue()); + assertThat(uploads.items(), not(Matchers.empty())); + assertThat(uploads.items().size(), is(2)); + } +} diff --git a/src/test/resources/dataset/uploads/data-sets.json b/src/test/resources/dataset/uploads/data-sets.json new file mode 100644 index 000000000..57be8d019 --- /dev/null +++ b/src/test/resources/dataset/uploads/data-sets.json @@ -0,0 +1,54 @@ +{ + "dataSetsInfo": { + "sets": [ + { + "etlInterface": "/etl/interface/uri/123", + "lastUpload": { + "dataUploadShort": { + "msg": "1 of 7 parts went with warnings", + "date": "2011-10-04 10:35:05", + "progress": "1.000", + "status": "WARNING", + "uri": "/gdc/md/PROJECT_ID/data/upload/1076" + } + }, + "lastSuccess": "2011-09-12 13:36:27", + "dataUploads": "/gdc/md/PROJECT_ID/data/uploads/814", + "meta": { + "author": "/gdc/account/profile/1", + "uri": "/gdc/md/PROJECT_ID/obj/814", + "tags": "", + "created": "2010-11-23 10:37:54", + "identifier": "dataset.campaign", + "deprecated": "0", + "summary": "Information about Medium, Campaign, Keyword, Ad Slot, Source and Referral Path", + "title": "Campaign", + "category": "dataSet", + "updated": "2010-11-23 10:58:02", + "contributor": "/gdc/account/profile/1" + }, + "uploadConfiguration": "/configuration" + }, + { + "etlInterface": null, + "lastUpload": null, + "lastSuccess": null, + "dataUploads": "/gdc/md/PROJECT_ID/data/uploads/356", + "meta": { + "author": "/gdc/account/profile/1", + "uri": "/gdc/md/PROJECT_ID/obj/356", + "tags": "", + "created": "2010-11-23 10:36:22", + "identifier": "dataset.os", + "deprecated": "0", + "summary": "Information about OS, OS version, Screen Colors and Screen Resolution", + "title": "OS", + "category": "dataSet", + "updated": "2010-11-23 10:57:59", + "contributor": "/gdc/account/profile/1" + } + } + ], + "links": {} + } +} \ No newline at end of file diff --git a/src/test/resources/dataset/uploads/data-uploads-info.json b/src/test/resources/dataset/uploads/data-uploads-info.json new file mode 100644 index 000000000..a6783bfab --- /dev/null +++ b/src/test/resources/dataset/uploads/data-uploads-info.json @@ -0,0 +1,9 @@ +{ + "dataUploadsInfo" : { + "statusesCount" : { + "OK" : 845, + "RUNNING" : 1, + "ERROR" : 25 + } + } +} \ No newline at end of file diff --git a/src/test/resources/dataset/uploads/upload.json b/src/test/resources/dataset/uploads/upload.json new file mode 100644 index 000000000..a88d4b1dd --- /dev/null +++ b/src/test/resources/dataset/uploads/upload.json @@ -0,0 +1,14 @@ +{ + "dataUpload" : { + "msg" : "some upload message", + "etlInterface" : "/gdc/md/project/obj/123", + "progress" : "1.000", + "status" : "OK", + "file" : "upload_info.json", + "fullUpload" : 0, + "uri" : "/gdc/md/project/data/upload/123", + "createdAt" : "2016-04-08 12:55:21", + "fileSize" : 130501, + "processedAt" : "2016-04-08 12:55:25" + } +} \ No newline at end of file diff --git a/src/test/resources/dataset/uploads/uploads.json b/src/test/resources/dataset/uploads/uploads.json new file mode 100644 index 000000000..546ca4419 --- /dev/null +++ b/src/test/resources/dataset/uploads/uploads.json @@ -0,0 +1,34 @@ +{ + "dataUploads" : { + "uploads" : [ + { + "dataUpload" : { + "msg" : "some upload message 1", + "etlInterface" : "/gdc/md/project/obj/123", + "progress" : "0.500", + "status" : "RUNNING", + "file" : "upload_info.json", + "fullUpload" : 0, + "uri" : "/gdc/md/project/data/upload/234", + "createdAt" : "2016-04-08 13:55:21", + "fileSize" : 131501, + "processedAt" : "2016-04-08 13:55:25" + } + }, + { + "dataUpload" : { + "msg" : "some upload message", + "etlInterface" : "/gdc/md/project/obj/123", + "progress" : "1.000", + "status" : "OK", + "file" : "upload_info.json", + "fullUpload" : 0, + "uri" : "/gdc/md/project/data/upload/123", + "createdAt" : "2016-04-08 12:55:21", + "fileSize" : 130501, + "processedAt" : "2016-04-08 12:55:25" + } + } + ] + } +} \ No newline at end of file From 5181444afdaf319eb9a207da9f637eca666788cd Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 13 Apr 2016 23:25:00 +0200 Subject: [PATCH 117/934] Use DatasetLinks instead of confusing Datasets --- .../com/gooddata/dataset/DatasetLinks.java | 25 +++++++++++ .../java/com/gooddata/dataset/Datasets.java | 6 +-- .../gooddata/dataset/DatasetLinksTest.java | 41 +++++++++++++++++++ .../gooddata/dataset/DatasetServiceIT.java | 4 +- .../com/gooddata/dataset/DatasetsTest.java | 2 +- .../{datasets.json => datasetLinks.json} | 0 6 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/gooddata/dataset/DatasetLinks.java create mode 100644 src/test/java/com/gooddata/dataset/DatasetLinksTest.java rename src/test/resources/dataset/{datasets.json => datasetLinks.json} (100%) diff --git a/src/main/java/com/gooddata/dataset/DatasetLinks.java b/src/main/java/com/gooddata/dataset/DatasetLinks.java new file mode 100644 index 000000000..0b380de0d --- /dev/null +++ b/src/main/java/com/gooddata/dataset/DatasetLinks.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.dataset; + +import com.fasterxml.jackson.annotation.*; +import com.gooddata.gdc.AboutLinks; + +import java.util.List; + +/** + * Dataset links. + * Deserialization only. + */ +class DatasetLinks extends AboutLinks { + + public static final String URI = "/gdc/md/{project}/ldm/singleloadinterface"; + + @JsonCreator + public DatasetLinks(@JsonProperty("category") String category, @JsonProperty("summary") String summary, + @JsonProperty("links") List links) { + super(category, summary, null, links); + } + +} diff --git a/src/main/java/com/gooddata/dataset/Datasets.java b/src/main/java/com/gooddata/dataset/Datasets.java index 126ac8f62..e3ec2f65e 100644 --- a/src/main/java/com/gooddata/dataset/Datasets.java +++ b/src/main/java/com/gooddata/dataset/Datasets.java @@ -10,11 +10,9 @@ /** * Dataset links + * @deprecated use {@link DatasetLinks} instead. */ -@JsonTypeName("about") -@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonIgnoreProperties(ignoreUnknown = true) -@JsonInclude(JsonInclude.Include.NON_NULL) +@Deprecated class Datasets extends AboutLinks { public static final String URI = "/gdc/md/{project}/ldm/singleloadinterface"; diff --git a/src/test/java/com/gooddata/dataset/DatasetLinksTest.java b/src/test/java/com/gooddata/dataset/DatasetLinksTest.java new file mode 100644 index 000000000..5fef2ac3d --- /dev/null +++ b/src/test/java/com/gooddata/dataset/DatasetLinksTest.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.dataset; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.gdc.AboutLinks; +import org.testng.annotations.Test; + +import java.io.InputStream; +import java.util.Collection; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; + +public class DatasetLinksTest { + + @Test + public void deserialize() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataset/datasetLinks.json"); + final DatasetLinks datasetLinks = new ObjectMapper().readValue(stream, DatasetLinks.class); + assertThat(datasetLinks, is(notNullValue())); + assertThat(datasetLinks.getCategory(), is("singleloadinterface")); + assertThat(datasetLinks.getInstance(), is("MD::LDM::SingleLoadInterface")); + assertThat(datasetLinks.getSummary(), is("single loading interfaces")); + + final Collection links = datasetLinks.getLinks(); + assertThat(links, is(notNullValue())); + assertThat(links, hasSize(1)); + + final AboutLinks.Link link = links.iterator().next(); + assertThat(link, is(notNullValue())); + assertThat(link.getIdentifier(), is("dataset.person")); + assertThat(link.getUri(), is("/gdc/md/PROJECT_ID/ldm/singleloadinterface/dataset.person")); + assertThat(link.getCategory(), is("dataset-singleloadinterface")); + assertThat(link.getTitle(), is("Person")); + assertThat(link.getSummary(), is("dataset single data loading interface specifications")); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index 7609f187b..dbc4d8e07 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -138,7 +138,7 @@ public void shouldListDatasets() throws Exception { .havingMethodEqualTo("GET") .havingPathEqualTo("/gdc/md/PROJECT_ID/ldm/singleloadinterface") .respond() - .withBody(readFromResource("/dataset/datasets.json")) + .withBody(readFromResource("/dataset/datasetLinks.json")) ; final Collection datasets = gd.getDatasetService().listDatasets(project); @@ -153,7 +153,7 @@ public void shouldListDatasetLinks() throws Exception { .havingMethodEqualTo("GET") .havingPathEqualTo("/gdc/md/PROJECT_ID/ldm/singleloadinterface") .respond() - .withBody(readFromResource("/dataset/datasets.json")) + .withBody(readFromResource("/dataset/datasetLinks.json")) ; final Collection datasets = gd.getDatasetService().listDatasetLinks(project); diff --git a/src/test/java/com/gooddata/dataset/DatasetsTest.java b/src/test/java/com/gooddata/dataset/DatasetsTest.java index cfb2bdda7..2a53d9d6d 100644 --- a/src/test/java/com/gooddata/dataset/DatasetsTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetsTest.java @@ -16,7 +16,7 @@ public class DatasetsTest { @Test public void deserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/datasets.json"); + final InputStream stream = getClass().getResourceAsStream("/dataset/datasetLinks.json"); final Datasets datasets = new ObjectMapper().readValue(stream, Datasets.class); assertThat(datasets, is(notNullValue())); assertThat(datasets.getCategory(), is("singleloadinterface")); diff --git a/src/test/resources/dataset/datasets.json b/src/test/resources/dataset/datasetLinks.json similarity index 100% rename from src/test/resources/dataset/datasets.json rename to src/test/resources/dataset/datasetLinks.json From bfefb7d0ff7bfd9ea9ab3d5846bc4412d113ddbd Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 14 Apr 2016 09:08:07 +0200 Subject: [PATCH 118/934] Use RootLinks instead of confusing Gdc --- .../com/gooddata/gdc/DataStoreService.java | 2 +- src/main/java/com/gooddata/gdc/Gdc.java | 216 +-------------- .../java/com/gooddata/gdc/GdcService.java | 15 ++ src/main/java/com/gooddata/gdc/RootLinks.java | 253 ++++++++++++++++++ .../java/com/gooddata/gdc/GdcServiceIT.java | 28 ++ .../java/com/gooddata/gdc/RootLinksTest.java | 37 +++ 6 files changed, 338 insertions(+), 213 deletions(-) create mode 100644 src/main/java/com/gooddata/gdc/RootLinks.java create mode 100644 src/test/java/com/gooddata/gdc/RootLinksTest.java diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index f5842a5ee..7788a3426 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -69,7 +69,7 @@ public DataStoreService(HttpClient httpClient, RestTemplate restTemplate, GdcSer private UriPrefixer getPrefixer() { if (prefixer == null) { - final String uriString = gdcService.getGdc().getUserStagingLink(); + final String uriString = gdcService.getRootLinks().getUserStagingLink(); final URI uri = URI.create(uriString); prefixer = new UriPrefixer(uri.isAbsolute() ? uri : gdcUri.resolve(uriString)); sardine.enablePreemptiveAuthentication(prefixer.getUriPrefix().getHost()); diff --git a/src/main/java/com/gooddata/gdc/Gdc.java b/src/main/java/com/gooddata/gdc/Gdc.java index 3f83476fd..7dad58440 100644 --- a/src/main/java/com/gooddata/gdc/Gdc.java +++ b/src/main/java/com/gooddata/gdc/Gdc.java @@ -17,8 +17,10 @@ /** * GoodData API root links (aka "about" or "home"). * Deserialization only. + * @deprecated use {@link RootLinks} instead */ -public class Gdc extends AboutLinks { +@Deprecated +public class Gdc extends RootLinks { /** * URI of GoodData API root @@ -27,217 +29,7 @@ public class Gdc extends AboutLinks { @JsonCreator public Gdc(@JsonProperty("links") List links) { - super(null, null, null, links); - } - - /** - * Get GoodData API root link - * - * @return GoodData API root link - */ - @JsonIgnore - public String getHomeLink() { - return getLink(LinkCategory.HOME).getUri(); - } - - /** - * Get temporary token generator link - * - * @return temporary token generator link - */ - @JsonIgnore - public String getTokenLink() { - return getLink(LinkCategory.TOKEN).getUri(); - } - - /** - * Get authentication service link - * - * @return authentication service link - */ - @JsonIgnore - public String getLoginLink() { - return getLink(LinkCategory.LOGIN).getUri(); - } - - /** - * Get metadata resources link - * - * @return metadata resources link - */ - @JsonIgnore - public String getMetadataLink() { - return getLink(LinkCategory.METADATA).getUri(); - } - - /** - * Get report execution resource link - * - * @return report execution resource link - */ - @JsonIgnore - public String getXTabLink() { - return getLink(LinkCategory.XTAB).getUri(); - } - - /** - * Get link of resource used to determine valid attribute values in the context of a report - * - * @return link of resource used to determine valid attribute values in the context of a report - */ - @JsonIgnore - public String getAvailableElementsLink() { - return getLink(LinkCategory.AVAILABLE_ELEMENTS).getUri(); - } - - /** - * Get report exporting resource link - * - * @return report exporting resource link - */ - @JsonIgnore - public String getReportExporterLink() { - return getLink(LinkCategory.REPORT_EXPORTER).getUri(); - } - - /** - * Get account manipulation resource link - * - * @return account manipulation resource link - */ - @JsonIgnore - public String getAccountLink() { - return getLink(LinkCategory.ACCOUNT).getUri(); - } - - /** - * Get user and project management resource link - * - * @return user and project management resource link - */ - @JsonIgnore - public String getProjectsLink() { - return getLink(LinkCategory.PROJECTS).getUri(); - } - - /** - * Get miscellaneous tool resource link - * - * @return miscellaneous tool resource link - */ - @JsonIgnore - public String getToolLink() { - return getLink(LinkCategory.TOOL).getUri(); - } - - /** - * Get template resource link - * - * @return template resource link - */ - @JsonIgnore - public String getTemplatesLink() { - return getLink(LinkCategory.TEMPLATES).getUri(); - } - - /** - * Get release information link - * - * @return release information link - */ - @JsonIgnore - public String getReleaseInfoLink() { - return getLink(LinkCategory.RELEASE_INFO).getUri(); - } - - /** - * Get user data staging area link - * - * @return user data staging area link - */ - @JsonIgnore - public String getUserStagingLink() { - return getLink(LinkCategory.USER_STAGING).getUri(); - } - - /** - * Get link by category - * - * @param category requested link category - * @return link by given category - */ - @JsonIgnore - private Link getLink(LinkCategory category) { - for (Link link : getLinks()) { - if (category.value.equals(link.getCategory())) { - return link; - } - } - return null; - } - - /** - * GoodData API root link category enum - */ - private enum LinkCategory { - /** - * GoodData API root - */ - HOME("home"), - /** - * Temporary token generator - */ - TOKEN("token"), - /** - * Authentication service - */ - LOGIN("login"), - /** - * Metadata resources - */ - METADATA("md"), - /** - * Report execution resource - */ - XTAB("xtab"), - /** - * Resource used to determine valid attribute values in the context of a report - */ - AVAILABLE_ELEMENTS("availablelements"), - /** - * Report exporting resource - */ - REPORT_EXPORTER("report-exporter"), - /** - * Resource for logged in account manipulation - */ - ACCOUNT("account"), - /** - * Resource for user and project management - */ - PROJECTS("projects"), - /** - * Miscellaneous resources - */ - TOOL("tool"), - /** - * Template resource - for internal use only - */ - TEMPLATES("templates"), - /** - * Release information - */ - RELEASE_INFO("releaseInfo"), - /** - * User data staging area - */ - USER_STAGING("uploads"); - - private final String value; - - LinkCategory(final String value) { - this.value = value; - } + super(links); } } \ No newline at end of file diff --git a/src/main/java/com/gooddata/gdc/GdcService.java b/src/main/java/com/gooddata/gdc/GdcService.java index e256c90d4..2b8100a21 100644 --- a/src/main/java/com/gooddata/gdc/GdcService.java +++ b/src/main/java/com/gooddata/gdc/GdcService.java @@ -21,7 +21,9 @@ public GdcService(RestTemplate restTemplate) { * Obtains GoodData API root links. * * @return GoodData API root links + * @deprecated use {@link #getRootLinks()} instead */ + @Deprecated public Gdc getGdc() { try { return restTemplate.getForObject(Gdc.URI, Gdc.class); @@ -30,4 +32,17 @@ public Gdc getGdc() { } } + /** + * Obtains GoodData API root links. + * + * @return GoodData API root links + */ + public RootLinks getRootLinks() { + try { + return restTemplate.getForObject(RootLinks.URI, RootLinks.class); + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to get gdc root links", e); + } + } + } diff --git a/src/main/java/com/gooddata/gdc/RootLinks.java b/src/main/java/com/gooddata/gdc/RootLinks.java new file mode 100644 index 000000000..32374e6b9 --- /dev/null +++ b/src/main/java/com/gooddata/gdc/RootLinks.java @@ -0,0 +1,253 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.gdc; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.GoodDataException; + +import java.util.List; + +/** + * GoodData API root links (aka "about" or "home"). + * Deserialization only. + */ +public class RootLinks extends AboutLinks { + + /** + * URI of GoodData API root + */ + public static final String URI = "/gdc"; + + @JsonCreator + public RootLinks(@JsonProperty("links") List links) { + super(null, null, null, links); + } + + /** + * Get GoodData API root link + * + * @return GoodData API root link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getHomeLink() { + return getLink(LinkCategory.HOME).getUri(); + } + + /** + * Get temporary token generator link + * + * @return temporary token generator link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getTokenLink() { + return getLink(LinkCategory.TOKEN).getUri(); + } + + /** + * Get authentication service link + * + * @return authentication service link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getLoginLink() { + return getLink(LinkCategory.LOGIN).getUri(); + } + + /** + * Get metadata resources link + * + * @return metadata resources link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getMetadataLink() { + return getLink(LinkCategory.METADATA).getUri(); + } + + /** + * Get report execution resource link + * + * @return report execution resource link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getXTabLink() { + return getLink(LinkCategory.XTAB).getUri(); + } + + /** + * Get link of resource used to determine valid attribute values in the context of a report + * + * @return link of resource used to determine valid attribute values in the context of a report + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getAvailableElementsLink() { + return getLink(LinkCategory.AVAILABLE_ELEMENTS).getUri(); + } + + /** + * Get report exporting resource link + * + * @return report exporting resource link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getReportExporterLink() { + return getLink(LinkCategory.REPORT_EXPORTER).getUri(); + } + + /** + * Get account manipulation resource link + * + * @return account manipulation resource link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getAccountLink() { + return getLink(LinkCategory.ACCOUNT).getUri(); + } + + /** + * Get user and project management resource link + * + * @return user and project management resource link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getProjectsLink() { + return getLink(LinkCategory.PROJECTS).getUri(); + } + + /** + * Get miscellaneous tool resource link + * + * @return miscellaneous tool resource link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getToolLink() { + return getLink(LinkCategory.TOOL).getUri(); + } + + /** + * Get template resource link + * + * @return template resource link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getTemplatesLink() { + return getLink(LinkCategory.TEMPLATES).getUri(); + } + + /** + * Get release information link + * + * @return release information link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getReleaseInfoLink() { + return getLink(LinkCategory.RELEASE_INFO).getUri(); + } + + /** + * Get user data staging area link + * + * @return user data staging area link + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getUserStagingLink() { + return getLink(LinkCategory.USER_STAGING).getUri(); + } + + /** + * Get link by category + * + * @param category requested link category + * @return link by given category + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + private Link getLink(LinkCategory category) { + for (Link link : getLinks()) { + if (category.value.equals(link.getCategory())) { + return link; + } + } + throw new GoodDataException("No link with such category found"); + } + + /** + * GoodData API root link category enum + */ + private enum LinkCategory { + /** + * GoodData API root + */ + HOME("home"), + /** + * Temporary token generator + */ + TOKEN("token"), + /** + * Authentication service + */ + LOGIN("login"), + /** + * Metadata resources + */ + METADATA("md"), + /** + * Report execution resource + */ + XTAB("xtab"), + /** + * Resource used to determine valid attribute values in the context of a report + */ + AVAILABLE_ELEMENTS("availablelements"), + /** + * Report exporting resource + */ + REPORT_EXPORTER("report-exporter"), + /** + * Resource for logged in account manipulation + */ + ACCOUNT("account"), + /** + * Resource for user and project management + */ + PROJECTS("projects"), + /** + * Miscellaneous resources + */ + TOOL("tool"), + /** + * Template resource - for internal use only + */ + TEMPLATES("templates"), + /** + * Release information + */ + RELEASE_INFO("releaseInfo"), + /** + * User data staging area + */ + USER_STAGING("uploads"); + + private final String value; + + LinkCategory(final String value) { + this.value = value; + } + } + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/gdc/GdcServiceIT.java b/src/test/java/com/gooddata/gdc/GdcServiceIT.java index 9172c9e1f..d1f829363 100644 --- a/src/test/java/com/gooddata/gdc/GdcServiceIT.java +++ b/src/test/java/com/gooddata/gdc/GdcServiceIT.java @@ -39,4 +39,32 @@ public void shouldUseProperVersionHeader() throws Exception { final Gdc gdc = gd.getGdcService().getGdc(); assertThat(gdc, is(notNullValue())); } + + @Test + public void shouldReturnRootLinks() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc") + .respond() + .withBody(readFromResource("/gdc/gdc.json")) + .withStatus(200); + + final RootLinks rootLinks = gd.getGdcService().getRootLinks(); + assertThat(rootLinks, is(notNullValue())); + assertThat(rootLinks.getUserStagingLink(), is("/uploads")); + } + + @Test + public void rootLinksShouldUseProperVersionHeader() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo("/gdc") + .havingHeaderEqualTo("Accept", "application/json;version=1") + .respond() + .withBody(readFromResource("/gdc/gdc.json")) + .withStatus(200); + + final RootLinks rootLinks = gd.getGdcService().getRootLinks(); + assertThat(rootLinks, is(notNullValue())); + } } diff --git a/src/test/java/com/gooddata/gdc/RootLinksTest.java b/src/test/java/com/gooddata/gdc/RootLinksTest.java new file mode 100644 index 000000000..59ec65d9b --- /dev/null +++ b/src/test/java/com/gooddata/gdc/RootLinksTest.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.gdc; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +public class RootLinksTest { + + @Test + public void deserialize() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/gdc/gdc.json"); + final RootLinks rootLinks = new ObjectMapper().readValue(stream, RootLinks.class); + assertThat(rootLinks, is(notNullValue())); + + assertThat(rootLinks.getHomeLink(), is("/gdc/")); + assertThat(rootLinks.getTokenLink(), is("/gdc/account/token")); + assertThat(rootLinks.getLoginLink(), is("/gdc/account/login")); + assertThat(rootLinks.getMetadataLink(), is("/gdc/md")); + assertThat(rootLinks.getXTabLink(), is("/gdc/xtab2")); + assertThat(rootLinks.getAvailableElementsLink(), is("/gdc/availableelements")); + assertThat(rootLinks.getReportExporterLink(), is("/gdc/exporter")); + assertThat(rootLinks.getAccountLink(), is("/gdc/account")); + assertThat(rootLinks.getProjectsLink(), is("/gdc/projects")); + assertThat(rootLinks.getToolLink(), is("/gdc/tool")); + assertThat(rootLinks.getTemplatesLink(), is("/gdc/templates")); + assertThat(rootLinks.getReleaseInfoLink(), is("/gdc/releaseInfo")); + assertThat(rootLinks.getUserStagingLink(), is("/uploads")); + } +} \ No newline at end of file From 2b8a884488eb5afd91f88163508a9b8f0542bb46 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 29 Jul 2016 18:21:50 +0200 Subject: [PATCH 119/934] Set DefaultSocketConfig with socket timeout Currently we use only RequestConfig, which is applied after the connection is establish. However in certain situations (i.e. when connected throughout proxy) connecting include making requests, in such situations defaultSocketConfig on ConnectionManager is used. --- src/main/java/com/gooddata/GoodData.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 5bd4173d8..bc952736d 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -24,6 +24,7 @@ import org.apache.http.HttpHost; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; +import org.apache.http.config.SocketConfig; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.VersionInfo; @@ -210,6 +211,10 @@ private HttpClientBuilder createHttpClientBuilder(final GoodDataSettings setting connectionManager.setDefaultMaxPerRoute(settings.getMaxConnections()); connectionManager.setMaxTotal(settings.getMaxConnections()); + final SocketConfig.Builder socketConfig = SocketConfig.copy(SocketConfig.DEFAULT); + socketConfig.setSoTimeout(settings.getSocketTimeout()); + connectionManager.setDefaultSocketConfig(socketConfig.build()); + final RequestConfig.Builder requestConfig = RequestConfig.copy(RequestConfig.DEFAULT); requestConfig.setConnectTimeout(settings.getConnectionTimeout()); requestConfig.setConnectionRequestTimeout(settings.getConnectionRequestTimeout()); From 397b58a7bc3eab4d1b87eba1a3795ec506473ce2 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 11 Mar 2016 20:11:22 +0100 Subject: [PATCH 120/934] Add URI vs. Link naming description --- CONTRIBUTING.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 03e7cf3d1..8678e8ac4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,7 +18,7 @@ Below are few **rules, recommendations and best practices** we try to follow whe ### DTOs * All DTOs which can be updated should be **mutable**. Please keep mutable only the fields which are subject of change, the rest should be immutable. -* Create method named `String getUri()` to provide **link to self**. +* Create method named `String getUri()` to provide **URI string to self**. * Introduce **constants**: ```java public static final String URI = "/gdc/someresource/{resource-id}"; @@ -28,6 +28,10 @@ public static final UriTemplate TEMPLATE = new UriTemplate(URI); * Consider the **visibility** - use `package protected` when DTO is not intended for SDK user, but is needed in related service. * Test all DTOs using _[JsonUnit](https://github.com/lukas-krecan/JsonUnit)_. +* **Naming**: + * `Uri` for _URI string_ of some resource + * `Link` for structure containing at least _category_ (e.g. "self") and _URI string_ + (can contain also others like _title_, _summary_, etc.) ### Enums * Use enums sparingly, because they don't work with REST API changes (eg. new value added on the backend) **never use From 9aba81e06da5ec405d0f36e5270834e0f739a8ea Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 11 Mar 2016 21:03:28 +0100 Subject: [PATCH 121/934] Sanitize IdentifierToUri --- .../java/com/gooddata/md/IdentifierToUri.java | 22 +++++++++---------- .../com/gooddata/md/MetadataServiceIT.java | 16 ++++++++------ src/test/resources/md/identifierToUri.json | 5 +++++ 3 files changed, 25 insertions(+), 18 deletions(-) create mode 100644 src/test/resources/md/identifierToUri.json diff --git a/src/main/java/com/gooddata/md/IdentifierToUri.java b/src/main/java/com/gooddata/md/IdentifierToUri.java index 7cc1a5be9..aab23d6de 100644 --- a/src/main/java/com/gooddata/md/IdentifierToUri.java +++ b/src/main/java/com/gooddata/md/IdentifierToUri.java @@ -1,6 +1,5 @@ package com.gooddata.md; -import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Collection; @@ -8,20 +7,21 @@ import static com.gooddata.util.Validate.notNull; /** - * Strucuture with list of symbolic names to be expanded by related uri. + * Structure with list of symbolic names (identifiers) to be expanded to list of URIs. + * Serialization only. */ class IdentifierToUri { - private final Collection identifierToUri; + private final Collection identifiers; - @JsonCreator - IdentifierToUri(@JsonProperty("identifierToUri") final Collection identifierToUri) { - notNull(identifierToUri, "identifierToUri"); - this.identifierToUri = identifierToUri; + IdentifierToUri(final Collection identifiers) { + notNull(identifiers, "identifiers"); + this.identifiers = identifiers; } - public Collection getIdentifierToUri() { - return identifierToUri; + @JsonProperty("identifierToUri") + public Collection getIdentifiers() { + return identifiers; } @Override @@ -31,13 +31,13 @@ public boolean equals(Object o) { IdentifierToUri that = (IdentifierToUri) o; - if (!identifierToUri.equals(that.identifierToUri)) return false; + if (!identifiers.equals(that.identifiers)) return false; return true; } @Override public int hashCode() { - return identifierToUri.hashCode(); + return identifiers.hashCode(); } } diff --git a/src/test/java/com/gooddata/md/MetadataServiceIT.java b/src/test/java/com/gooddata/md/MetadataServiceIT.java index dd247032a..a1af86dfa 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceIT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceIT.java @@ -7,22 +7,22 @@ import com.gooddata.gdc.UriResponse; import com.gooddata.md.report.ReportDefinition; import com.gooddata.project.Project; +import com.gooddata.util.ResourceUtils; +import net.javacrumbs.jsonunit.JsonMatchers; import org.hamcrest.Matchers; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import static com.gooddata.util.ResourceUtils.readFromResource; import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static com.gooddata.util.ResourceUtils.readStringFromResource; import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; import static net.jadler.Jadler.onRequest; +import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -115,6 +115,7 @@ public void testFindIdentifierUris() throws IOException { onRequest() .havingMethodEqualTo("POST") .havingPathEqualTo(IDENTIFIERS_URI) + .havingBody(jsonEquals(readStringFromResource("/md/identifierToUri.json"))) .respond() .withStatus(200) .withBody(MAPPER.writeValueAsString(response)); @@ -135,11 +136,12 @@ public void testIdentifiersToUris() throws IOException { onRequest() .havingMethodEqualTo("POST") .havingPathEqualTo(IDENTIFIERS_URI) + .havingBody(jsonEquals(readStringFromResource("/md/identifierToUri.json"))) .respond() .withStatus(200) .withBody(MAPPER.writeValueAsString(response)); - final Map uris = gd.getMetadataService().identifiersToUris(project, asList(ID)); + final Map uris = gd.getMetadataService().identifiersToUris(project, singletonList(ID)); assertThat(uris.keySet(), hasSize(1)); assertThat(uris.get(ID), is(OBJ_URI)); } diff --git a/src/test/resources/md/identifierToUri.json b/src/test/resources/md/identifierToUri.json new file mode 100644 index 000000000..2ea741bcb --- /dev/null +++ b/src/test/resources/md/identifierToUri.json @@ -0,0 +1,5 @@ +{ + "identifierToUri": [ + "ID" + ] +} From 210ec0b4737bab7d6430fd381c673edf6b0faabf Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 11 Mar 2016 21:26:19 +0100 Subject: [PATCH 122/934] Sanitize IdentifiersAndUris --- .../com/gooddata/md/IdentifierAndUri.java | 2 +- .../com/gooddata/md/IdentifiersAndUris.java | 27 +++++++++++++----- .../java/com/gooddata/md/MetadataService.java | 28 +++---------------- .../com/gooddata/md/MetadataServiceIT.java | 16 ++--------- src/test/resources/md/identifiersAndUris.json | 8 ++++++ 5 files changed, 35 insertions(+), 46 deletions(-) create mode 100644 src/test/resources/md/identifiersAndUris.json diff --git a/src/main/java/com/gooddata/md/IdentifierAndUri.java b/src/main/java/com/gooddata/md/IdentifierAndUri.java index 68b46db1b..f9c95672b 100644 --- a/src/main/java/com/gooddata/md/IdentifierAndUri.java +++ b/src/main/java/com/gooddata/md/IdentifierAndUri.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * Encapsulates identifier and its uri. + * Encapsulates identifier and its URI. */ class IdentifierAndUri { diff --git a/src/main/java/com/gooddata/md/IdentifiersAndUris.java b/src/main/java/com/gooddata/md/IdentifiersAndUris.java index 5cf3c8d9c..ef414b4a9 100644 --- a/src/main/java/com/gooddata/md/IdentifiersAndUris.java +++ b/src/main/java/com/gooddata/md/IdentifiersAndUris.java @@ -3,23 +3,36 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.List; +import java.util.*; /** - * Encapsulates list of identifier and its uri. + * Encapsulates list of identifiers and their URIs. + * Deserialization only. */ class IdentifiersAndUris { public static final String URI = "/gdc/md/{projectId}/identifiers"; - private final List identifiers; + private final List identifiersAndUris; @JsonCreator - IdentifiersAndUris(@JsonProperty("identifiers") List identifiers) { - this.identifiers = identifiers; + IdentifiersAndUris(@JsonProperty("identifiers") List identifiersAndUris) { + this.identifiersAndUris = identifiersAndUris; } - public List getIdentifiers() { - return identifiers; + public List getUris() { + final List uris = new ArrayList<>(); + for (IdentifierAndUri idAndUri : identifiersAndUris) { + uris.add(idAndUri.getUri()); + } + return uris; + } + + public Map asMap() { + final Map identifiersToUris = new HashMap<>(); + for (IdentifierAndUri idAndUri : identifiersAndUris) { + identifiersToUris.put(idAndUri.getIdentifier(), idAndUri.getUri()); + } + return Collections.unmodifiableMap(identifiersToUris); } } diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index 93f73d455..afe96ec89 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -6,7 +6,6 @@ import com.gooddata.AbstractService; import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; -import com.gooddata.gdc.UriResponse; import com.gooddata.md.report.ReportDefinition; import com.gooddata.project.Project; import org.springframework.http.HttpStatus; @@ -14,12 +13,7 @@ import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static com.gooddata.util.Validate.noNullElements; import static com.gooddata.util.Validate.notNull; @@ -380,20 +374,13 @@ public Collection findUris(Project project, Restriction... restrictions) ids.add(restriction.getValue()); } - final IdentifiersAndUris response = getUrisForIdentifiers(project, ids); - - final List uris = new ArrayList<>(); - for (IdentifierAndUri idAndUri : response.getIdentifiers()) { - uris.add(idAndUri.getUri()); - } - - return uris; + return getUrisForIdentifiers(project, ids).getUris(); } /** * Find metadata URIs for given identifiers. * - * @param project project where to search for the metadata + * @param project project where to search for the metadata * @param identifiers query restrictions * @return the map of identifiers as keys and metadata URIs as values * @throws com.gooddata.GoodDataException if unable to query metadata @@ -403,14 +390,7 @@ public Map identifiersToUris(Project project, Collection notNull(project, "project" ); noNullElements(identifiers, "identifiers"); - final IdentifiersAndUris response = getUrisForIdentifiers(project, identifiers); - - final Map identifiersToUris = new HashMap<>(); - for (IdentifierAndUri idAndUri : response.getIdentifiers()) { - identifiersToUris.put(idAndUri.getIdentifier(), idAndUri.getUri()); - } - - return Collections.unmodifiableMap(identifiersToUris); + return getUrisForIdentifiers(project, identifiers).asMap(); } /** diff --git a/src/test/java/com/gooddata/md/MetadataServiceIT.java b/src/test/java/com/gooddata/md/MetadataServiceIT.java index a1af86dfa..0104f95b2 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceIT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceIT.java @@ -106,19 +106,13 @@ public void testUsedByBatch() throws Exception { @Test public void testFindIdentifierUris() throws IOException { - final IdentifierAndUri identifierAndUri = new IdentifierAndUri(ID, OBJ_URI); - - final List identifiersAndUris = new ArrayList<>(); - identifiersAndUris.add(identifierAndUri); - IdentifiersAndUris response = new IdentifiersAndUris(identifiersAndUris); - onRequest() .havingMethodEqualTo("POST") .havingPathEqualTo(IDENTIFIERS_URI) .havingBody(jsonEquals(readStringFromResource("/md/identifierToUri.json"))) .respond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(response)); + .withBody(readFromResource("/md/identifiersAndUris.json")); final Collection uris = gd.getMetadataService().findUris(project, Restriction.identifier(ID)); assertThat(uris, hasSize(1)); @@ -127,19 +121,13 @@ public void testFindIdentifierUris() throws IOException { @Test public void testIdentifiersToUris() throws IOException { - final IdentifierAndUri identifierAndUri = new IdentifierAndUri(ID, OBJ_URI); - - final List identifiersAndUris = new ArrayList<>(); - identifiersAndUris.add(identifierAndUri); - IdentifiersAndUris response = new IdentifiersAndUris(identifiersAndUris); - onRequest() .havingMethodEqualTo("POST") .havingPathEqualTo(IDENTIFIERS_URI) .havingBody(jsonEquals(readStringFromResource("/md/identifierToUri.json"))) .respond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(response)); + .withBody(readFromResource("/md/identifiersAndUris.json")); final Map uris = gd.getMetadataService().identifiersToUris(project, singletonList(ID)); assertThat(uris.keySet(), hasSize(1)); diff --git a/src/test/resources/md/identifiersAndUris.json b/src/test/resources/md/identifiersAndUris.json new file mode 100644 index 000000000..232a289fc --- /dev/null +++ b/src/test/resources/md/identifiersAndUris.json @@ -0,0 +1,8 @@ +{ + "identifiers": [ + { + "identifier": "ID", + "uri": "/gdc/md/PROJECT_ID/obj" + } + ] +} \ No newline at end of file From 04644dda6f4e9c333d30d64ccc661c2d680afb12 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Tue, 5 Apr 2016 23:53:53 +0200 Subject: [PATCH 123/934] Link to Uri rename --- .../java/com/gooddata/account/Account.java | 10 + .../dataload/processes/DataloadProcess.java | 20 ++ .../dataload/processes/ProcessExecution.java | 2 +- .../processes/ProcessExecutionDetail.java | 39 +++- .../processes/ProcessExecutionTask.java | 10 + .../dataload/processes/ProcessService.java | 12 +- .../java/com/gooddata/dataset/Dataset.java | 2 +- .../java/com/gooddata/gdc/AboutLinks.java | 9 + .../com/gooddata/gdc/DataStoreService.java | 2 +- .../java/com/gooddata/gdc/LinkEntries.java | 17 +- src/main/java/com/gooddata/gdc/RootLinks.java | 221 +++++++++++++++--- src/main/java/com/gooddata/md/Dataset.java | 20 ++ .../java/com/gooddata/md/DisplayForm.java | 10 + src/main/java/com/gooddata/md/Entry.java | 18 +- .../java/com/gooddata/md/MetadataService.java | 10 +- .../java/com/gooddata/md/NestedAttribute.java | 107 +++++++-- .../gooddata/md/report/ReportDefinition.java | 10 + .../java/com/gooddata/model/MaqlDdlLinks.java | 11 +- .../java/com/gooddata/model/ModelService.java | 2 +- .../java/com/gooddata/project/Project.java | 160 +++++++++++++ .../gooddata/warehouse/WarehouseService.java | 12 +- .../com/gooddata/warehouse/WarehouseTask.java | 15 ++ .../com/gooddata/account/AccountTest.java | 1 + .../processes/DataloadProcessTest.java | 4 +- .../processes/ProcessExecutionDetailTest.java | 5 +- .../processes/ProcessExecutionTaskTest.java | 3 +- .../com/gooddata/dataset/DatasetTest.java | 29 +++ .../java/com/gooddata/gdc/GdcServiceIT.java | 2 +- src/test/java/com/gooddata/gdc/GdcTest.java | 13 ++ .../com/gooddata/gdc/LinkEntriesTest.java | 1 + .../gooddata/md/AttributeDisplayFormTest.java | 1 + .../java/com/gooddata/md/AttributeTest.java | 2 + .../java/com/gooddata/md/DatasetTest.java | 2 + .../java/com/gooddata/md/DisplayFormTest.java | 1 + src/test/java/com/gooddata/md/EntryTest.java | 7 +- .../com/gooddata/md/MetadataServiceAT.java | 3 +- .../com/gooddata/md/MetadataServiceTest.java | 16 +- .../com/gooddata/md/NestedAttributeTest.java | 1 + .../md/report/ReportDefinitionTest.java | 1 + .../com/gooddata/model/MaqlDdlLinksTest.java | 1 + .../com/gooddata/project/ProjectTest.java | 29 ++- .../warehouse/WarehouseServiceIT.java | 12 +- .../gooddata/warehouse/WarehouseTaskTest.java | 2 + src/test/resources/dataset/dataset.json | 7 + 44 files changed, 737 insertions(+), 125 deletions(-) create mode 100644 src/test/java/com/gooddata/dataset/DatasetTest.java create mode 100644 src/test/resources/dataset/dataset.json diff --git a/src/main/java/com/gooddata/account/Account.java b/src/main/java/com/gooddata/account/Account.java index 904131dd5..94880a702 100644 --- a/src/main/java/com/gooddata/account/Account.java +++ b/src/main/java/com/gooddata/account/Account.java @@ -64,8 +64,18 @@ public String getUri() { return links.getSelf(); } + /** + * @return projects URI string + * @deprecated use {@link #getProjectsUri()} instead + */ + @Deprecated @JsonIgnore public String getProjectsLink() { + return getProjectsUri(); + } + + @JsonIgnore + public String getProjectsUri() { return links.getProjects(); } diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index ae0a7030b..502323c1a 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -100,13 +100,33 @@ public String getId() { return TEMPLATE.match(getUri()).get("processId"); } + /** + * @return executions URI string + * @deprecated use {@link #getExecutionsUri()} instead + */ + @Deprecated @JsonIgnore public String getExecutionsLink() { + return getExecutionsUri(); + } + + @JsonIgnore + public String getExecutionsUri() { return links != null ? links.get(EXECUTIONS_LINK) : null; } + /** + * @return source URI string + * @deprecated use {@link #getSourceUri()} instead + */ + @Deprecated @JsonIgnore public String getSourceLink() { + return getSourceUri(); + } + + @JsonIgnore + public String getSourceUri() { return getUri() != null ? getUri() + "/source" : null; } diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java index 16111e034..79335cab0 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java @@ -35,7 +35,7 @@ public ProcessExecution(DataloadProcess process, String executable, Map params, Map hiddenParams) { notNull(process, "process"); - this.executionsUri = notEmpty(process.getExecutionsLink(), "process executions link"); + this.executionsUri = notEmpty(process.getExecutionsUri(), "process executions link"); this.executable = executable; this.params = notNull(params, "params"); this.hiddenParams = notNull(hiddenParams, "hiddenParams"); diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java index 3ad500aba..b6c736f04 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java @@ -1,24 +1,19 @@ package com.gooddata.dataload.processes; -import static com.gooddata.util.Validate.notEmpty; -import static com.gooddata.util.Validate.notNull; - +import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.gooddata.gdc.ErrorStructure; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import java.net.URI; import java.util.Map; +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + /** * Dataload process execution detail. Deserialization only. */ @@ -48,7 +43,7 @@ private ProcessExecutionDetail(@JsonProperty("status") String status, @JsonProperty("updated") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime updated, @JsonProperty("finished") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime finished, @JsonProperty("error") ErrorStructure error, - @JsonProperty("links") Map links) { + @JsonProperty("links") Map links) { this.status = notEmpty(status, "status"); this.created = notNull(created, "created"); this.started = started; @@ -86,8 +81,18 @@ public ErrorStructure getError() { return error; } + /** + * @return log URI string + * @deprecated use {@link #getLogUri()} instead + */ + @Deprecated @JsonIgnore public String getLogLink() { + return getLogUri(); + } + + @JsonIgnore + public String getLogUri() { return links != null ? links.get(LOG_LINK) : null; } @@ -96,8 +101,18 @@ public String getUri() { return links != null ? links.get(SELF_LINK) : null; } + /** + * @return execution URI string + * @deprecated use {@link #getExecutionUri()} instead + */ + @Deprecated @JsonIgnore public String getExecutionLink() { + return getExecutionUri(); + } + + @JsonIgnore + public String getExecutionUri() { return links != null ? links.get(EXECUTION_LINK) : null; } diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java index d51d3e758..7809f5874 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java @@ -26,11 +26,21 @@ private ProcessExecutionTask(@JsonProperty("links") Map links) { this.links = links; } + @Deprecated String getPollLink() { + return getPollUri(); + } + + String getPollUri() { return links != null ? links.get(POLL_LINK) : null; } + @Deprecated String getDetailLink() { + return getDetailUri(); + } + + String getDetailUri() { return links != null ? links.get(DETAIL_LINK) : null; } } diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index 9fbccf5b3..5e7dbb218 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -185,10 +185,10 @@ public void getProcessSource(DataloadProcess process, OutputStream outputStream) notNull(process, "process"); notNull(outputStream, "outputStream"); try { - restTemplate.execute(process.getSourceLink(), HttpMethod.GET, + restTemplate.execute(process.getSourceUri(), HttpMethod.GET, null, new OutputStreamResponseExtractor(outputStream)); } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to get process source " + process.getSourceLink(), e); + throw new GoodDataException("Unable to get process source " + process.getSourceUri(), e); } } @@ -201,10 +201,10 @@ public void getExecutionLog(ProcessExecutionDetail executionDetail, OutputStream notNull(executionDetail, "executionDetail"); notNull(outputStream, "outputStream"); try { - restTemplate.execute(executionDetail.getLogLink(), HttpMethod.GET, + restTemplate.execute(executionDetail.getLogUri(), HttpMethod.GET, null, new OutputStreamResponseExtractor(outputStream)); } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to get process execution log " + executionDetail.getLogLink(), e); + throw new GoodDataException("Unable to get process execution log " + executionDetail.getLogUri(), e); } } @@ -228,9 +228,9 @@ public FutureResult executeProcess(ProcessExecution exec throw new ProcessExecutionException("Cannot find started execution."); } - final String detailLink = executionTask.getDetailLink(); + final String detailLink = executionTask.getDetailUri(); - return new PollResult<>(this, new AbstractPollHandler(executionTask.getPollLink(), Void.class, ProcessExecutionDetail.class) { + return new PollResult<>(this, new AbstractPollHandler(executionTask.getPollUri(), Void.class, ProcessExecutionDetail.class) { @Override public boolean isFinished(ClientHttpResponse response) throws IOException { return HttpStatus.NO_CONTENT.equals(response.getStatusCode()); diff --git a/src/main/java/com/gooddata/dataset/Dataset.java b/src/main/java/com/gooddata/dataset/Dataset.java index fe0806f82..85068d532 100644 --- a/src/main/java/com/gooddata/dataset/Dataset.java +++ b/src/main/java/com/gooddata/dataset/Dataset.java @@ -3,11 +3,11 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.gooddata.gdc.AboutLinks; import com.gooddata.gdc.AboutLinks.Link; /** * Dataset link + * * @deprecated use {@link Link} instead */ @Deprecated diff --git a/src/main/java/com/gooddata/gdc/AboutLinks.java b/src/main/java/com/gooddata/gdc/AboutLinks.java index c3e62439f..cb25c68e0 100644 --- a/src/main/java/com/gooddata/gdc/AboutLinks.java +++ b/src/main/java/com/gooddata/gdc/AboutLinks.java @@ -79,6 +79,15 @@ public String getUri() { return uri; } + /** + * @return self URI string + * @deprecated use {@link #getUri()} instead + */ + @Deprecated + public String getLink() { + return getUri(); + } + public String getTitle() { return title; } diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index 7788a3426..965620c65 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -69,7 +69,7 @@ public DataStoreService(HttpClient httpClient, RestTemplate restTemplate, GdcSer private UriPrefixer getPrefixer() { if (prefixer == null) { - final String uriString = gdcService.getRootLinks().getUserStagingLink(); + final String uriString = gdcService.getRootLinks().getUserStagingUri(); final URI uri = URI.create(uriString); prefixer = new UriPrefixer(uri.isAbsolute() ? uri : gdcUri.resolve(uriString)); sardine.enablePreemptiveAuthentication(prefixer.getUriPrefix().getHost()); diff --git a/src/main/java/com/gooddata/gdc/LinkEntries.java b/src/main/java/com/gooddata/gdc/LinkEntries.java index 1e6d96b96..f56d7ac4d 100644 --- a/src/main/java/com/gooddata/gdc/LinkEntries.java +++ b/src/main/java/com/gooddata/gdc/LinkEntries.java @@ -29,17 +29,26 @@ protected List getEntries() { @JsonIgnoreProperties(ignoreUnknown = true) protected static class LinkEntry { - private final String link; + private final String uri; private final String category; @JsonCreator - private LinkEntry(@JsonProperty("link") String link, @JsonProperty("category") String category) { - this.link = link; + private LinkEntry(@JsonProperty("link") String uri, @JsonProperty("category") String category) { + this.uri = uri; this.category = category; } + /** + * @return self URI string + * @deprecated use {@link #getUri()} instead + */ + @Deprecated public String getLink() { - return link; + return getUri(); + } + + public String getUri() { + return uri; } public String getCategory() { diff --git a/src/main/java/com/gooddata/gdc/RootLinks.java b/src/main/java/com/gooddata/gdc/RootLinks.java index 32374e6b9..14af65a7d 100644 --- a/src/main/java/com/gooddata/gdc/RootLinks.java +++ b/src/main/java/com/gooddata/gdc/RootLinks.java @@ -27,145 +27,314 @@ public RootLinks(@JsonProperty("links") List links) { } /** - * Get GoodData API root link + * Get GoodData API root URI string * - * @return GoodData API root link + * @return GoodData API root URI string + * @deprecated use {@link #getHomeUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getHomeLink() { + return getHomeUri(); + } + + /** + * Get GoodData API root URI string + * + * @return GoodData API root URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getHomeUri() { return getLink(LinkCategory.HOME).getUri(); } /** - * Get temporary token generator link + * Get temporary token generator URI string * - * @return temporary token generator link + * @return temporary token generator URI string + * @deprecated use {@link #getTokenUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getTokenLink() { + return getTokenUri(); + } + + /** + * Get temporary token generator URI string + * + * @return temporary token generator URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getTokenUri() { return getLink(LinkCategory.TOKEN).getUri(); } /** - * Get authentication service link + * Get authentication service URI string * - * @return authentication service link + * @return authentication service URI string + * @deprecated use {@link #getLoginUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getLoginLink() { + return getLoginUri(); + } + + /** + * Get authentication service URI string + * + * @return authentication service URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getLoginUri() { return getLink(LinkCategory.LOGIN).getUri(); } /** - * Get metadata resources link + * Get metadata resources URI string * - * @return metadata resources link + * @return metadata resources URI string + * @deprecated use {@link #getMetadataUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getMetadataLink() { + return getMetadataUri(); + } + + /** + * Get metadata resources URI string + * + * @return metadata resources URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getMetadataUri() { return getLink(LinkCategory.METADATA).getUri(); } /** - * Get report execution resource link + * Get report execution resource URI string * - * @return report execution resource link + * @return report execution resource URI string + * @deprecated use {@link #getXTabUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getXTabLink() { + return getXTabUri(); + } + + /** + * Get report execution resource URI string + * + * @return report execution resource URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getXTabUri() { return getLink(LinkCategory.XTAB).getUri(); } /** - * Get link of resource used to determine valid attribute values in the context of a report + * Get URI string of resource used to determine valid attribute values in the context of a report * - * @return link of resource used to determine valid attribute values in the context of a report + * @return URI string of resource used to determine valid attribute values in the context of a report + * @deprecated use {@link #getAvailableElementsUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getAvailableElementsLink() { + return getAvailableElementsUri(); + } + + /** + * Get URI string of resource used to determine valid attribute values in the context of a report + * + * @return URI string of resource used to determine valid attribute values in the context of a report + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getAvailableElementsUri() { return getLink(LinkCategory.AVAILABLE_ELEMENTS).getUri(); } /** - * Get report exporting resource link + * Get report exporting resource URI string * - * @return report exporting resource link + * @return report exporting resource URI string + * @deprecated use {@link #getReportExporterUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getReportExporterLink() { + return getReportExporterUri(); + } + + /** + * Get report exporting resource URI string + * + * @return report exporting resource URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getReportExporterUri() { return getLink(LinkCategory.REPORT_EXPORTER).getUri(); } /** - * Get account manipulation resource link + * Get account manipulation resource URI string * - * @return account manipulation resource link + * @return account manipulation resource URI string + * @deprecated use {@link #getAccountUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getAccountLink() { + return getAccountUri(); + } + + /** + * Get account manipulation resource URI string + * + * @return account manipulation resource URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getAccountUri() { return getLink(LinkCategory.ACCOUNT).getUri(); } /** - * Get user and project management resource link + * Get user and project management resource URI string * - * @return user and project management resource link + * @return user and project management resource URI string + * @deprecated use {@link #getProjectsUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getProjectsLink() { + return getProjectsUri(); + } + + /** + * Get user and project management resource URI string + * + * @return user and project management resource URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getProjectsUri() { return getLink(LinkCategory.PROJECTS).getUri(); } /** - * Get miscellaneous tool resource link + * Get miscellaneous tool resource URI string * - * @return miscellaneous tool resource link + * @return miscellaneous tool resource URI string + * @deprecated use {@link #getToolUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getToolLink() { + return getToolUri(); + } + + /** + * Get miscellaneous tool resource URI string + * + * @return miscellaneous tool resource URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getToolUri() { return getLink(LinkCategory.TOOL).getUri(); } /** - * Get template resource link + * Get template resource URI string * - * @return template resource link + * @return template resource URI string + * @deprecated use {@link #getTemplatesUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getTemplatesLink() { + return getTemplatesUri(); + } + + /** + * Get template resource URI string + * + * @return template resource URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getTemplatesUri() { return getLink(LinkCategory.TEMPLATES).getUri(); } /** - * Get release information link + * Get release information URI string * - * @return release information link + * @return release information URI string + * @deprecated use {@link #getReleaseInfoUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getReleaseInfoLink() { + return getReleaseInfoUri(); + } + + /** + * Get release information URI string + * + * @return release information URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getReleaseInfoUri() { return getLink(LinkCategory.RELEASE_INFO).getUri(); } /** - * Get user data staging area link + * Get user data staging area URI string * - * @return user data staging area link + * @return user data staging area URI string + * @deprecated use {@link #getUserStagingUri()} instead * @throws GoodDataException in case no link with such category found */ + @Deprecated @JsonIgnore public String getUserStagingLink() { + return getUserStagingUri(); + } + + /** + * Get user data staging area URI string + * + * @return user data staging area URI string + * @throws GoodDataException in case no link with such category found + */ + @JsonIgnore + public String getUserStagingUri() { return getLink(LinkCategory.USER_STAGING).getUri(); } diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index a957d7a99..8450df70d 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -80,13 +80,33 @@ public boolean hasUploadConfiguration() { return Boolean.TRUE.equals(content.hasUploadConfiguration()); } + /** + * @return data uploads URI string + * @deprecated use {@link #getDataUploadsUri()} instead + */ + @Deprecated @JsonIgnore public String getDataUploadsLink() { + return getDataUploadsUri(); + } + + @JsonIgnore + public String getDataUploadsUri() { return links != null ? links.get(DATA_UPLOADS_LINK) : null; } + /** + * @return upload configuration URI string + * @deprecated use {@link #getUploadConfigurationUri()} instead + */ + @Deprecated @JsonIgnore public String getUploadConfigurationLink() { + return getUploadConfigurationUri(); + } + + @JsonIgnore + public String getUploadConfigurationUri() { return links != null ? links.get(UPLOAD_CONFIGURATION_LINK) : null; } diff --git a/src/main/java/com/gooddata/md/DisplayForm.java b/src/main/java/com/gooddata/md/DisplayForm.java index 04926d896..750a4e001 100644 --- a/src/main/java/com/gooddata/md/DisplayForm.java +++ b/src/main/java/com/gooddata/md/DisplayForm.java @@ -50,8 +50,18 @@ public String getType() { return content.getType(); } + /** + * @return elements URI string + * @deprecated use {@link #getElementsUri()} instead + */ + @Deprecated @JsonIgnore public String getElementsLink() { + return getElementsUri(); + } + + @JsonIgnore + public String getElementsUri() { return links.getElements(); } diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 570d753bd..89051cb03 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -15,7 +15,7 @@ @JsonInclude(JsonInclude.Include.NON_NULL) public class Entry { - private final String link; + private final String uri; private final String title; private final String summary; private final String category; @@ -30,7 +30,7 @@ public class Entry { private final Boolean unlisted; @JsonCreator - public Entry(@JsonProperty("link") String link, + public Entry(@JsonProperty("link") String uri, @JsonProperty("title") String title, @JsonProperty("summary") String summary, @JsonProperty("category") String category, @@ -43,7 +43,7 @@ public Entry(@JsonProperty("link") String link, @JsonProperty("updated") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime updated, @JsonProperty("locked") @JsonDeserialize(using = BooleanDeserializer.class) Boolean locked, @JsonProperty("unlisted") @JsonDeserialize(using = BooleanDeserializer.class) Boolean unlisted) { - this.link = link; + this.uri = uri; this.title = title; this.summary = summary; this.category = category; @@ -58,8 +58,18 @@ public Entry(@JsonProperty("link") String link, this.unlisted = unlisted; } + /** + * @return self URI string + * @deprecated use {@link #getUri()} instead + */ + @Deprecated public String getLink() { - return link; + return getUri(); + } + + @JsonIgnore + public String getUri() { + return uri; } public String getTitle() { diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index afe96ec89..3b94ecc02 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -286,7 +286,7 @@ public Collection findUris(Project project, final Collection entries = find(project, cls, restrictions); final Collection result = new ArrayList<>(entries.size()); for (Entry entry : entries) { - result.add(entry.getLink()); + result.add(entry.getUri()); } return result; } @@ -414,16 +414,16 @@ public List getAttributeElements(Attribute attribute) { public List getAttributeElements(DisplayForm displayForm) { notNull(displayForm, "displayForm"); - final String elementsLink = displayForm.getElementsLink(); - if (StringUtils.isEmpty(elementsLink)) { + final String elementsUri = displayForm.getElementsUri(); + if (StringUtils.isEmpty(elementsUri)) { return Collections.emptyList(); } try { - final AttributeElements attributeElements = restTemplate.getForObject(elementsLink, AttributeElements.class); + final AttributeElements attributeElements = restTemplate.getForObject(elementsUri, AttributeElements.class); return attributeElements.getElements(); } catch (GoodDataRestException | RestClientException e) { - throw new GoodDataException("Unable to get attribute elements from " + elementsLink + ".", e); + throw new GoodDataException("Unable to get attribute elements from " + elementsUri + ".", e); } } diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index d8835db97..082ec6b6b 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -3,11 +3,7 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; import java.util.Collection; @@ -48,13 +44,23 @@ public DisplayForm getDefaultDisplayForm() { return getDisplayForms().iterator().next(); } + /** + * @return dimension URI string + * @deprecated use {@link #getDimensionUri()} instead + */ + @Deprecated @JsonIgnore public String getDimensionLink() { - return content.getDimensionLink(); + return getDimensionUri(); + } + + @JsonIgnore + public String getDimensionUri() { + return content.getDimensionUri(); } public boolean hasDimension() { - return getDimensionLink() != null; + return getDimensionUri() != null; } @JsonIgnore @@ -117,14 +123,34 @@ public Collection getCompositeAttributePk() { return content.getCompositeAttributePk(); } + /** + * @return drill-down step display form URI string + * @deprecated use {@link #getDrillDownStepDisplayFormUri()} instead + */ + @Deprecated @JsonIgnore public String getDrillDownStepDisplayFormLink() { - return content.getDrillDownStepDisplayFormLink(); + return getDrillDownStepDisplayFormUri(); } + @JsonIgnore + public String getDrillDownStepDisplayFormUri() { + return content.getDrillDownStepDisplayFormUri(); + } + + /** + * @return linked display form URI string + * @deprecated use {@link #getLinkedDisplayFormUri()} instead + */ + @Deprecated @JsonIgnore public String getLinkedDisplayFormLink() { - return content.getLinkedDisplayFormLink(); + return getLinkedDisplayFormUri(); + } + + @JsonIgnore + public String getLinkedDisplayFormUri() { + return content.getLinkedDisplayFormUri(); } /** @@ -154,18 +180,25 @@ protected static class Content { private final Collection compositeAttribute; private final Collection compositeAttributePk; private final String drillDownStepAttributeDF; - private final String linkAttributeDF; + private final String linkedDisplayFormUri; private final Collection folders; private final Collection grain; @JsonCreator - protected Content(@JsonProperty("pk") Collection pk, @JsonProperty("fk") Collection fk, - @JsonProperty("displayForms") Collection displayForms, @JsonProperty("dimension") String dimension, - @JsonProperty("direction") String direction, @JsonProperty("sort") AttributeSort sort, @JsonProperty("type") String type, - @JsonProperty("rel") Collection rel, @JsonProperty("compositeAttribute") Collection compositeAttribute, - @JsonProperty("compositeAttributePk") Collection compositeAttributePk, - @JsonProperty("drillDownStepAttributeDF") String drillDownStepAttributeDF, @JsonProperty("linkAttributeDF") String linkAttributeDF, - @JsonProperty("folders") Collection folders, @JsonProperty("grain") Collection grain) { + protected Content(@JsonProperty("pk") Collection pk, + @JsonProperty("fk") Collection fk, + @JsonProperty("displayForms") Collection displayForms, + @JsonProperty("dimension") String dimension, + @JsonProperty("direction") String direction, + @JsonProperty("sort") AttributeSort sort, + @JsonProperty("type") String type, + @JsonProperty("rel") Collection rel, + @JsonProperty("compositeAttribute") Collection compositeAttribute, + @JsonProperty("compositeAttributePk") Collection compositeAttributePk, + @JsonProperty("drillDownStepAttributeDF") String drillDownStepAttributeDF, + @JsonProperty("linkAttributeDF") String linkedDisplayFormUri, + @JsonProperty("folders") Collection folders, + @JsonProperty("grain") Collection grain) { this.pk = pk; this.fk = fk; this.displayForms = displayForms; @@ -177,7 +210,7 @@ protected Content(@JsonProperty("pk") Collection pk, @JsonProperty("fk") Co this.compositeAttribute = compositeAttribute; this.compositeAttributePk = compositeAttributePk; this.drillDownStepAttributeDF = drillDownStepAttributeDF; - this.linkAttributeDF = linkAttributeDF; + this.linkedDisplayFormUri = linkedDisplayFormUri; this.folders = folders; this.grain = grain; } @@ -194,8 +227,18 @@ public Collection getDisplayForms() { return displayForms; } - @JsonProperty("dimension") + /** + * @return dimension URI string + * @deprecated use {@link #getDimensionUri()} instead + */ + @Deprecated + @JsonIgnore public String getDimensionLink() { + return getDimensionUri(); + } + + @JsonProperty("dimension") + public String getDimensionUri() { return dimension; } @@ -224,14 +267,34 @@ public Collection getCompositeAttributePk() { return compositeAttributePk; } - @JsonProperty("drillDownStepAttributeDF") + /** + * @return drill-down step display form URI string + * @deprecated use {@link #getDrillDownStepDisplayFormUri()} instead + */ + @Deprecated + @JsonIgnore public String getDrillDownStepDisplayFormLink() { + return getDrillDownStepDisplayFormUri(); + } + + @JsonProperty("drillDownStepAttributeDF") + public String getDrillDownStepDisplayFormUri() { return drillDownStepAttributeDF; } - @JsonProperty("linkAttributeDF") + /** + * @return linked display form URI string + * @deprecated use {@link #getLinkedDisplayFormUri()} instead + */ + @Deprecated + @JsonIgnore public String getLinkedDisplayFormLink() { - return linkAttributeDF; + return getLinkedDisplayFormUri(); + } + + @JsonProperty("linkAttributeDF") + public String getLinkedDisplayFormUri() { + return linkedDisplayFormUri; } public Collection getFolders() { diff --git a/src/main/java/com/gooddata/md/report/ReportDefinition.java b/src/main/java/com/gooddata/md/report/ReportDefinition.java index 1a95adab2..2944df08d 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinition.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinition.java @@ -59,8 +59,18 @@ public Grid getGrid() { return content.getGrid(); } + /** + * @return explain URI string + * @deprecated use {@link #getExplainUri()} instead + */ + @Deprecated @JsonIgnore public String getExplainLink() { + return getExplainUri(); + } + + @JsonIgnore + public String getExplainUri() { return links != null ? links.get(EXPLAIN_LINK) : null; } diff --git a/src/main/java/com/gooddata/model/MaqlDdlLinks.java b/src/main/java/com/gooddata/model/MaqlDdlLinks.java index 230e01914..6be97e64e 100644 --- a/src/main/java/com/gooddata/model/MaqlDdlLinks.java +++ b/src/main/java/com/gooddata/model/MaqlDdlLinks.java @@ -26,10 +26,19 @@ private MaqlDdlLinks(@JsonProperty("entries") List entries) { super(entries); } + /** + * @return status URI string + * @deprecated use {@link #getStatusUri()} instead + */ + @Deprecated public String getStatusLink() { + return getStatusUri(); + } + + public String getStatusUri() { for (LinkEntry linkEntry : getEntries()) { if (TASKS_STATUS.equals(linkEntry.getCategory())) { - return linkEntry.getLink(); + return linkEntry.getUri(); } } return null; diff --git a/src/main/java/com/gooddata/model/ModelService.java b/src/main/java/com/gooddata/model/ModelService.java index 9d339005a..c333bfb88 100644 --- a/src/main/java/com/gooddata/model/ModelService.java +++ b/src/main/java/com/gooddata/model/ModelService.java @@ -143,7 +143,7 @@ private boolean executeNextMaqlChunk() { try { final MaqlDdlLinks links = restTemplate.postForObject(MaqlDdl.URI, new MaqlDdl(maqlChunks.poll()), MaqlDdlLinks.class, projectId); - this.pollUri = links.getStatusLink(); + this.pollUri = links.getStatusUri(); } catch (GoodDataRestException | RestClientException e) { throw new ModelException("Unable to update project model", e); } diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index 62972d127..7d21620a1 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -139,83 +139,243 @@ public String getUri() { return links.getSelf(); } + /** + * @return users URI string + * @deprecated use {@link #getUsersUri()} instead + */ + @Deprecated @JsonIgnore public String getUsersLink() { + return getUsersUri(); + } + + @JsonIgnore + public String getUsersUri() { return links.getUsers(); } + /** + * @return roles URI string + * @deprecated use {@link #getRolesUri()} instead + */ + @Deprecated @JsonIgnore public String getRolesLink() { + return getRolesUri(); + } + + @JsonIgnore + public String getRolesUri() { return links.getRoles(); } + /** + * @return groups URI string + * @deprecated use {@link #getGroupsUri()} instead + */ + @Deprecated @JsonIgnore public String getGroupsLink() { + return getGroupsUri(); + } + + @JsonIgnore + public String getGroupsUri() { return links.getGroups(); } + /** + * @return invitations URI string + * @deprecated use {@link #getInvitationsUri()} instead + */ + @Deprecated @JsonIgnore public String getInvitationsLink() { + return getInvitationsUri(); + } + + @JsonIgnore + public String getInvitationsUri() { return links.getInvitations(); } + /** + * @return LDM URI string + * @deprecated use {@link #getLdmUri()} instead + */ + @Deprecated @JsonIgnore public String getLdmLink() { + return getLdmUri(); + } + + @JsonIgnore + public String getLdmUri() { return links.getLdm(); } + /** + * @return LDM thumbnail URI string + * @deprecated use {@link #getLdmThumbnailUri()} instead + */ + @Deprecated @JsonIgnore public String getLdmThumbnailLink() { + return getLdmThumbnailUri(); + } + + @JsonIgnore + public String getLdmThumbnailUri() { return links.getLdmThumbnail(); } + /** + * @return metadata URI string + * @deprecated use {@link #getMetadataUri()} instead + */ + @Deprecated @JsonIgnore public String getMetadataLink() { + return getMetadataUri(); + } + + @JsonIgnore + public String getMetadataUri() { return links.getMetadata(); } + /** + * @return public artifacts URI string + * @deprecated use {@link #getPublicArtifactsUri()} instead + */ + @Deprecated @JsonIgnore public String getPublicArtifactsLink() { + return getPublicArtifactsUri(); + } + + @JsonIgnore + public String getPublicArtifactsUri() { return links.getPublicArtifacts(); } + /** + * @return templates URI string + * @deprecated use {@link #getTemplatesUri()} instead + */ + @Deprecated @JsonIgnore public String getTemplatesLink() { + return getTemplatesUri(); + } + + @JsonIgnore + public String getTemplatesUri() { return links.getTemplates(); } + /** + * @return connectors URI string + * @deprecated use {@link #getConnectorsUri()} instead + */ + @Deprecated @JsonIgnore public String getConnectorsLink() { + return getConnectorsUri(); + } + + @JsonIgnore + public String getConnectorsUri() { return links.getConnectors(); } + /** + * @return data load URI string + * @deprecated use {@link #getDataLoadUri()} instead + */ + @Deprecated @JsonIgnore public String getDataLoadLink() { + return getDataLoadUri(); + } + + @JsonIgnore + public String getDataLoadUri() { return links.getDataLoad(); } + /** + * @return schedules URI string + * @deprecated use {@link #getSchedulesUri()} instead + */ + @Deprecated @JsonIgnore public String getSchedulesLink() { + return getSchedulesUri(); + } + + @JsonIgnore + public String getSchedulesUri() { return links.getSchedules(); } + /** + * @return execute URI string + * @deprecated use {@link #getExecuteUri()} instead + */ + @Deprecated @JsonIgnore public String getExecuteLink() { + return getExecuteUri(); + } + + @JsonIgnore + public String getExecuteUri() { return links.getExecute(); } + /** + * @return event stores URI string + * @deprecated use {@link #getEventStoresUri()} instead + */ + @Deprecated @JsonIgnore public String getEventStoresLink() { + return getEventStoresUri(); + } + + @JsonIgnore + public String getEventStoresUri() { return links.getEventStores(); } + /** + * @return clear caches URI string + * @deprecated use {@link #getClearCachesUri()} instead + */ + @Deprecated @JsonIgnore public String getClearCachesLink() { + return getClearCachesUri(); + } + + @JsonIgnore + public String getClearCachesUri() { return links.getClearCaches(); } + /** + * @return uploads URI string + * @deprecated use {@link #getUploadsUri()} instead + */ + @Deprecated @JsonIgnore public String getUploadsLink() { + return getUploadsUri(); + } + + @JsonIgnore + public String getUploadsUri() { return links.getUploads(); } diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index a9a1037c1..765fd163c 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -56,7 +56,7 @@ public FutureResult createWarehouse(Warehouse warehouse) { throw new GoodDataException("Empty response when Warehouse POSTed to API"); } - return new PollResult<>(this, new AbstractPollHandler(task.getPollLink(), WarehouseTask.class, Warehouse.class) { + return new PollResult<>(this, new AbstractPollHandler(task.getPollUri(), WarehouseTask.class, Warehouse.class) { @Override public boolean isFinished(ClientHttpResponse response) throws IOException { @@ -73,11 +73,11 @@ protected void onFinish() { @Override public void handlePollResult(WarehouseTask pollResult) { try { - final Warehouse warehouse = restTemplate.getForObject(pollResult.getWarehouseLink(), Warehouse.class); + final Warehouse warehouse = restTemplate.getForObject(pollResult.getWarehouseUri(), Warehouse.class); setResult(warehouse); } catch (GoodDataException | RestClientException e) { throw new GoodDataException("Warehouse creation finished, but can't get created warehouse, uri: " - + pollResult.getWarehouseLink(), e); + + pollResult.getWarehouseUri(), e); } } @@ -209,7 +209,7 @@ public FutureResult addUserToWarehouse(final Warehouse warehouse, return new PollResult<>(this, new AbstractPollHandler - (task.getPollLink(), WarehouseTask.class, WarehouseUser.class) { + (task.getPollUri(), WarehouseTask.class, WarehouseUser.class) { @Override public boolean isFinished(ClientHttpResponse response) throws IOException { @@ -219,11 +219,11 @@ public boolean isFinished(ClientHttpResponse response) throws IOException { @Override public void handlePollResult(WarehouseTask pollResult) { try { - final WarehouseUser newUser = restTemplate.getForObject(pollResult.getWarehouseUserLink(), WarehouseUser.class); + final WarehouseUser newUser = restTemplate.getForObject(pollResult.getWarehouseUserUri(), WarehouseUser.class); setResult(newUser); } catch (GoodDataException | RestClientException e) { throw new GoodDataException("User added to warehouse, but can't get it back, uri: " - + pollResult.getWarehouseUserLink(), e); + + pollResult.getWarehouseUserUri(), e); } } diff --git a/src/main/java/com/gooddata/warehouse/WarehouseTask.java b/src/main/java/com/gooddata/warehouse/WarehouseTask.java index de8e6c41e..6d9db65b8 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseTask.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseTask.java @@ -27,15 +27,30 @@ private WarehouseTask(@JsonProperty("links") Map links) { this.links = links; } + @Deprecated String getPollLink() { + return getPollUri(); + } + + String getPollUri() { return links.get(POLL_LINK); } + @Deprecated String getWarehouseLink() { + return getWarehouseUri(); + } + + String getWarehouseUri() { return links.get(WAREHOUSE_LINK); } + @Deprecated String getWarehouseUserLink() { + return getWarehouseUserUri(); + } + + String getWarehouseUserUri() { return links.get(WAREHOUSE_USER_LINK); } } diff --git a/src/test/java/com/gooddata/account/AccountTest.java b/src/test/java/com/gooddata/account/AccountTest.java index 24ea11b53..65a7b7a5e 100644 --- a/src/test/java/com/gooddata/account/AccountTest.java +++ b/src/test/java/com/gooddata/account/AccountTest.java @@ -21,6 +21,7 @@ public void testDeserialize() throws Exception { assertThat(account.getId(), is("ID")); assertThat(account.getUri(), is("/gdc/account/profile/ID")); assertThat(account.getProjectsLink(), is("/gdc/account/profile/ID/projects")); + assertThat(account.getProjectsUri(), is("/gdc/account/profile/ID/projects")); } @Test diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java index 54ff2e6f4..7132ff308 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java @@ -22,8 +22,10 @@ public void testDeserialization() throws Exception { assertThat(process.getType(), is("GROOVY")); assertThat(process.getExecutables(), hasSize(1)); assertThat(process.getId(), is("processId")); + assertThat(process.getUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId")); assertThat(process.getExecutionsLink(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions")); - + assertThat(process.getExecutionsUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions")); + assertThat(process.getSourceUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/source")); } @Test diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java index d5d5f4659..13f5636a3 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java @@ -27,8 +27,9 @@ public void testDeserialization() throws Exception { assertThat(executionDetail.getError().getErrorCode(), is("executor.error")); assertThat(executionDetail.getError().getFormattedMessage(), is("Error message with some placeholders for parameters - like this one.")); - + assertThat(executionDetail.getUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId/detail")); + assertThat(executionDetail.getLogUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId/log")); + assertThat(executionDetail.getExecutionUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId")); } - } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java index f846ccb13..3e36044e1 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java @@ -13,7 +13,8 @@ public void testDeserialize() throws Exception { final ProcessExecutionTask task = new ObjectMapper() .readValue(getClass().getResourceAsStream("/dataload/processes/executionTask.json"), ProcessExecutionTask.class); assertThat(task.getPollLink(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId")); + assertThat(task.getPollUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId")); assertThat(task.getDetailLink(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId/detail")); - + assertThat(task.getDetailUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId/detail")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/DatasetTest.java b/src/test/java/com/gooddata/dataset/DatasetTest.java new file mode 100644 index 000000000..9763bff61 --- /dev/null +++ b/src/test/java/com/gooddata/dataset/DatasetTest.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.dataset; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; +import java.util.Collection; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; + +public class DatasetTest { + + @Test + public void deserialize() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataset/dataset.json"); + final Dataset dataset = new ObjectMapper().readValue(stream, Dataset.class); + assertThat(dataset, is(notNullValue())); + + assertThat(dataset.getIdentifier(), is("dataset.person")); + assertThat(dataset.getTitle(), is("Person")); + assertThat(dataset.getUri(), is("/gdc/md/PROJECT_ID/ldm/singleloadinterface/dataset.person")); + } +} diff --git a/src/test/java/com/gooddata/gdc/GdcServiceIT.java b/src/test/java/com/gooddata/gdc/GdcServiceIT.java index d1f829363..655c208d6 100644 --- a/src/test/java/com/gooddata/gdc/GdcServiceIT.java +++ b/src/test/java/com/gooddata/gdc/GdcServiceIT.java @@ -23,7 +23,7 @@ public void shouldReturnGdc() throws Exception { final Gdc gdc = gd.getGdcService().getGdc(); assertThat(gdc, is(notNullValue())); - assertThat(gdc.getUserStagingLink(), is("/uploads")); + assertThat(gdc.getUserStagingUri(), is("/uploads")); } @Test diff --git a/src/test/java/com/gooddata/gdc/GdcTest.java b/src/test/java/com/gooddata/gdc/GdcTest.java index ac1f3ac0e..7178f56df 100644 --- a/src/test/java/com/gooddata/gdc/GdcTest.java +++ b/src/test/java/com/gooddata/gdc/GdcTest.java @@ -18,17 +18,30 @@ public void deserialize() throws Exception { assertThat(gdc, is(notNullValue())); assertThat(gdc.getHomeLink(), is("/gdc/")); + assertThat(gdc.getHomeUri(), is("/gdc/")); assertThat(gdc.getTokenLink(), is("/gdc/account/token")); + assertThat(gdc.getTokenUri(), is("/gdc/account/token")); assertThat(gdc.getLoginLink(), is("/gdc/account/login")); + assertThat(gdc.getLoginUri(), is("/gdc/account/login")); assertThat(gdc.getMetadataLink(), is("/gdc/md")); + assertThat(gdc.getMetadataUri(), is("/gdc/md")); assertThat(gdc.getXTabLink(), is("/gdc/xtab2")); + assertThat(gdc.getXTabUri(), is("/gdc/xtab2")); assertThat(gdc.getAvailableElementsLink(), is("/gdc/availableelements")); + assertThat(gdc.getAvailableElementsUri(), is("/gdc/availableelements")); assertThat(gdc.getReportExporterLink(), is("/gdc/exporter")); + assertThat(gdc.getReportExporterUri(), is("/gdc/exporter")); assertThat(gdc.getAccountLink(), is("/gdc/account")); + assertThat(gdc.getAccountUri(), is("/gdc/account")); assertThat(gdc.getProjectsLink(), is("/gdc/projects")); + assertThat(gdc.getProjectsUri(), is("/gdc/projects")); assertThat(gdc.getToolLink(), is("/gdc/tool")); + assertThat(gdc.getToolUri(), is("/gdc/tool")); assertThat(gdc.getTemplatesLink(), is("/gdc/templates")); + assertThat(gdc.getTemplatesUri(), is("/gdc/templates")); assertThat(gdc.getReleaseInfoLink(), is("/gdc/releaseInfo")); + assertThat(gdc.getReleaseInfoUri(), is("/gdc/releaseInfo")); assertThat(gdc.getUserStagingLink(), is("/uploads")); + assertThat(gdc.getUserStagingUri(), is("/uploads")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java index a2254328c..b831793b9 100644 --- a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java +++ b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java @@ -24,6 +24,7 @@ public void testDeserialization() throws Exception { assertThat(linkEntries.getEntries(), hasSize(1)); assertThat(linkEntries.getEntries().get(0), is(notNullValue())); assertThat(linkEntries.getEntries().get(0).getLink(), is("URI")); + assertThat(linkEntries.getEntries().get(0).getUri(), is("URI")); assertThat(linkEntries.getEntries().get(0).getCategory(), is("tasks-status")); } } diff --git a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java index f7a9ecfc7..eeaf26b6b 100644 --- a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java +++ b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java @@ -32,6 +32,7 @@ public void shouldDeserialize() throws Exception { assertThat(attrDF.getLdmExpression(), is(LDM_EXPRESSION)); assertThat(attrDF.getType(), is(TYPE)); assertThat(attrDF.getElementsLink(), is(ELEMENTS_LINK)); + assertThat(attrDF.getElementsUri(), is(ELEMENTS_LINK)); } @Test diff --git a/src/test/java/com/gooddata/md/AttributeTest.java b/src/test/java/com/gooddata/md/AttributeTest.java index 5af17be3a..f83696990 100644 --- a/src/test/java/com/gooddata/md/AttributeTest.java +++ b/src/test/java/com/gooddata/md/AttributeTest.java @@ -56,6 +56,7 @@ public void shouldDeserialize() throws Exception { assertThat(attribute.hasDimension(), is(true)); assertThat(attribute.getDimensionLink(), is("/gdc/md/PROJECT_ID/obj/DIM_ID")); + assertThat(attribute.getDimensionUri(), is("/gdc/md/PROJECT_ID/obj/DIM_ID")); assertThat(attribute.getDirection(), is("asc")); assertThat(attribute.getSort(), is("pk")); @@ -64,6 +65,7 @@ public void shouldDeserialize() throws Exception { assertThat(attribute.isSortedByLinkedDf(), is(false)); assertThat(attribute.getType(), is("GDC.time.date")); assertThat(attribute.getLinkedDisplayFormLink(), is("/gdc/md/PROJECT_ID/obj/DF_LINK")); + assertThat(attribute.getLinkedDisplayFormUri(), is("/gdc/md/PROJECT_ID/obj/DF_LINK")); assertThat(attribute.getCompositeAttribute(), hasSize(0)); assertThat(attribute.getCompositeAttributePk(), hasSize(0)); assertThat(attribute.getFolders(), hasSize(0)); diff --git a/src/test/java/com/gooddata/md/DatasetTest.java b/src/test/java/com/gooddata/md/DatasetTest.java index cd9cd0ab4..4a685d245 100644 --- a/src/test/java/com/gooddata/md/DatasetTest.java +++ b/src/test/java/com/gooddata/md/DatasetTest.java @@ -45,8 +45,10 @@ public void shouldDeserialize() throws Exception { assertThat(attributes, hasSize(3)); assertThat(dataset.getDataUploadsLink(), is("/gdc/md/PROJECT_ID/data/uploads/688536")); + assertThat(dataset.getDataUploadsUri(), is("/gdc/md/PROJECT_ID/data/uploads/688536")); assertThat(dataset.hasUploadConfiguration(), is(false)); assertThat(dataset.getUploadConfigurationLink(), is(nullValue())); + assertThat(dataset.getUploadConfigurationUri(), is(nullValue())); } @Test diff --git a/src/test/java/com/gooddata/md/DisplayFormTest.java b/src/test/java/com/gooddata/md/DisplayFormTest.java index 371b9f2f9..aedae527f 100644 --- a/src/test/java/com/gooddata/md/DisplayFormTest.java +++ b/src/test/java/com/gooddata/md/DisplayFormTest.java @@ -32,6 +32,7 @@ public void shouldDeserialize() throws Exception { assertThat(displayForm.getLdmExpression(), is(LDM_EXPRESSION)); assertThat(displayForm.getType(), is(nullValue())); assertThat(displayForm.getElementsLink(), is(ELEMENTS_LINK)); + assertThat(displayForm.getElementsUri(), is(ELEMENTS_LINK)); } @Test diff --git a/src/test/java/com/gooddata/md/EntryTest.java b/src/test/java/com/gooddata/md/EntryTest.java index 714db982a..792b462dc 100644 --- a/src/test/java/com/gooddata/md/EntryTest.java +++ b/src/test/java/com/gooddata/md/EntryTest.java @@ -19,7 +19,7 @@ public class EntryTest { - public static final String LINK = "/gdc/md/PROJECT_ID/obj/ENTRY_ID"; + public static final String URI = "/gdc/md/PROJECT_ID/obj/ENTRY_ID"; public static final String AUTHOR = "/gdc/account/profile/AUTHOR_USER_ID"; public static final String CONTRIBUTOR = "/gdc/account/profile/CONTRIBUTOR_USER_ID"; public static final DateTime CREATED = new DateTime(2014, 4, 11, 13, 45, 54, DateTimeZone.UTC); @@ -37,7 +37,8 @@ public class EntryTest { public void testDeserialize() throws Exception { final Entry entry = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/entry.json"), Entry.class); assertThat(entry, is(notNullValue())); - assertThat(entry.getLink(), is(LINK)); + assertThat(entry.getLink(), is(URI)); + assertThat(entry.getUri(), is(URI)); assertThat(entry.getTitle(), is(TITLE)); assertThat(entry.getSummary(), is(SUMMARY)); assertThat(entry.getCategory(), is(CATEGORY)); @@ -54,7 +55,7 @@ public void testDeserialize() throws Exception { @Test public void testSerialization() throws Exception { - final Entry entry = new Entry(LINK, TITLE, SUMMARY, CATEGORY, AUTHOR, CONTRIBUTOR, DEPRECATED, IDENTIFIER, TAGS, + final Entry entry = new Entry(URI, TITLE, SUMMARY, CATEGORY, AUTHOR, CONTRIBUTOR, DEPRECATED, IDENTIFIER, TAGS, CREATED, UPDATED, LOCKED, UNLISTED); assertThat(entry, serializesToJson("/md/entry.json")); diff --git a/src/test/java/com/gooddata/md/MetadataServiceAT.java b/src/test/java/com/gooddata/md/MetadataServiceAT.java index 9c5ca8f6c..91af4ae77 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceAT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceAT.java @@ -128,7 +128,8 @@ public void retrieveScheduledMail() throws Exception { Collection result = md.find(project, ScheduledMail.class); assertThat(result, hasSize(1)); for (Entry e : result) { - ScheduledMail schedule = md.getObjByUri(e.getLink(), ScheduledMail.class); + ScheduledMail schedule = md.getObjByUri(e.getUri(), ScheduledMail.class); + assertThat(schedule.getTitle(), is("Scheduled Mail Title")); } } diff --git a/src/test/java/com/gooddata/md/MetadataServiceTest.java b/src/test/java/com/gooddata/md/MetadataServiceTest.java index 15405d8ce..08af25241 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceTest.java +++ b/src/test/java/com/gooddata/md/MetadataServiceTest.java @@ -236,7 +236,7 @@ public void testGetObjUriToFindOneObjByTitle() throws Exception { when(restTemplate.getForObject(Query.URI, Query.class, project.getId(), "queryable")).thenReturn(queryResult); when(queryResult.getEntries()).thenReturn(asList(resultEntry)); when(resultEntry.getTitle()).thenReturn(title); - when(resultEntry.getLink()).thenReturn(uri); + when(resultEntry.getUri()).thenReturn(uri); final String result = service.getObjUri(project, Queryable.class, Restriction.title(title)); assertThat(result, is(uri)); @@ -274,7 +274,7 @@ public void testGetObjToFindOneObjById() throws Exception { when(restTemplate.getForObject(Query.URI, Query.class, project.getId(), "queryable")).thenReturn(queryResult); when(queryResult.getEntries()).thenReturn(asList(resultEntry)); when(resultEntry.getIdentifier()).thenReturn(id); - when(resultEntry.getLink()).thenReturn(uri); + when(resultEntry.getUri()).thenReturn(uri); when(restTemplate.getForObject(uri, Queryable.class)).thenReturn(intendedResult); final Queryable result = service.getObj(project, Queryable.class, Restriction.identifier(id)); @@ -333,8 +333,8 @@ public void testFindUrisBySummary() throws Exception { when(queryResult.getEntries()).thenReturn(asList(resultEntry1, resultEntry2)); when(resultEntry1.getSummary()).thenReturn(summary); when(resultEntry2.getSummary()).thenReturn(summary); - when(resultEntry1.getLink()).thenReturn(uri1); - when(resultEntry2.getLink()).thenReturn(uri2); + when(resultEntry1.getUri()).thenReturn(uri1); + when(resultEntry2.getUri()).thenReturn(uri2); final Collection results = service.findUris(project, Queryable.class, Restriction.summary(summary)); assertThat(results, allOf(hasItem(uri1), hasItem(uri2))); @@ -343,11 +343,11 @@ public void testFindUrisBySummary() throws Exception { @Test public void testGetAttributeElementsEmpty() throws Exception { final DisplayForm attrDisplayForm = mock(AttributeDisplayForm.class); - when(attrDisplayForm.getElementsLink()).thenReturn("elementsLink"); + when(attrDisplayForm.getElementsUri()).thenReturn("elementsUri"); final Attribute attr = mock(Attribute.class); when(attr.getDefaultDisplayForm()).thenReturn(attrDisplayForm); - when(restTemplate.getForObject("elementsLink", AttributeElements.class)) + when(restTemplate.getForObject("elementsUri", AttributeElements.class)) .thenReturn(new AttributeElements(Collections.emptyList())); final List elements = service.getAttributeElements(attr); assertThat(elements, hasSize(0)); @@ -356,14 +356,14 @@ public void testGetAttributeElementsEmpty() throws Exception { @Test public void testGetAttributeElements() throws Exception { final DisplayForm attrDisplayForm = mock(AttributeDisplayForm.class); - when(attrDisplayForm.getElementsLink()).thenReturn("elementsLink"); + when(attrDisplayForm.getElementsUri()).thenReturn("elementsUri"); final Attribute attr = mock(Attribute.class); when(attr.getDefaultDisplayForm()).thenReturn(attrDisplayForm); final AttributeElement result1 = mock(AttributeElement.class); final AttributeElement result2 = mock(AttributeElement.class); - when(restTemplate.getForObject("elementsLink", AttributeElements.class)) + when(restTemplate.getForObject("elementsUri", AttributeElements.class)) .thenReturn(new AttributeElements(asList(result1, result2))); final List elements = service.getAttributeElements(attr); assertThat(elements, allOf(hasItem(result1), hasItem(result2))); diff --git a/src/test/java/com/gooddata/md/NestedAttributeTest.java b/src/test/java/com/gooddata/md/NestedAttributeTest.java index bdbefb314..9276e2edb 100644 --- a/src/test/java/com/gooddata/md/NestedAttributeTest.java +++ b/src/test/java/com/gooddata/md/NestedAttributeTest.java @@ -51,5 +51,6 @@ public void testDeserialization() throws Exception { assertThat(attribute.hasDimension(), is(true)); assertThat(attribute.getDimensionLink(), is("/gdc/md/PROJECT_ID/obj/DIM_ID")); + assertThat(attribute.getDimensionUri(), is("/gdc/md/PROJECT_ID/obj/DIM_ID")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java index 90072a0c6..ebf9ff985 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java @@ -26,6 +26,7 @@ public void testDeserialization() throws Exception { assertThat(def, is(notNullValue())); assertThat(def.getFormat(), is(FORMAT)); assertThat(def.getGrid(), is(notNullValue())); + assertThat(def.getExplainUri(), is("/gdc/md/PROJECT_ID/obj/2274/explain2")); } @Test diff --git a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java index c4cfb07d0..b4d2fb3eb 100644 --- a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java +++ b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java @@ -21,5 +21,6 @@ public void testDeserialization() throws Exception { assertThat(maqlDdlLinks, is(notNullValue())); assertThat(maqlDdlLinks.getStatusLink(), is("/gdc/md/PROJECT_ID/tasks/123/status")); + assertThat(maqlDdlLinks.getStatusUri(), is("/gdc/md/PROJECT_ID/tasks/123/status")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectTest.java b/src/test/java/com/gooddata/project/ProjectTest.java index 93912b4b2..a22664932 100644 --- a/src/test/java/com/gooddata/project/ProjectTest.java +++ b/src/test/java/com/gooddata/project/ProjectTest.java @@ -1,24 +1,14 @@ package com.gooddata.project; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.StringContains.containsString; import static org.hamcrest.core.StringStartsWith.startsWith; -import static org.hamcrest.MatcherAssert.assertThat; - -import com.gooddata.md.AbstractObj; -import com.gooddata.md.Meta; public class ProjectTest { @@ -44,22 +34,37 @@ public void testDeserialize() throws Exception { assertThat(project.getUpdated(), is(new DateTime(2014, 4, 11, 11, 43, 47, DateTimeZone.UTC))); assertThat(project.getLdmThumbnailLink(), is("/gdc/projects/PROJECT_ID/ldm?thumbnail=1")); + assertThat(project.getLdmThumbnailUri(), is("/gdc/projects/PROJECT_ID/ldm?thumbnail=1")); assertThat(project.getUri(), is("/gdc/projects/PROJECT_ID")); assertThat(project.getClearCachesLink(), is("/gdc/projects/PROJECT_ID/clearCaches")); + assertThat(project.getClearCachesUri(), is("/gdc/projects/PROJECT_ID/clearCaches")); assertThat(project.getInvitationsLink(), is("/gdc/projects/PROJECT_ID/invitations")); + assertThat(project.getInvitationsUri(), is("/gdc/projects/PROJECT_ID/invitations")); assertThat(project.getUsersLink(), is("/gdc/projects/PROJECT_ID/users?link=1")); + assertThat(project.getUsersUri(), is("/gdc/projects/PROJECT_ID/users?link=1")); assertThat(project.getGroupsLink(), is("/gdc/projects/PROJECT_ID/groups")); + assertThat(project.getGroupsUri(), is("/gdc/projects/PROJECT_ID/groups")); assertThat(project.getUploadsLink(), is("https://ea-di.staging.getgooddata.com/project-uploads/PROJECT_ID/")); + assertThat(project.getUploadsUri(), is("https://ea-di.staging.getgooddata.com/project-uploads/PROJECT_ID/")); assertThat(project.getLdmLink(), is("/gdc/projects/PROJECT_ID/ldm")); + assertThat(project.getLdmUri(), is("/gdc/projects/PROJECT_ID/ldm")); assertThat(project.getMetadataLink(), is("/gdc/md/PROJECT_ID")); + assertThat(project.getMetadataUri(), is("/gdc/md/PROJECT_ID")); assertThat(project.getPublicArtifactsLink(), is("/gdc/projects/PROJECT_ID/publicartifacts")); + assertThat(project.getPublicArtifactsUri(), is("/gdc/projects/PROJECT_ID/publicartifacts")); assertThat(project.getRolesLink(), is("/gdc/projects/PROJECT_ID/roles")); + assertThat(project.getRolesUri(), is("/gdc/projects/PROJECT_ID/roles")); assertThat(project.getDataLoadLink(), is("/gdc/projects/PROJECT_ID/dataload")); + assertThat(project.getDataLoadUri(), is("/gdc/projects/PROJECT_ID/dataload")); assertThat(project.getConnectorsLink(), is("/gdc/projects/PROJECT_ID/connectors")); + assertThat(project.getConnectorsUri(), is("/gdc/projects/PROJECT_ID/connectors")); assertThat(project.getExecuteLink(), is("/gdc/projects/PROJECT_ID/execute")); + assertThat(project.getExecuteUri(), is("/gdc/projects/PROJECT_ID/execute")); assertThat(project.getSchedulesLink(), is("/gdc/projects/PROJECT_ID/schedules")); + assertThat(project.getSchedulesUri(), is("/gdc/projects/PROJECT_ID/schedules")); assertThat(project.getTemplatesLink(), is("/gdc/md/PROJECT_ID/templates")); assertThat(project.getEventStoresLink(), is("/gdc/projects/PROJECT_ID/dataload/eventstore/stores")); + assertThat(project.getEventStoresUri(), is("/gdc/projects/PROJECT_ID/dataload/eventstore/stores")); } @Test diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java index e7ef9e1d7..47757d553 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java @@ -57,7 +57,7 @@ public void shouldCreateWarehouse() throws Exception { .withStatus(202); onRequest() .havingMethodEqualTo("GET") - .havingPathEqualTo(pollingTask.getPollLink()) + .havingPathEqualTo(pollingTask.getPollUri()) .respond() .withStatus(202) .thenRespond() @@ -65,7 +65,7 @@ public void shouldCreateWarehouse() throws Exception { .withStatus(201); onRequest() .havingMethodEqualTo("GET") - .havingPathEqualTo(finishedTask.getWarehouseLink()) + .havingPathEqualTo(finishedTask.getWarehouseUri()) .respond() .withBody(readFromResource(WAREHOUSE)) .withStatus(200); @@ -86,7 +86,7 @@ public void shouldFailToCreateWarehouse() throws Exception { .withStatus(202); onRequest() .havingMethodEqualTo("GET") - .havingPathEqualTo(pollingTask.getPollLink()) + .havingPathEqualTo(pollingTask.getPollUri()) .respond() .withStatus(400) ; @@ -205,7 +205,7 @@ public void shouldAddUserToWarehouse() throws Exception { .withStatus(202); onRequest() .havingMethodEqualTo("GET") - .havingPathEqualTo(pollingTask.getPollLink()) + .havingPathEqualTo(pollingTask.getPollUri()) .respond() .withStatus(202) .thenRespond() @@ -213,7 +213,7 @@ public void shouldAddUserToWarehouse() throws Exception { .withStatus(201); onRequest() .havingMethodEqualTo("GET") - .havingPathEqualTo(finishedTask.getWarehouseUserLink()) + .havingPathEqualTo(finishedTask.getWarehouseUserUri()) .respond() .withBody(readFromResource(WAREHOUSE_USER)) .withStatus(200); @@ -236,7 +236,7 @@ public void shouldFailToAddUserToWarehouse() throws Exception { .withStatus(202); onRequest() .havingMethodEqualTo("GET") - .havingPathEqualTo(pollingTask.getPollLink()) + .havingPathEqualTo(pollingTask.getPollUri()) .respond() .withStatus(409); diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java index 893e4e90f..6c1a40d10 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java @@ -14,12 +14,14 @@ public class WarehouseTaskTest { public void testDeserializePoll() throws Exception { final WarehouseTask warehouseTask = deserialize("/warehouse/warehouseTask-poll.json"); assertThat(warehouseTask.getPollLink(), is("/gdc/datawarehouse/executions/executionId")); + assertThat(warehouseTask.getPollUri(), is("/gdc/datawarehouse/executions/executionId")); } @Test public void testDeserializeInstance() throws Exception { final WarehouseTask warehouseTask = deserialize("/warehouse/warehouseTask-finished.json"); assertThat(warehouseTask.getWarehouseLink(), is("/gdc/datawarehouse/instances/instanceId")); + assertThat(warehouseTask.getWarehouseUri(), is("/gdc/datawarehouse/instances/instanceId")); } private WarehouseTask deserialize(String path) throws Exception { diff --git a/src/test/resources/dataset/dataset.json b/src/test/resources/dataset/dataset.json new file mode 100644 index 000000000..f7eabfe2d --- /dev/null +++ b/src/test/resources/dataset/dataset.json @@ -0,0 +1,7 @@ +{ + "link": "/gdc/md/PROJECT_ID/ldm/singleloadinterface/dataset.person", + "identifier": "dataset.person", + "summary": "dataset single data loading interface specifications", + "category": "dataset-singleloadinterface", + "title": "Person" +} \ No newline at end of file From 0bc8891000541df4e7098def64a8293cac777469 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 1 Aug 2016 13:23:45 +0200 Subject: [PATCH 124/934] fix: ignore links field on metrics This field is added in R119, and because of Metric object doesn't ignore unknown fileds, the deserialization fails. Close: #339 --- src/main/java/com/gooddata/md/Metric.java | 2 + src/test/java/com/gooddata/md/MetricTest.java | 7 +++ src/test/resources/md/metric-links.json | 61 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 src/test/resources/md/metric-links.json diff --git a/src/main/java/com/gooddata/md/Metric.java b/src/main/java/com/gooddata/md/Metric.java index e0a25522d..4c5679ec0 100644 --- a/src/main/java/com/gooddata/md/Metric.java +++ b/src/main/java/com/gooddata/md/Metric.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -18,6 +19,7 @@ @JsonTypeName("metric") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties("links") public class Metric extends AbstractObj implements Queryable, Updatable { @JsonProperty("content") diff --git a/src/test/java/com/gooddata/md/MetricTest.java b/src/test/java/com/gooddata/md/MetricTest.java index e3581d744..271b82f56 100644 --- a/src/test/java/com/gooddata/md/MetricTest.java +++ b/src/test/java/com/gooddata/md/MetricTest.java @@ -57,4 +57,11 @@ public void fullJsonShouldStayTheSameAfterDeserializationAndSerializationBack() assertThat(metric, jsonNodeAbsent("metric.content.tree.content[0].content[0].content[0].content")); assertThat(metric, serializesToJson("/md/metric-out.json")); } + + @Test + public void shouldIgnoreLinksProperty() throws Exception { + final Metric metric = new ObjectMapper() + .readValue(getClass().getResourceAsStream("/md/metric-links.json"), Metric.class); + assertThat(metric, serializesToJson("/md/metric-out.json")); + } } \ No newline at end of file diff --git a/src/test/resources/md/metric-links.json b/src/test/resources/md/metric-links.json new file mode 100644 index 000000000..3982b5661 --- /dev/null +++ b/src/test/resources/md/metric-links.json @@ -0,0 +1,61 @@ +{ + "metric": { + "content": { + "format": "#,##0", + "tree": { + "content": [ + { + "content": [ + { + "value": "AVG", + "content": [ + { + "value": "/gdc/md/PROJECT_ID/obj/EXPR_ID", + "position": { + "column": 12, + "line": 2 + }, + "type": "fact object" + } + ], + "position": { + "column": 8, + "line": 2 + }, + "type": "function" + } + ], + "position": { + "column": 8, + "line": 2 + }, + "type": "expression" + } + ], + "position": { + "column": 1, + "line": 2 + }, + "type": "metric" + }, + "expression": "SELECT AVG([/gdc/md/PROJECT_ID/obj/EXPR_ID])" + }, + "links": { + "explain2": "/gdc/md/cpn1dbltx3at2wrmfl79inlxs76oxb7h/obj/47/explain2" + }, + "meta": { + "author": "/gdc/account/profile/PROFILE_ID", + "uri": "/gdc/md/PROJECT_ID/obj/47", + "tags": "", + "created": "2015-10-10 12:56:13", + "identifier": "MY_ID", + "deprecated": "0", + "summary": "", + "isProduction": 1, + "title": "Avg shoe size", + "category": "metric", + "updated": "2015-10-10 12:56:13", + "contributor": "/gdc/account/profile/PROFILE_ID" + } + } +} \ No newline at end of file From 6210b88edcf96fb6b5029bddaed982b9f2c348bb Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 1 Aug 2016 15:18:53 +0200 Subject: [PATCH 125/934] [maven-release-plugin] prepare release gooddata-java-1.5.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c291e6226..627dbe120 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.5.2-SNAPSHOT + 1.5.2 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From b6bbecfbc0dd683da6caa4f7700613b7143fc3b5 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 1 Aug 2016 15:18:54 +0200 Subject: [PATCH 126/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 627dbe120..c7195e6df 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.5.2 + 1.5.3-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From f15161c3c4d2155871f00b87a2cd3f476ae03bf5 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 1 Aug 2016 15:30:57 +0200 Subject: [PATCH 127/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f1f35e0ca..44a10e834 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.5.1 + 1.5.2 ``` From ffe09f61f028baf01ca839039e8d90fafa82243a Mon Sep 17 00:00:00 2001 From: Peter Plochan Date: Tue, 2 Aug 2016 13:55:44 +0200 Subject: [PATCH 128/934] Refactor ProjectValidationResult*ElParam classes Removed useless field 'vals' from ProjectValidationResultGdcTimeElParam Removed ProjectValidationResultElParam Add asMap method generating collection of tuples in ProjectValidationResultSliElParam --- .../ProjectValidationResultElParam.java | 37 --------- ...ProjectValidationResultGdcTimeElParam.java | 47 +++++++---- .../ProjectValidationResultSliElParam.java | 77 ++++++++++++++++++- .../ProjectValidationResultParamTest.java | 2 +- ...ProjectValidationResultSliElParamTest.java | 45 +++++++++++ .../project-validationResultParam.json | 3 +- 6 files changed, 156 insertions(+), 55 deletions(-) delete mode 100644 src/main/java/com/gooddata/project/ProjectValidationResultElParam.java create mode 100644 src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultElParam.java deleted file mode 100644 index e37e1540d..000000000 --- a/src/main/java/com/gooddata/project/ProjectValidationResultElParam.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. - */ -package com.gooddata.project; - -import java.util.List; - -abstract class ProjectValidationResultElParam extends ProjectValidationResultParam { - - private final List ids; - private final List vals; - - protected ProjectValidationResultElParam(final List ids, final List vals) { - this.ids = ids; - this.vals = vals; - } - - public List getIds() { - return ids; - } - - public List getVals() { - return vals; - } - - @Override - public int hashCode() { - int result = ids != null ? ids.hashCode() : 0; - result = 31 * result + (vals != null ? vals.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return ids + " " + vals; - } -} diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java index 383583e13..b39350e0f 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java @@ -6,31 +6,52 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import java.util.List; +import java.util.Objects; @JsonTypeName("gdctime_el") @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectValidationResultGdcTimeElParam extends ProjectValidationResultElParam { +public class ProjectValidationResultGdcTimeElParam extends ProjectValidationResultParam { - ProjectValidationResultGdcTimeElParam(final List ids, final List vals) { - super(ids, vals); + private final List ids; + + ProjectValidationResultGdcTimeElParam(final List ids) { + this.ids = ids; } @JsonCreator - private static ProjectValidationResultGdcTimeElParam create(@JsonProperty("ids") List ids, @JsonProperty("vals") List vals) { - return new ProjectValidationResultGdcTimeElParam(ids, vals); + private static ProjectValidationResultGdcTimeElParam create(@JsonProperty("ids") List ids) { + return new ProjectValidationResultGdcTimeElParam(ids); } - @Override - public boolean equals(final Object o) { - if (this == o) return true; - if (!(o instanceof ProjectValidationResultGdcTimeElParam)) return false; + public List getIds() { + return ids; + } - ProjectValidationResultGdcTimeElParam that = (ProjectValidationResultGdcTimeElParam) o; + /** + * @deprecated for backward compatibility only. Do not use this method, it always returns null. + */ + @Deprecated + public List getVals() { + return null; + } - if (getIds() != null ? !getIds().equals(that.getIds()) : that.getIds() != null) return false; - if (getVals() != null ? !getVals().equals(that.getVals()) : that.getVals() != null) return false; + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof ProjectValidationResultGdcTimeElParam)) + return false; + ProjectValidationResultGdcTimeElParam that = (ProjectValidationResultGdcTimeElParam) o; + return Objects.equals(ids, that.ids); + } - return true; + @Override + public int hashCode() { + return Objects.hash(ids); } + @Override + public String toString() { + return ids.toString(); + } } diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java index b3708eadf..1f9263832 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java @@ -1,18 +1,26 @@ package com.gooddata.project; +import static java.lang.String.format; + import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.HashMap; import java.util.List; +import java.util.Map; @JsonTypeName("sli_el") @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectValidationResultSliElParam extends ProjectValidationResultElParam { +public class ProjectValidationResultSliElParam extends ProjectValidationResultParam { + + private final List ids; + private final List vals; ProjectValidationResultSliElParam(final List ids, final List vals) { - super(ids, vals); + this.ids = ids; + this.vals = vals; } @JsonCreator @@ -20,6 +28,60 @@ private static ProjectValidationResultSliElParam create(@JsonProperty("ids") Lis return new ProjectValidationResultSliElParam(ids, vals); } + /** + * Returns list of IDs. IDs are primary property of this param. + */ + public List getIds() { + return ids; + } + + /** + * Returns list of values. Values have only informative character and are connected to IDs. + * + * @see #getIds() + */ + public List getVals() { + return vals; + } + + /** + * Returns map of tuples {@code }. Tuples are constructed from lists of IDs and values + * according these assumptions: + *
    + *
  • Sizes of both lists are equal.
  • + *
  • ID and it's corresponding value are on the same index.
  • + *
+ * + * @see #getIds() + * @see #getVals() + * + * @return {@code null} when ids are {@code null} or map of tuples + * @throws IllegalStateException
    + *
  • when ids are not {@code null} and vals are {@code null}
  • + *
  • when sizes of ids and vals lists are not equal
  • + *
+ */ + public Map asMap() { + if (ids == null) { + return null; + } + + if (vals == null) { + throw new IllegalStateException("Values not defined for IDs."); + } + + if (ids.size() != vals.size()) { + throw new IllegalStateException(format("Size of list of IDs (%s) and corresponding list of their values (%s)" + + " is not equal.", ids.size(), vals.size())); + } + + final HashMap sliElParamMap = new HashMap<>(ids.size()); + for (int index = 0; index < ids.size(); index++) { + sliElParamMap.put(ids.get(index), vals.get(index)); + } + return sliElParamMap; + } + @Override public boolean equals(final Object o) { if (this == o) return true; @@ -33,4 +95,15 @@ public boolean equals(final Object o) { return true; } + @Override + public int hashCode() { + int result = ids != null ? ids.hashCode() : 0; + result = 31 * result + (vals != null ? vals.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return ids + " " + vals; + } } diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java index 60846d42e..4a3ece4cc 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java @@ -22,6 +22,6 @@ public void testDeser() throws Exception { assertThat(result, hasItem(sameBeanAs(new ProjectValidationResultStringParam("report")))); assertThat(result, hasItem(sameBeanAs(new ProjectValidationResultObjectParam("Historical backlog", "/gdc/md/d45dlwq6fixqsgbukrlnir1qsw8y44q6/obj/41886")))); assertThat(result, hasItem(sameBeanAs(new ProjectValidationResultSliElParam(asList("4761"), asList("Deleted"))))); - assertThat(result, hasItem(sameBeanAs(new ProjectValidationResultGdcTimeElParam(asList("4762"), asList("Deleted"))))); + assertThat(result, hasItem(sameBeanAs(new ProjectValidationResultGdcTimeElParam(asList("4762"))))); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java new file mode 100644 index 000000000..8077d46e6 --- /dev/null +++ b/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java @@ -0,0 +1,45 @@ +package com.gooddata.project; + +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; + +import org.testng.annotations.Test; + +import java.util.HashMap; +import java.util.Map; + +public class ProjectValidationResultSliElParamTest { + + @Test + public void testAsMapNullIds() throws Exception { + final ProjectValidationResultSliElParam param = new ProjectValidationResultSliElParam(null, singletonList("2")); + + assertThat(param.asMap(), nullValue()); + } + + @Test(expectedExceptions = IllegalStateException.class) + public void testAsMapNullVals() throws Exception { + new ProjectValidationResultSliElParam(singletonList("2"), null).asMap(); + } + + @Test(expectedExceptions = IllegalStateException.class) + public void testAsMapNotEqualIdsVals() throws Exception { + new ProjectValidationResultSliElParam(asList("2", "1"), singletonList("1234")).asMap(); + } + + @Test + public void testAsMap() throws Exception { + final ProjectValidationResultSliElParam param = + new ProjectValidationResultSliElParam(asList("1", "3", "2"), asList("1234", "9012", "5678")); + + final Map expectedMap = new HashMap<>(3); + expectedMap.put("1", "1234"); + expectedMap.put("2", "5678"); + expectedMap.put("3", "9012"); + + assertThat(param.asMap(), is(expectedMap)); + } +} \ No newline at end of file diff --git a/src/test/resources/project/project-validationResultParam.json b/src/test/resources/project/project-validationResultParam.json index 08d800fcb..30d109a79 100644 --- a/src/test/resources/project/project-validationResultParam.json +++ b/src/test/resources/project/project-validationResultParam.json @@ -17,8 +17,7 @@ }, { "gdctime_el": { - "ids": ["4762"], - "vals": ["Deleted"] + "ids": ["4762"] } } ] From c4e45f7097810fdd79971043383405bb86225cc7 Mon Sep 17 00:00:00 2001 From: Peter Plochan Date: Thu, 4 Aug 2016 09:39:46 +0200 Subject: [PATCH 129/934] ProjectValidationResultSliElParam#asMap returns LinkedHashMap to preserve ordering --- .../gooddata/project/ProjectValidationResultSliElParam.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java index 1f9263832..626c278c9 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -75,7 +75,7 @@ public Map asMap() { + " is not equal.", ids.size(), vals.size())); } - final HashMap sliElParamMap = new HashMap<>(ids.size()); + final Map sliElParamMap = new LinkedHashMap<>(ids.size()); for (int index = 0; index < ids.size(); index++) { sliElParamMap.put(ids.get(index), vals.get(index)); } From c0aad67feab9e419b1ae382b7064e4c3b22ad9cd Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 4 Aug 2016 10:10:10 +0200 Subject: [PATCH 130/934] [maven-release-plugin] prepare release gooddata-java-1.6.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c7195e6df..9a420e30f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.5.3-SNAPSHOT + 1.6.0 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From ed4c81e2db15062c516c30d80c4aad61ae69bd46 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 4 Aug 2016 10:10:11 +0200 Subject: [PATCH 131/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9a420e30f..e2abcdb19 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.6.0 + 1.6.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 222919835451635b401b77a2ae91b4846803464a Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 4 Aug 2016 10:21:29 +0200 Subject: [PATCH 132/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 44a10e834..50cde79a8 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.5.2 + 1.6.0 ``` From c44d2d82141823673c34a2b8b73ac37cc55efbe3 Mon Sep 17 00:00:00 2001 From: Petr Vales Date: Tue, 16 Aug 2016 15:13:41 +0200 Subject: [PATCH 133/934] fix formatting --- src/test/java/com/gooddata/AbstractGoodDataAT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/gooddata/AbstractGoodDataAT.java b/src/test/java/com/gooddata/AbstractGoodDataAT.java index 23b74f270..47200d329 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataAT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataAT.java @@ -25,7 +25,7 @@ public abstract class AbstractGoodDataAT { "sdktest " + new LocalDate() + " " + System.getenv("BUILD_NUMBER"); protected static final GoodData gd = - new GoodData(getProperty("host"), getProperty("login"), getProperty("pass")){ + new GoodData(getProperty("host"), getProperty("login"), getProperty("pass")) { /** * had to be overriden to access connectionManager, to test how many connections were not closed */ From 7e40bcb29fc9599c06368d6d220881fce54bdc90 Mon Sep 17 00:00:00 2001 From: Petr Vales Date: Tue, 16 Aug 2016 15:13:56 +0200 Subject: [PATCH 134/934] add support for creating and removing user accounts --- pom.xml | 1 + .../java/com/gooddata/account/Account.java | 59 +++++- .../account/AccountNotFoundException.java | 21 ++ .../com/gooddata/account/AccountService.java | 76 ++++++- .../gooddata/account/AccountServiceAT.java | 48 ++++- .../gooddata/account/AccountServiceIT.java | 191 ++++++++++++++++++ .../com/gooddata/account/AccountTest.java | 18 +- .../account/create-account-response.json | 3 + .../resources/account/create-account.json | 10 + 9 files changed, 407 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/gooddata/account/AccountNotFoundException.java create mode 100644 src/test/java/com/gooddata/account/AccountServiceIT.java create mode 100644 src/test/resources/account/create-account-response.json create mode 100644 src/test/resources/account/create-account.json diff --git a/pom.xml b/pom.xml index e2abcdb19..8cb01ce07 100644 --- a/pom.xml +++ b/pom.xml @@ -186,6 +186,7 @@ + isolated_domain **/*AT.java diff --git a/src/main/java/com/gooddata/account/Account.java b/src/main/java/com/gooddata/account/Account.java index 904131dd5..3a51524c5 100644 --- a/src/main/java/com/gooddata/account/Account.java +++ b/src/main/java/com/gooddata/account/Account.java @@ -22,33 +22,68 @@ public class Account { public static final String URI = "/gdc/account/profile/{id}"; + public static final String ACCOUNTS_URI = "/gdc/account/domains/{organization_name}/users"; public static final UriTemplate TEMPLATE = new UriTemplate(URI); + public static final UriTemplate ACCOUNTS_TEMPLATE = new UriTemplate(ACCOUNTS_URI); public static final String LOGIN_URI = "/gdc/account/login/{id}"; public static final UriTemplate LOGIN_TEMPLATE = new UriTemplate(LOGIN_URI); public static final String CURRENT_ID = "current"; - + private final String login; + private final String email; + private final String password; + private final String verifyPassword; private final String firstName; private final String lastName; @JsonIgnore private final Links links; @JsonCreator - public Account(@JsonProperty("firstName") String firstName, - @JsonProperty("lastName") String lastName, - @JsonProperty("links") Links links) { + private Account( + @JsonProperty("login") String login, + @JsonProperty("email") String email, + @JsonProperty("password") String password, + @JsonProperty("verifyPassword") String verifyPassword, + @JsonProperty("firstName") String firstName, + @JsonProperty("lastName") String lastName, + @JsonProperty("links") Links links + ) { + this.login = login; + this.email = email; + this.password = password; + this.verifyPassword = verifyPassword; this.firstName = firstName; this.lastName = lastName; this.links = links; } - /* Just for serialization test */ - Account(String firstName, String lastName) { - this.firstName = firstName; - this.lastName = lastName; - links = null; + public Account(String firstName,String lastName, Links links) { + this(null, null, null, null, firstName, lastName, links); + } + + /** + * Account creation constructor + */ + public Account(String email, String password, String firstName, String lastName) { + this(email, email, password, password, firstName, lastName, null); + } + + public String getLogin() { + return login; + } + + public String getEmail() { + return email; + } + + public String getPassword() { + return password; + } + + public String getVerifyPassword() { + return verifyPassword; } public String getFirstName() { @@ -71,7 +106,7 @@ public String getProjectsLink() { @JsonIgnore public String getId() { - return TEMPLATE.match(getUri()).get("id"); + return getId(getUri()); } @JsonIgnoreProperties(ignoreUnknown = true) @@ -93,4 +128,8 @@ public String getProjects() { return projects; } } + + static String getId(String uri) { + return TEMPLATE.match(uri).get("id"); + } } diff --git a/src/main/java/com/gooddata/account/AccountNotFoundException.java b/src/main/java/com/gooddata/account/AccountNotFoundException.java new file mode 100644 index 000000000..9567d8cb3 --- /dev/null +++ b/src/main/java/com/gooddata/account/AccountNotFoundException.java @@ -0,0 +1,21 @@ +package com.gooddata.account; + +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; + +/** + * Account doesn't exist. + */ +public class AccountNotFoundException extends GoodDataException { + + private final String accountUri; + + public AccountNotFoundException(String uri, GoodDataRestException cause) { + super("Account " + uri + " was not found", cause); + this.accountUri = uri; + } + + public String getAccountUri() { + return accountUri; + } +} diff --git a/src/main/java/com/gooddata/account/AccountService.java b/src/main/java/com/gooddata/account/AccountService.java index 5e9e727da..f3d978e6b 100644 --- a/src/main/java/com/gooddata/account/AccountService.java +++ b/src/main/java/com/gooddata/account/AccountService.java @@ -5,9 +5,15 @@ import com.gooddata.AbstractService; import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; +import com.gooddata.gdc.UriResponse; +import org.springframework.http.HttpStatus; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + /** * Service to access and manipulate account. */ @@ -29,11 +35,7 @@ public AccountService(RestTemplate restTemplate) { * @throws com.gooddata.GoodDataException when current account can't be accessed. */ public Account getCurrent() { - try { - return restTemplate.getForObject(Account.URI, Account.class, Account.CURRENT_ID); - } catch (GoodDataException | RestClientException e) { - throw new GoodDataException("Unable to get current account", e); - } + return getAccount(Account.CURRENT_ID); } /** @@ -49,4 +51,68 @@ public void logout() { throw new GoodDataException("Unable to logout", e); } } + + /** + * Creates new account in given organization (domain). + * Only domain admin is allowed create new accounts! This means rest request has to authorized as domain admin. + * @param account to create + * @param organizationName (domain) in which account should be created + * @return new account + * @throws GoodDataException when account can't be created + */ + public Account createAccount(Account account, String organizationName) { + notNull(account, "account"); + notEmpty(organizationName, "organizationName"); + + try { + final UriResponse uriResponse = restTemplate.postForObject(Account.ACCOUNTS_URI, account, UriResponse.class, organizationName); + return getAccount(Account.getId(uriResponse.getUri())); + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to create account", e); + } + } + + /** + * Delete given account + * @param account to remove + * @throws AccountNotFoundException when given account wasn't found + * @throws GoodDataException when account can't be removed for other reason + */ + public void removeAccount(Account account) { + notNull(account, "account"); + + try { + restTemplate.delete(account.getUri()); + } catch (GoodDataRestException e) { + if (HttpStatus.NOT_FOUND.value() == e.getStatusCode()) { + throw new AccountNotFoundException(account.getUri(), e); + } else { + throw e; + } + } catch (GoodDataException e) { + throw new GoodDataException("Unable to remove account", e); + } + } + + /** + * Get account for given account id + * @param id to search for + * @return account for id + * @throws AccountNotFoundException when account for given id can't be found + * @throws GoodDataException + */ + public Account getAccount(String id) { + try { + return restTemplate.getForObject(Account.URI, Account.class, id); + } catch (GoodDataRestException e) { + if (HttpStatus.NOT_FOUND.value() == e.getStatusCode()) { + throw new AccountNotFoundException(Account.TEMPLATE.expand(id).toString(), e); + } else { + throw e; + } + } catch (RestClientException e) { + throw new GoodDataException("Unable to get account", e); + } + } + } diff --git a/src/test/java/com/gooddata/account/AccountServiceAT.java b/src/test/java/com/gooddata/account/AccountServiceAT.java index ac393316b..b66b55e2d 100644 --- a/src/test/java/com/gooddata/account/AccountServiceAT.java +++ b/src/test/java/com/gooddata/account/AccountServiceAT.java @@ -1,9 +1,13 @@ package com.gooddata.account; import com.gooddata.AbstractGoodDataAT; +import org.testng.annotations.AfterClass; import org.testng.annotations.Test; +import java.util.UUID; + import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -13,11 +17,53 @@ @Test(groups = "account") public class AccountServiceAT extends AbstractGoodDataAT { + private static final String LOGIN = "john.smith." + UUID.randomUUID() + "@gooddata.com"; + + private final AccountService accountService = gd.getAccountService(); + + private Account account; + @Test public void login() throws Exception { - final AccountService accountService = gd.getAccountService(); final Account current = accountService.getCurrent(); assertThat(current.getId(), is(notNullValue())); } + @Test(groups = "isolated_domain") + public void createAccount() { + final Account newAccount = new Account(LOGIN, "w4yYxSQpAbaODA64", "FistName", "LastName"); + + account = accountService.createAccount(newAccount, getProperty("domain")); + + assertThat(account, is(notNullValue())); + assertThat(account.getId(), is(notNullValue())); + assertThat(account.getLogin(), is(LOGIN)); + } + + @Test(groups = "isolated_domain", dependsOnMethods = "createAccount") + public void getAccount() { + final Account foundAccount = accountService.getAccount(this.account.getId()); + + assertThat(foundAccount, is(notNullValue())); + assertThat(foundAccount.getId(), is(notNullValue())); + assertThat(foundAccount.getId(), is(account.getId())); + assertThat(foundAccount.getLogin(), is(LOGIN)); + assertThat(foundAccount.getLogin(), is(account.getLogin())); + } + + @Test(groups = "isolated_domain", dependsOnMethods = "getAccount") + public void removeAccount() { + accountService.removeAccount(account); + account = null; + } + + @AfterClass + public void tearDown() { + if (account != null) { + try { + accountService.removeAccount(account); + } catch (Exception ignored) {} + } + } + } diff --git a/src/test/java/com/gooddata/account/AccountServiceIT.java b/src/test/java/com/gooddata/account/AccountServiceIT.java new file mode 100644 index 000000000..d01def336 --- /dev/null +++ b/src/test/java/com/gooddata/account/AccountServiceIT.java @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.account; + +import com.gooddata.AbstractGoodDataIT; +import com.gooddata.GoodDataException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.io.IOException; + +import static com.gooddata.util.ResourceUtils.readFromResource; +import static net.jadler.Jadler.onRequest; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.core.Is.is; + +public class AccountServiceIT extends AbstractGoodDataIT { + + private static final String CREATE_ACCOUNT = "/account/create-account.json"; + private static final String ACCOUNT = "/account/account.json"; + private static final String ACCOUNT_ID = "ID"; + private static final String ACCOUNT_URI = Account.TEMPLATE.expand(ACCOUNT_ID).toString(); + private static final String CURRENT_ACCOUNT_URI = Account.TEMPLATE.expand(Account.CURRENT_ID).toString(); + private static final String LOGOUT_CURRENT = Account.LOGIN_TEMPLATE.expand(ACCOUNT_ID).toString(); + private static final String DOMAIN = "default"; + + private static Account account; + private static Account createAccount; + + @BeforeClass + public void init() throws IOException { + account = MAPPER.readValue(readFromResource(ACCOUNT), Account.class); + createAccount = MAPPER.readValue(readFromResource(CREATE_ACCOUNT), Account.class); + } + + @Test + public void shouldCreateAccount() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(Account.ACCOUNTS_TEMPLATE.expand(DOMAIN).toString()) + .respond() + .withBody("{\"uri\": \"" + ACCOUNT_URI + "\"}") + .withStatus(201); + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(ACCOUNT_URI) + .respond() + .withBody(readFromResource(ACCOUNT)) + .withStatus(200); + + final Account created = gd.getAccountService().createAccount(createAccount, DOMAIN); + + assertThat(created, notNullValue()); + assertThat(created.getFirstName(), is("Blah")); + } + + @Test(expectedExceptions = GoodDataException.class) + public void shouldFailToCreateAccount() { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(Account.ACCOUNTS_TEMPLATE.expand(DOMAIN).toString()) + .respond() + .withBody("") + .withStatus(400); + + gd.getAccountService().createAccount(createAccount, DOMAIN); + } + + @Test + public void shouldRemoveAccount() throws Exception { + onRequest() + .havingMethodEqualTo("DELETE") + .havingPathEqualTo(ACCOUNT_URI) + .respond() + .withStatus(204); + + gd.getAccountService().removeAccount(account); + } + + @Test(expectedExceptions = AccountNotFoundException.class) + public void shouldFailToFindAccountForRemoval() throws Exception { + onRequest() + .havingMethodEqualTo("DELETE") + .havingPathEqualTo(ACCOUNT_URI) + .respond() + .withStatus(404); + + gd.getAccountService().removeAccount(account); + } + + @Test + public void shouldGetCurrentAccount() { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(CURRENT_ACCOUNT_URI) + .respond() + .withBody(readFromResource(ACCOUNT)) + .withStatus(200); + + final Account current = gd.getAccountService().getCurrent(); + + assertThat(current, notNullValue()); + assertThat(current.getFirstName(), is("Blah")); + } + + @Test(expectedExceptions = GoodDataException.class) + public void shouldFailToGetCurrentAccount() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(CURRENT_ACCOUNT_URI) + .respond() + .withStatus(400); + + gd.getAccountService().getCurrent(); + } + + @Test(expectedExceptions = AccountNotFoundException.class) + public void shouldFailToFindCurrentAccount() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(CURRENT_ACCOUNT_URI) + .respond() + .withStatus(404); + + gd.getAccountService().getCurrent(); + } + + @Test + public void shouldLogout() { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(CURRENT_ACCOUNT_URI) + .respond() + .withBody(readFromResource(ACCOUNT)) + .withStatus(200); + onRequest() + .havingMethodEqualTo("DELETE") + .havingPathEqualTo(LOGOUT_CURRENT) + .respond() + .withBody(readFromResource(ACCOUNT)) + .withStatus(204); + + gd.getAccountService().logout(); + } + + @Test(expectedExceptions = GoodDataException.class) + public void shouldFailToLogout() { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(CURRENT_ACCOUNT_URI) + .respond() + .withBody(readFromResource(ACCOUNT)) + .withStatus(200); + onRequest() + .havingMethodEqualTo("DELETE") + .havingPathEqualTo(LOGOUT_CURRENT) + .respond() + .withStatus(400); + + gd.getAccountService().logout(); + } + + @Test + public void shouldGetAccount() { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(ACCOUNT_URI) + .respond() + .withBody(readFromResource(ACCOUNT)) + .withStatus(200); + + final Account created = gd.getAccountService().getAccount(ACCOUNT_ID); + + assertThat(created, notNullValue()); + assertThat(created.getFirstName(), is("Blah")); + } + + @Test(expectedExceptions = AccountNotFoundException.class) + public void shouldFailToFindAccount() { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(ACCOUNT_URI) + .respond() + .withStatus(404); + + gd.getAccountService().getAccount(ACCOUNT_ID); + } + +} diff --git a/src/test/java/com/gooddata/account/AccountTest.java b/src/test/java/com/gooddata/account/AccountTest.java index 24ea11b53..c58a83f95 100644 --- a/src/test/java/com/gooddata/account/AccountTest.java +++ b/src/test/java/com/gooddata/account/AccountTest.java @@ -10,14 +10,18 @@ public class AccountTest { + private static final String MAIL = "fake@gooddata.com"; + private static final String FIRST_NAME = "Blah"; + private static final String LAST_NAME = "Muhehe"; + @Test public void testDeserialize() throws Exception { final Account account = new ObjectMapper() .readValue(getClass().getResourceAsStream("/account/account.json"), Account.class); assertThat(account, is(notNullValue())); - assertThat(account.getFirstName(), is("Blah")); - assertThat(account.getLastName(), is("Muhehe")); + assertThat(account.getFirstName(), is(FIRST_NAME)); + assertThat(account.getLastName(), is(LAST_NAME)); assertThat(account.getId(), is("ID")); assertThat(account.getUri(), is("/gdc/account/profile/ID")); assertThat(account.getProjectsLink(), is("/gdc/account/profile/ID/projects")); @@ -25,8 +29,14 @@ public void testDeserialize() throws Exception { @Test public void testSerialization() { - final Account account = new Account("Blah", "Muhehe"); + final Account account = new Account(FIRST_NAME, LAST_NAME, null); assertThat(account, serializesToJson("/account/account-input.json")); } -} \ No newline at end of file + @Test + public void testSerializationOfCreateAccount() { + final Account account = new Account(MAIL, "password", FIRST_NAME, LAST_NAME); + assertThat(account, serializesToJson("/account/create-account.json")); + } + +} diff --git a/src/test/resources/account/create-account-response.json b/src/test/resources/account/create-account-response.json new file mode 100644 index 000000000..aa39b07f8 --- /dev/null +++ b/src/test/resources/account/create-account-response.json @@ -0,0 +1,3 @@ +{ + "uri": "/gdc/account/profile/ID" +} diff --git a/src/test/resources/account/create-account.json b/src/test/resources/account/create-account.json new file mode 100644 index 000000000..090d518ad --- /dev/null +++ b/src/test/resources/account/create-account.json @@ -0,0 +1,10 @@ +{ + "accountSetting" : { + "login": "fake@gooddata.com", + "email": "fake@gooddata.com", + "password": "password", + "verifyPassword": "password", + "firstName" : "Blah", + "lastName" : "Muhehe" + } +} From ffea6b8605b7e4e3e04f6928983cb823bade5d0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Wed, 17 Aug 2016 11:39:28 +0200 Subject: [PATCH 135/934] Allow deploying processes from appstore --- .../dataload/processes/AsyncTask.java | 56 ++++++++++++++ .../dataload/processes/DataloadProcess.java | 13 +++- .../dataload/processes/ProcessService.java | 73 ++++++++++++++++++- .../dataload/processes/ProcessServiceAT.java | 23 +++++- .../dataload/processes/ProcessServiceIT.java | 64 +++++++++++++++- .../processes/ProcessServiceTest.java | 2 +- .../dataload/processes/appstoreProcess.json | 16 ++++ .../dataload/processes/asyncTask.json | 7 ++ 8 files changed, 244 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/gooddata/dataload/processes/AsyncTask.java create mode 100644 src/test/resources/dataload/processes/appstoreProcess.json create mode 100644 src/test/resources/dataload/processes/asyncTask.json diff --git a/src/main/java/com/gooddata/dataload/processes/AsyncTask.java b/src/main/java/com/gooddata/dataload/processes/AsyncTask.java new file mode 100644 index 000000000..a7be6a876 --- /dev/null +++ b/src/main/java/com/gooddata/dataload/processes/AsyncTask.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ +package com.gooddata.dataload.processes; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * Asynchronous task containing link for polling. + * This task differs from {@link com.gooddata.gdc.AsyncTask} in links field. + * Deserialization only. + */ +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonTypeName("asyncTask") +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +class AsyncTask { + + @JsonProperty + private Links links; + + @JsonCreator + private AsyncTask(@JsonProperty("links") Links links) { + this.links = links; + } + + public AsyncTask(final String uri) { + this.links = new Links(uri); + } + + @JsonIgnore + public String getUri() { + return links.getPoll(); + } + + private static class Links { + + private final String poll; + + @JsonCreator + private Links(@JsonProperty("poll") String poll) { + this.poll = poll; + } + + public String getPoll() { + return poll; + } + } + +} diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index ae0a7030b..7d83e1903 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -43,9 +43,16 @@ public DataloadProcess(String name, String type) { this.type = notEmpty(type, "type"); } - DataloadProcess(String name, String type, String path) { + /** + * Use this constructor, when you want to deploy process from appstore. + * + * @param name + * @param type + * @param appstorePath valid path to brick in appstore + */ + public DataloadProcess(String name, String type, String appstorePath) { this(name, type); - this.path = path; + this.path = appstorePath; } public DataloadProcess(String name, ProcessType type) { @@ -81,7 +88,7 @@ public String getPath() { return path; } - void setPath(String path) { + public void setPath(String path) { this.path = path; } diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index 9fbccf5b3..eb9bc78cb 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -6,6 +6,7 @@ import com.gooddata.PollResult; import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; +import com.gooddata.SimplePollHandler; import com.gooddata.account.AccountService; import com.gooddata.collections.Page; import com.gooddata.collections.PageableList; @@ -38,6 +39,7 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; import static java.util.Collections.emptyList; +import static org.apache.commons.lang.Validate.isTrue; /** * Service to manage dataload processes and process executions. @@ -65,6 +67,7 @@ public ProcessService(RestTemplate restTemplate, AccountService accountService, /** * Create new process with given data by given project. + * Process must have null path to prevent clashes with deploying from appstore. * * @param project project to which the process belongs * @param process to create @@ -75,13 +78,14 @@ public DataloadProcess createProcess(Project project, DataloadProcess process, F notNull(process, "process"); notNull(processData, "processData"); notNull(project, "project"); - + isTrue(process.getPath() == null, "Process path has to be null, use processData argument. If you want to create process from appstore, use method createProcessFromAppstore()"); return postProcess(process, processData, getProcessesUri(project)); } /** * Create new process without data. * Only some specific types of processes can be created without data. + * Process must have null path to prevent clashes with deploying from appstore. * * @param project project to which the process belongs * @param process to create @@ -90,12 +94,29 @@ public DataloadProcess createProcess(Project project, DataloadProcess process, F public DataloadProcess createProcess(Project project, DataloadProcess process) { notNull(project, "project"); notNull(process, "process"); - + isTrue(process.getPath() == null, "Process path has to be null. If you want to create process from appstore, use method createProcessFromAppstore()"); return postProcess(process, getProcessesUri(project)); } + /** + * Create new process from appstore. + * Process must have set path field to valid appstore path in order to deploy from appstore. + * This method is asynchronous, because when deploying from appstore, deployment worker can be triggered. + * + * @param project project to which the process belongs + * @param process to create + * @return created process + */ + public FutureResult createProcessFromAppstore(Project project, DataloadProcess process) { + notNull(project, "project"); + notNull(process, "process"); + notEmpty(process.getPath(), "process path must not be empty"); + return postProcess(process, getProcessesUri(project), HttpMethod.POST); + } + /** * Update process with given data by given project. + * Process must have null path to prevent clashes with deploying from appstore. * * @param project project to which the process belongs * @param process to create @@ -106,10 +127,26 @@ public DataloadProcess updateProcess(Project project, DataloadProcess process, F notNull(process, "process"); notNull(processData, "processData"); notNull(project, "project"); - + isTrue(process.getPath() == null, "Process path has to be null, use processData argument. If you want to update process from appstore, use method updateProcessFromAppstore()"); return postProcess(process, processData, getProcessUri(project, process.getId())); } + /** + * Update process with data from appstore by given project. + * Process must have set path field to valid appstore path in order to deploy from appstore. + * This method is asynchronous, because when deploying from appstore, deployment worker can be triggered. + * + * @param project project to which the process belongs + * @param process to update + * @return updated process + */ + public FutureResult updateProcessFromAppstore(Project project, DataloadProcess process) { + notNull(project, "project"); + notNull(process, "process"); + notEmpty(process.getPath(), "process path must not be empty"); + return postProcess(process, getProcessUri(project, process.getId()), HttpMethod.PUT); + } + /** * Get process by given URI. * @param uri process uri @@ -481,6 +518,35 @@ private DataloadProcess postProcess(DataloadProcess process, File processData, U } } + private FutureResult postProcess(DataloadProcess process, URI postUri, HttpMethod method) { + try { + ResponseEntity exchange = restTemplate.exchange(postUri, method, new HttpEntity<>(process), String.class); + if (exchange.getStatusCode() == HttpStatus.ACCEPTED) { //deployment worker will create process + AsyncTask asyncTask = mapper.readValue(exchange.getBody(), AsyncTask.class); + return new PollResult<>(this, new SimplePollHandler(asyncTask.getUri(), DataloadProcess.class) { + + @Override + public void handlePollException(GoodDataRestException e) { + throw new GoodDataException("Creating process failed", e); + } + }); + } else if (exchange.getStatusCode() == HttpStatus.OK) { //object has been found in package registry, deployment worker is not triggered + final DataloadProcess dataloadProcess = mapper.readValue(exchange.getBody(), DataloadProcess.class); + return new PollResult<>(this, new SimplePollHandler(dataloadProcess.getUri(), DataloadProcess.class) { + + @Override + public void handlePollException(GoodDataRestException e) { + throw new GoodDataException("Creating process failed", e); + } + }); + } else { + throw new IllegalStateException("Unexpected status code from resource: " + exchange.getStatusCode()); + } + } catch (RestClientException | IOException e) { + throw new GoodDataException("Creating process failed", e); + } + } + private DataloadProcess postProcess(DataloadProcess process, URI postUri) { try { return restTemplate.postForObject(postUri, process, DataloadProcess.class); @@ -504,5 +570,4 @@ private void deleteTempFile(File file) { notNull(file, "file"); file.delete(); } - } diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index e5d088725..473b0efd0 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -17,6 +17,7 @@ import static java.nio.file.Files.createTempDirectory; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; @@ -24,6 +25,7 @@ import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.core.IsCollectionContaining.hasItem; +import static org.hamcrest.core.IsCollectionContaining.hasItems; /** * Dataload processes acceptance tests. @@ -31,6 +33,7 @@ public class ProcessServiceAT extends AbstractGoodDataAT { private DataloadProcess process; + private DataloadProcess processAppstore; @Test(groups = "process", dependsOnGroups = "project") public void createProcess() throws Exception { @@ -59,6 +62,23 @@ public void createProcess() throws Exception { } } + @Test(groups = "process", dependsOnGroups = "project") + public void createProcessFromGit() { + processAppstore = gd.getProcessService().createProcessFromAppstore(project, + new DataloadProcess("sdktest ruby appstore " + System.getenv("BUILD_NUMBER"), ProcessType.RUBY.toString(), + "${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyHello")).get(); + + assertThat(processAppstore.getExecutables(), contains("hello.rb")); + } + + @Test(groups = "process", dependsOnMethods = "createProcessFromGit") + public void updateProcessFromGit() { + processAppstore.setPath("${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyBonjour"); + processAppstore = gd.getProcessService().updateProcessFromAppstore(project, processAppstore).get(); + + assertThat(processAppstore.getExecutables(), contains("bonjour.rb")); + } + public void copy(final String file, final File dir) throws IOException { IOUtils.copy( new ClassPathResource("/dataload/processes/testgraph/" + file, getClass()).getInputStream(), @@ -92,8 +112,9 @@ public void failExecuteProcess() throws Exception { @Test(dependsOnGroups = "process") public void removeProcess() throws Exception { gd.getProcessService().removeProcess(process); + gd.getProcessService().removeProcess(processAppstore); final Collection processes = gd.getProcessService().listProcesses(project); - assertThat(processes, not(hasItem(hasSameIdAs(process)))); + assertThat(processes, not(hasItems(hasSameIdAs(process), hasSameIdAs(processAppstore)))); } } diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java index ade1d99e7..522a7d57a 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java @@ -4,7 +4,6 @@ import com.gooddata.FutureResult; import com.gooddata.collections.PageableList; import com.gooddata.project.Project; -import com.gooddata.util.ResourceUtils; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -18,6 +17,7 @@ import static net.javacrumbs.jsonunit.JsonAssert.assertJsonEquals; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; @@ -38,6 +38,7 @@ public class ProcessServiceIT extends AbstractGoodDataIT { private static final String SCHEDULE_ID = "SCHEDULE_ID"; private static final String SCHEDULE_PATH = Schedule.TEMPLATE.expand(PROJECT_ID, SCHEDULE_ID).toString(); private static final String EXECUTABLE = "test.groovy"; + private static final String PROCESS_DEPLOYMENT_POLLING_URI = "/gdc/projects/PROJECT_ID/dataload/processesDeploy/uri"; private Project project; @@ -302,4 +303,65 @@ public void shouldRemoveSchedule() throws Exception { gd.getProcessService().removeSchedule(schedule); } + + @Test + public void shouldCreateProcessFromAppstorePackageRegistryMiss() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PROCESSES_PATH) + .respond() + .withBody(readFromResource("/dataload/processes/asyncTask.json")) + .withStatus(202); + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(PROCESS_DEPLOYMENT_POLLING_URI) + .respond() + .withStatus(200) + .withBody(readFromResource("/dataload/processes/appstoreProcess.json")); + DataloadProcess process = gd.getProcessService().createProcessFromAppstore(project, new DataloadProcess("appstoreProcess", ProcessType.RUBY.toString(), + "${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyHello")).get(); + assertThat(process, notNullValue()); + } + + @Test + public void shouldCreateProcessFromAppstorePackageRegistryHit() throws Exception { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(PROCESSES_PATH) + .respond() + .withStatus(200) + .withBody(readFromResource("/dataload/processes/appstoreProcess.json")); + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(PROCESS_PATH) + .respond() + .withStatus(200) + .withBody(readFromResource("/dataload/processes/appstoreProcess.json")); + + DataloadProcess process = gd.getProcessService().createProcessFromAppstore(project, new DataloadProcess("appstoreProcess", ProcessType.RUBY.toString(), + "${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyHello")).get(); + assertThat(process, notNullValue()); + } + + @Test + public void shouldUpdateProcessFromAppstore() { + onRequest() + .havingMethodEqualTo("PUT") + .havingPathEqualTo(PROCESS_PATH) + .respond() + .withBody(readFromResource("/dataload/processes/asyncTask.json")) + .withStatus(202); + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(PROCESS_DEPLOYMENT_POLLING_URI) + .respond() + .withStatus(200) + .withBody(readFromResource("/dataload/processes/appstoreProcess.json")); + + process.setPath("${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyHello"); + DataloadProcess updatedProcess = gd.getProcessService().updateProcessFromAppstore(project, process).get(); + assertThat(updatedProcess, notNullValue()); + assertThat(updatedProcess.getType(), is(equalTo(ProcessType.RUBY.toString()))); + assertThat(updatedProcess.getExecutables(), contains("hello.rb") ); + } } diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java index 1a7295701..5a44c6712 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java @@ -143,7 +143,7 @@ public void testUpdateProcessWithNullProcess() throws Exception { @Test(expectedExceptions = IllegalArgumentException.class) public void testUpdateProcessWithNullFile() throws Exception { - processService.updateProcess(project, process, null); + processService.updateProcess(project, process, (File) null); } @Test(expectedExceptions = GoodDataException.class) diff --git a/src/test/resources/dataload/processes/appstoreProcess.json b/src/test/resources/dataload/processes/appstoreProcess.json new file mode 100644 index 000000000..63e217264 --- /dev/null +++ b/src/test/resources/dataload/processes/appstoreProcess.json @@ -0,0 +1,16 @@ +{ + "process" : { + "type" : "RUBY", + "name" : "processname", + "path" : "${SOME_PLACEHOLDER}:someIdentifier:somePath", + "graphs" : [ "hello.rb" ], + "executables" : [ "hello.rb" ], + "lastDeployed" : "2016-08-17T11:28:07.419Z", + "ownerLogin" : "some@login.com", + "links" : { + "self" : "/gdc/projects/PROJECT_ID/dataload/processes/processId", + "executions" : "/gdc/projects/ProjectId/dataload/processes/ProcessId/executions", + "source" : "/gdc/projects/ProjectId/dataload/processes/ProcessId/source" + } + } +} \ No newline at end of file diff --git a/src/test/resources/dataload/processes/asyncTask.json b/src/test/resources/dataload/processes/asyncTask.json new file mode 100644 index 000000000..f6da18eca --- /dev/null +++ b/src/test/resources/dataload/processes/asyncTask.json @@ -0,0 +1,7 @@ +{ + "asyncTask": { + "links": { + "poll": "/gdc/projects/PROJECT_ID/dataload/processesDeploy/uri" + } + } +} From 7c1670fcc3a99ebac058d019c25d57022541a311 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 28 Jul 2016 11:21:45 +0200 Subject: [PATCH 136/934] Align report Grid with reality * Distinguish included metrics from GridElement * Allow GridElement both for columns and rows * Introduce MetricGroup mark --- .../gooddata/md/report/AttributeInGrid.java | 21 +++++--- .../java/com/gooddata/md/report/Grid.java | 37 +++++++++----- .../com/gooddata/md/report/GridElement.java | 29 +---------- .../md/report/GridElementDeserializer.java | 36 ++++++++++++++ .../md/report/GridElementSerializer.java | 29 +++++++++++ .../report/GridReportDefinitionContent.java | 8 +-- .../com/gooddata/md/report/MetricElement.java | 33 +++++++++++++ .../com/gooddata/md/report/MetricGroup.java | 49 +++++++++++++++++++ .../OneNumberReportDefinitionContent.java | 8 +-- src/test/java/com/gooddata/Example.java | 8 ++- .../com/gooddata/md/MetadataServiceAT.java | 8 ++- .../report/GridElementDeserializerTest.java | 35 +++++++++++++ .../md/report/GridElementSerializerTest.java | 29 +++++++++++ .../GridReportDefinitionContentTest.java | 4 +- .../java/com/gooddata/md/report/GridTest.java | 12 +++-- ...lementTest.java => MetricElementTest.java} | 10 ++-- .../OneNumberReportDefinitionContentTest.java | 4 +- .../report/ReportDefinitionContentTest.java | 4 +- .../md/report/ReportDefinitionTest.java | 4 +- .../resources/md/report/gridElements.json | 10 ++++ .../{gridElement.json => metricElement.json} | 0 21 files changed, 305 insertions(+), 73 deletions(-) create mode 100644 src/main/java/com/gooddata/md/report/GridElementDeserializer.java create mode 100644 src/main/java/com/gooddata/md/report/GridElementSerializer.java create mode 100644 src/main/java/com/gooddata/md/report/MetricElement.java create mode 100644 src/main/java/com/gooddata/md/report/MetricGroup.java create mode 100644 src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java create mode 100644 src/test/java/com/gooddata/md/report/GridElementSerializerTest.java rename src/test/java/com/gooddata/md/report/{GridElementTest.java => MetricElementTest.java} (74%) create mode 100644 src/test/resources/md/report/gridElements.json rename src/test/resources/md/report/{gridElement.json => metricElement.json} (100%) diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 07b1e62f5..1058a6ac8 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -21,25 +21,26 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class AttributeInGrid extends GridElement { +public class AttributeInGrid implements GridElement { + private final String uri; + private final String alias; private Collection> totals; @JsonCreator AttributeInGrid(@JsonProperty("uri") String uri, @JsonProperty("totals") Collection> totals, @JsonProperty("alias") String alias) { - super(uri, alias); + this.uri = uri; + this.alias = alias; this.totals = totals; } public AttributeInGrid(String uri) { - super(uri, ""); - totals = new ArrayList<>(); + this(uri, new ArrayList>(), null); } public AttributeInGrid(String uri, String alias) { - super(uri, alias); - totals = new ArrayList<>(); + this(uri, new ArrayList>(), alias); } public Collection> getTotals() { @@ -49,4 +50,12 @@ public Collection> getTotals() { } return result; } + + public String getUri() { + return uri; + } + + public String getAlias() { + return alias; + } } diff --git a/src/main/java/com/gooddata/md/report/Grid.java b/src/main/java/com/gooddata/md/report/Grid.java index a231d5bf0..9f921c751 100644 --- a/src/main/java/com/gooddata/md/report/Grid.java +++ b/src/main/java/com/gooddata/md/report/Grid.java @@ -7,6 +7,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Collection; import java.util.Collections; @@ -21,16 +23,28 @@ @JsonInclude(JsonInclude.Include.NON_NULL) public class Grid { - private final Collection columns; - private final Collection rows; - private final Collection metrics; + private final List columns; + private final List rows; + private final List metrics; private final Map> sort; private final Collection> columnWidths; + /** + * Creates new instance. + * @param columns report's definition columns + * @param rows report's definition rows + * @param metrics report's definition metrics + * @param sort report's sort definition + * @param columnWidths report columns' widths definition + * + * @since 2.0.0 + */ @JsonCreator - public Grid(@JsonProperty("columns") Collection columns, - @JsonProperty("rows") Collection rows, - @JsonProperty("metrics") Collection metrics, + public Grid(@JsonProperty("columns") @JsonDeserialize(contentUsing = GridElementDeserializer.class) + List columns, + @JsonProperty("rows") @JsonDeserialize(contentUsing = GridElementDeserializer.class) + List rows, + @JsonProperty("metrics") List metrics, @JsonProperty("sort") Map> sort, @JsonProperty("columnWidths") Collection> columnWidths) { this.columns = columns; @@ -40,8 +54,7 @@ public Grid(@JsonProperty("columns") Collection columns, this.columnWidths = columnWidths; } - public Grid(final Collection columns, final Collection rows, - final Collection metrics) { + public Grid(List columns, List rows, List metrics) { this.columns = columns; this.rows = rows; this.metrics = metrics; @@ -51,15 +64,17 @@ public Grid(final Collection columns, final Collection columnWidths = Collections.emptyList(); } - public Collection getColumns() { + @JsonSerialize(contentUsing = GridElementSerializer.class) + public List getColumns() { return columns; } - public Collection getRows() { + @JsonSerialize(contentUsing = GridElementSerializer.class) + public List getRows() { return rows; } - public Collection getMetrics() { + public List getMetrics() { return metrics; } diff --git a/src/main/java/com/gooddata/md/report/GridElement.java b/src/main/java/com/gooddata/md/report/GridElement.java index 759e8a554..db247c5ef 100644 --- a/src/main/java/com/gooddata/md/report/GridElement.java +++ b/src/main/java/com/gooddata/md/report/GridElement.java @@ -3,35 +3,10 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - /** * Grid element - * (metricGroup | URI | AttributeInGrid ... URI is allowed for backward compatibility, metricGroup can be maximally + * (metricGroup | AttributeInGrid ... metricGroup can be maximally * one time in rows or columns) */ -@JsonIgnoreProperties(ignoreUnknown = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class GridElement { - - private final String uri; - private final String alias; - - @JsonCreator - public GridElement(@JsonProperty("uri") String uri, @JsonProperty("alias") String alias) { - this.uri = uri; - this.alias = alias; - } - - public String getUri() { - return uri; - } - - public String getAlias() { - return alias; - } - +public interface GridElement { } diff --git a/src/main/java/com/gooddata/md/report/GridElementDeserializer.java b/src/main/java/com/gooddata/md/report/GridElementDeserializer.java new file mode 100644 index 000000000..9a2d5335c --- /dev/null +++ b/src/main/java/com/gooddata/md/report/GridElementDeserializer.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.report; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; + +import static com.gooddata.md.report.MetricGroup.METRIC_GROUP; + +/** + * Custom deserializer for {@link GridElement}'s implementations + */ +class GridElementDeserializer extends JsonDeserializer { + + @Override + public GridElement deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { + switch (jp.currentToken()) { + case VALUE_STRING: + final String textValue = ctxt.readValue(jp, String.class); + if (MetricGroup.equals(textValue)) { + return METRIC_GROUP; + } else { + throw ctxt.mappingException("Unknown string representation of GridElement: %s", textValue); + } + case START_OBJECT: + return ctxt.readValue(jp, AttributeInGrid.class); + default: + throw ctxt.mappingException("Unknown type of GridElement"); + } + } +} diff --git a/src/main/java/com/gooddata/md/report/GridElementSerializer.java b/src/main/java/com/gooddata/md/report/GridElementSerializer.java new file mode 100644 index 000000000..3e5bcd4ad --- /dev/null +++ b/src/main/java/com/gooddata/md/report/GridElementSerializer.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.report; + +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +/** + * Custom serializer for {@link GridElement}'s implementations + */ +class GridElementSerializer extends JsonSerializer { + + @Override + public void serialize(GridElement value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + if (value instanceof AttributeInGrid) { + serializers.defaultSerializeValue(value, gen); + } else if (value instanceof MetricGroup) { + gen.writeString(((MetricGroup) value).getValue()); + } else { + throw new JsonGenerationException("Unsupported kind of GridElement: " + value.getClass().getName(), gen); + } + } +} diff --git a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java index 291154046..b3504dcdf 100644 --- a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java @@ -40,13 +40,13 @@ public String getFormat() { return FORMAT; } - public static ReportDefinition create(String title, List columns, List rows, - List metrics) { + public static ReportDefinition create(String title, List columns, List rows, + List metrics) { return create(title, columns, rows, metrics, Collections.emptyList()); } - public static ReportDefinition create(String title, List columns, List rows, - List metrics, Collection filters) { + public static ReportDefinition create(String title, List columns, List rows, + List metrics, Collection filters) { return new ReportDefinition(new Meta(title), new GridReportDefinitionContent(new Grid(columns, rows, metrics), filters)); } } diff --git a/src/main/java/com/gooddata/md/report/MetricElement.java b/src/main/java/com/gooddata/md/report/MetricElement.java new file mode 100644 index 000000000..d2cb542c3 --- /dev/null +++ b/src/main/java/com/gooddata/md/report/MetricElement.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.report; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MetricElement { + + private final String uri; + private final String alias; + + @JsonCreator + public MetricElement(@JsonProperty("uri") final String uri, + @JsonProperty("alias") final String alias) { + this.uri = uri; + this.alias = alias; + } + + public String getUri() { + return uri; + } + + public String getAlias() { + return alias; + } +} diff --git a/src/main/java/com/gooddata/md/report/MetricGroup.java b/src/main/java/com/gooddata/md/report/MetricGroup.java new file mode 100644 index 000000000..6cf1f2d1e --- /dev/null +++ b/src/main/java/com/gooddata/md/report/MetricGroup.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.report; + +/** + * Marker element marking the placement of metrics in Grid report. + * Can be contained either in rows or columns of {@link Grid}. + */ +public final class MetricGroup implements GridElement { + + private static final String JSON_VALUE = "metricGroup"; + + private final String value; + + public static final MetricGroup METRIC_GROUP = new MetricGroup(JSON_VALUE); + + private MetricGroup(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + /** + * @param string string to compare whether is metricGroup + * @return true when the {@link #METRIC_GROUP}'s string value equals to the argument, false otherwise + */ + public static boolean equals(String string) { + return METRIC_GROUP.getValue().equals(string); + } + + @Override + public boolean equals(Object o) { + return this == o; + } + + @Override + public int hashCode() { + return getValue() != null ? getValue().hashCode() : 0; + } + + @Override + public String toString() { + return getValue(); + } +} diff --git a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java index e81b5e77c..b98278c0f 100644 --- a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java @@ -74,13 +74,13 @@ public String getDescription() { } } - public static ReportDefinition create(String title, List columns, List rows, - List metrics) { + public static ReportDefinition create(String title, List columns, List rows, + List metrics) { return create(title, columns, rows, metrics, Collections.emptyList()); } - public static ReportDefinition create(String title, List columns, List rows, - List metrics, Collection filters) { + public static ReportDefinition create(String title, List columns, List rows, + List metrics, Collection filters) { return new ReportDefinition(new Meta(title), new OneNumberReportDefinitionContent( new Grid(columns, rows, metrics), title, filters)); } diff --git a/src/test/java/com/gooddata/Example.java b/src/test/java/com/gooddata/Example.java index 2be0281e1..c4af1cf66 100644 --- a/src/test/java/com/gooddata/Example.java +++ b/src/test/java/com/gooddata/Example.java @@ -15,6 +15,8 @@ import com.gooddata.md.report.AttributeInGrid; import com.gooddata.md.report.GridElement; import com.gooddata.md.report.GridReportDefinitionContent; +import com.gooddata.md.report.MetricElement; +import com.gooddata.md.report.MetricGroup; import com.gooddata.md.report.Report; import com.gooddata.md.report.ReportDefinition; import com.gooddata.model.ModelDiff; @@ -29,9 +31,11 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.Arrays; import java.util.Collection; import static com.gooddata.md.Restriction.identifier; +import static com.gooddata.md.report.MetricGroup.METRIC_GROUP; import static java.util.Arrays.asList; public class Example { @@ -70,9 +74,9 @@ public static void main(String... args) throws FileNotFoundException { ReportDefinition definition = GridReportDefinitionContent.create( "Department avg shoe size", - asList("metricGroup"), + asList(METRIC_GROUP), asList(new AttributeInGrid(attr.getDefaultDisplayForm().getUri())), - asList(new GridElement(m.getUri(), "Avg shoe size")) + asList(new MetricElement(m.getUri(), "Avg shoe size")) ); definition = md.createObj(project, definition); Report report = md.createObj(project, new Report(definition.getTitle(), definition)); diff --git a/src/test/java/com/gooddata/md/MetadataServiceAT.java b/src/test/java/com/gooddata/md/MetadataServiceAT.java index 91af4ae77..190dba0f4 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceAT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceAT.java @@ -1,6 +1,7 @@ package com.gooddata.md; import static com.gooddata.md.Restriction.identifier; +import static com.gooddata.md.report.MetricGroup.METRIC_GROUP; import static com.gooddata.report.ReportExportFormat.PDF; import static com.gooddata.report.ReportExportFormat.XLS; import static java.util.Arrays.asList; @@ -13,10 +14,13 @@ import com.gooddata.md.report.Filter; import com.gooddata.md.report.GridElement; import com.gooddata.md.report.GridReportDefinitionContent; +import com.gooddata.md.report.MetricElement; +import com.gooddata.md.report.MetricGroup; import com.gooddata.md.report.Report; import org.joda.time.LocalDate; import org.testng.annotations.Test; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; @@ -60,9 +64,9 @@ public void createReport() throws Exception { reportDefinition = md.createObj(project, GridReportDefinitionContent.create( "Department avg shoe size", - asList("metricGroup"), + asList(METRIC_GROUP), asList(new AttributeInGrid(attr.getDefaultDisplayForm().getUri())), - asList(new GridElement(metric.getUri(), "Avg shoe size")), + asList(new MetricElement(metric.getUri(), "Avg shoe size")), asList(new Filter("(SELECT [" + metric.getUri() + "]) >= 0")) )); report = md.createObj(project, new Report(reportDefinition.getTitle(), reportDefinition)); diff --git a/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java b/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java new file mode 100644 index 000000000..d97fc7a1f --- /dev/null +++ b/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.report; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import org.testng.annotations.Test; + +import java.util.ArrayList; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.instanceOf; + +public class GridElementDeserializerTest { + + @Test + public void testDeserializer() throws Exception { + final GridElements elems = new ObjectMapper().readValue( + getClass().getResourceAsStream("/md/report/gridElements.json"), GridElements.class); + + assertThat(elems, is(notNullValue())); + assertThat(elems, hasSize(2)); + assertThat(elems.get(0), instanceOf(AttributeInGrid.class)); + assertThat(elems.get(1), instanceOf(MetricGroup.class)); + } + + @JsonDeserialize(contentUsing = GridElementDeserializer.class) + private static class GridElements extends ArrayList {} + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/GridElementSerializerTest.java b/src/test/java/com/gooddata/md/report/GridElementSerializerTest.java new file mode 100644 index 000000000..c791d304b --- /dev/null +++ b/src/test/java/com/gooddata/md/report/GridElementSerializerTest.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.report; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.testng.annotations.Test; + +import java.util.ArrayList; + +import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.md.report.MetricGroup.METRIC_GROUP; +import static org.hamcrest.MatcherAssert.assertThat; + +public class GridElementSerializerTest { + + @Test + public void testSerializer() throws Exception { + final GridElements elems = new GridElements(); + elems.add(new AttributeInGrid("/uriValue", "aliasValue")); + elems.add(METRIC_GROUP); + assertThat(elems, serializesToJson("/md/report/gridElements.json")); + } + + @JsonSerialize(contentUsing = GridElementSerializer.class) + private static class GridElements extends ArrayList {} + +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java index cdc6f548b..5e75c4727 100644 --- a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java @@ -28,8 +28,8 @@ public void testDeserialization() throws Exception { @Test public void testSerialization() throws Exception { final GridReportDefinitionContent def = new GridReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList())); + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList())); assertThat(def, serializesToJson("/md/report/gridReportDefinitionContent-input.json")); } diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index 4916e620e..a799b5321 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -4,6 +4,7 @@ package com.gooddata.md.report; import com.fasterxml.jackson.databind.ObjectMapper; +import org.hamcrest.CoreMatchers; import org.testng.annotations.Test; import java.util.Collection; @@ -13,6 +14,7 @@ import java.util.Map; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.md.report.MetricGroup.METRIC_GROUP; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -29,11 +31,11 @@ public void testDeserialization() throws Exception { assertThat(grid.getColumns(), is(notNullValue())); assertThat(grid.getColumns(), hasSize(1)); - assertThat(grid.getColumns().iterator().next(), is("metricGroup")); + assertThat(grid.getColumns().iterator().next(), CoreMatchers.is(METRIC_GROUP)); assertThat(grid.getRows(), is(notNullValue())); assertThat(grid.getRows(), hasSize(1)); - final AttributeInGrid attrInGrid = grid.getRows().iterator().next(); + final AttributeInGrid attrInGrid = (AttributeInGrid) grid.getRows().iterator().next(); assertThat(attrInGrid.getAlias(), is("attr")); assertThat(grid.getMetrics(), is(notNullValue())); @@ -54,11 +56,13 @@ public void testSerialization() throws Exception { colWidths.put("width", 343); sort.put("columns", Collections.emptyList()); sort.put("rows", Collections.emptyList()); - final Grid grid = new Grid(asList("metricGroup"), + final Grid grid = new Grid( + asList(METRIC_GROUP), asList(new AttributeInGrid("/gdc/md/PROJECT_ID/obj/ATTR_ID", asList((Collection)Collections.emptyList()), "attr")), - asList(new GridElement("/gdc/md/PROJECT_ID/obj/METR_ID", "metr")), sort, asList(colWidths)); + asList(new MetricElement("/gdc/md/PROJECT_ID/obj/METR_ID", "metr")), sort, asList(colWidths)); + new ObjectMapper().writeValueAsString(grid); assertThat(grid, serializesToJson("/md/report/grid-input.json")); } diff --git a/src/test/java/com/gooddata/md/report/GridElementTest.java b/src/test/java/com/gooddata/md/report/MetricElementTest.java similarity index 74% rename from src/test/java/com/gooddata/md/report/GridElementTest.java rename to src/test/java/com/gooddata/md/report/MetricElementTest.java index 19be6e010..bc72c545a 100644 --- a/src/test/java/com/gooddata/md/report/GridElementTest.java +++ b/src/test/java/com/gooddata/md/report/MetricElementTest.java @@ -13,15 +13,15 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; -public class GridElementTest { +public class MetricElementTest { public static final String URI = "/ELEM_URI"; public static final String ALIAS = "ELEM_ALIAS"; @Test public void testDeserialization() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/gridElement.json"); - final GridElement element = new ObjectMapper().readValue(is, GridElement.class); + final InputStream is = getClass().getResourceAsStream("/md/report/metricElement.json"); + final MetricElement element = new ObjectMapper().readValue(is, MetricElement.class); assertThat(element, is(notNullValue())); assertThat(element.getUri(), is(URI)); assertThat(element.getAlias(), is(ALIAS)); @@ -29,8 +29,8 @@ public void testDeserialization() throws Exception { @Test public void testSerialization() throws Exception { - final GridElement element = new GridElement(URI, ALIAS); - assertThat(element, serializesToJson("/md/report/gridElement.json")); + final MetricElement element = new MetricElement(URI, ALIAS); + assertThat(element, serializesToJson("/md/report/metricElement.json")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java index b97789cac..dd0337bf2 100644 --- a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java @@ -29,8 +29,8 @@ public void testDeserialization() throws Exception { @Test public void testSerialization() throws Exception { final OneNumberReportDefinitionContent def = new OneNumberReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList()), "desc", Collections.emptyList() + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList()), "desc", Collections.emptyList() ); assertThat(def, serializesToJson("/md/report/oneNumberReportDefinitionContent-input.json")); } diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java index b2df4f354..d6469a1dd 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java @@ -28,8 +28,8 @@ public void testDeserialization() throws Exception { @Test public void testSerialization() throws Exception { final ReportDefinitionContent def = new GridReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList())); + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList())); assertThat(def, serializesToJson("/md/report/gridReportDefinitionContent-input.json")); } diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java index ebf9ff985..e5fdb8a6c 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java @@ -33,8 +33,8 @@ public void testDeserialization() throws Exception { public void testSerialization() throws Exception { final ReportDefinition def = new ReportDefinition("Untitled", new OneNumberReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList()), "desc", asList(new Filter("(SELECT [/gdc/md/projectId/obj/123]) >= 2"))) + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList()), "desc", asList(new Filter("(SELECT [/gdc/md/projectId/obj/123]) >= 2"))) ); assertThat(def, serializesToJson("/md/report/oneNumberReportDefinition-input.json")); } diff --git a/src/test/resources/md/report/gridElements.json b/src/test/resources/md/report/gridElements.json new file mode 100644 index 000000000..2c5b163df --- /dev/null +++ b/src/test/resources/md/report/gridElements.json @@ -0,0 +1,10 @@ +[ + { + "attribute": { + "uri": "/uriValue", + "alias": "aliasValue", + "totals" : [] + } + }, + "metricGroup" +] \ No newline at end of file diff --git a/src/test/resources/md/report/gridElement.json b/src/test/resources/md/report/metricElement.json similarity index 100% rename from src/test/resources/md/report/gridElement.json rename to src/test/resources/md/report/metricElement.json From 93d3e07c2c53cc6a2dfb842df3e6b70043a624ef Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 28 Jul 2016 15:11:40 +0200 Subject: [PATCH 137/934] introduce full support of Grid's metric --- .../com/gooddata/md/report/MetricElement.java | 24 ++++++++++++++++++- src/test/java/com/gooddata/Example.java | 2 -- .../com/gooddata/md/MetadataServiceAT.java | 2 -- .../gooddata/md/report/MetricElementTest.java | 10 +++++--- .../resources/md/report/metricElement.json | 4 +++- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gooddata/md/report/MetricElement.java b/src/main/java/com/gooddata/md/report/MetricElement.java index d2cb542c3..b54943b16 100644 --- a/src/main/java/com/gooddata/md/report/MetricElement.java +++ b/src/main/java/com/gooddata/md/report/MetricElement.java @@ -9,18 +9,31 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * Metric used in {@link Grid} for report definition. + */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) public class MetricElement { private final String uri; private final String alias; + private final String format; + private final String drillAcrossStepAttributeDisplayFormUri; @JsonCreator public MetricElement(@JsonProperty("uri") final String uri, - @JsonProperty("alias") final String alias) { + @JsonProperty("alias") final String alias, + @JsonProperty("format") final String format, + @JsonProperty("drillAcrossStepAttributeDF") String drillAcrossStepAttributeDisplayFormUri) { this.uri = uri; this.alias = alias; + this.format = format; + this.drillAcrossStepAttributeDisplayFormUri = drillAcrossStepAttributeDisplayFormUri; + } + + public MetricElement(String uri, String alias) { + this(uri, alias, null, null); } public String getUri() { @@ -30,4 +43,13 @@ public String getUri() { public String getAlias() { return alias; } + + public String getFormat() { + return format; + } + + @JsonProperty("drillAcrossStepAttributeDF") + public String getDrillAcrossStepAttributeDisplayFormUri() { + return drillAcrossStepAttributeDisplayFormUri; + } } diff --git a/src/test/java/com/gooddata/Example.java b/src/test/java/com/gooddata/Example.java index c4af1cf66..775573849 100644 --- a/src/test/java/com/gooddata/Example.java +++ b/src/test/java/com/gooddata/Example.java @@ -13,7 +13,6 @@ import com.gooddata.md.MetadataService; import com.gooddata.md.Metric; import com.gooddata.md.report.AttributeInGrid; -import com.gooddata.md.report.GridElement; import com.gooddata.md.report.GridReportDefinitionContent; import com.gooddata.md.report.MetricElement; import com.gooddata.md.report.MetricGroup; @@ -31,7 +30,6 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.Arrays; import java.util.Collection; import static com.gooddata.md.Restriction.identifier; diff --git a/src/test/java/com/gooddata/md/MetadataServiceAT.java b/src/test/java/com/gooddata/md/MetadataServiceAT.java index 190dba0f4..1bc8bd03d 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceAT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceAT.java @@ -12,7 +12,6 @@ import com.gooddata.AbstractGoodDataAT; import com.gooddata.md.report.AttributeInGrid; import com.gooddata.md.report.Filter; -import com.gooddata.md.report.GridElement; import com.gooddata.md.report.GridReportDefinitionContent; import com.gooddata.md.report.MetricElement; import com.gooddata.md.report.MetricGroup; @@ -20,7 +19,6 @@ import org.joda.time.LocalDate; import org.testng.annotations.Test; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; diff --git a/src/test/java/com/gooddata/md/report/MetricElementTest.java b/src/test/java/com/gooddata/md/report/MetricElementTest.java index bc72c545a..11365d06b 100644 --- a/src/test/java/com/gooddata/md/report/MetricElementTest.java +++ b/src/test/java/com/gooddata/md/report/MetricElementTest.java @@ -15,8 +15,10 @@ public class MetricElementTest { - public static final String URI = "/ELEM_URI"; - public static final String ALIAS = "ELEM_ALIAS"; + private static final String URI = "/ELEM_URI"; + private static final String ALIAS = "ELEM_ALIAS"; + private static final String FORMAT = "FORMAT"; + private static final String DRILL_URI = "/DRILL_URI"; @Test public void testDeserialization() throws Exception { @@ -25,11 +27,13 @@ public void testDeserialization() throws Exception { assertThat(element, is(notNullValue())); assertThat(element.getUri(), is(URI)); assertThat(element.getAlias(), is(ALIAS)); + assertThat(element.getFormat(), is(FORMAT)); + assertThat(element.getDrillAcrossStepAttributeDisplayFormUri(), is(DRILL_URI)); } @Test public void testSerialization() throws Exception { - final MetricElement element = new MetricElement(URI, ALIAS); + final MetricElement element = new MetricElement(URI, ALIAS, FORMAT, DRILL_URI); assertThat(element, serializesToJson("/md/report/metricElement.json")); } diff --git a/src/test/resources/md/report/metricElement.json b/src/test/resources/md/report/metricElement.json index 5366a7769..d71c54af4 100644 --- a/src/test/resources/md/report/metricElement.json +++ b/src/test/resources/md/report/metricElement.json @@ -1,4 +1,6 @@ { "uri": "/ELEM_URI", - "alias": "ELEM_ALIAS" + "alias": "ELEM_ALIAS", + "format": "FORMAT", + "drillAcrossStepAttributeDF": "/DRILL_URI" } From 9ac6bad977a208ea67a569b60f3bfa1c9deccf3a Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 29 Jul 2016 09:32:24 +0200 Subject: [PATCH 138/934] introduce convenient constructors for elements in grid --- .../gooddata/md/report/AttributeInGrid.java | 20 +++++++++++++++++++ .../com/gooddata/md/report/MetricElement.java | 11 ++++++++++ .../md/report/AttributeInGridTest.java | 16 +++++++++++++++ .../gooddata/md/report/MetricElementTest.java | 13 ++++++++++++ 4 files changed, 60 insertions(+) diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 1058a6ac8..3865c2d9c 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -9,11 +9,15 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.md.Attribute; +import com.gooddata.md.DisplayForm; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; +import static com.gooddata.util.Validate.notNull; + /** * Attribute in Grid */ @@ -43,6 +47,22 @@ public AttributeInGrid(String uri, String alias) { this(uri, new ArrayList>(), alias); } + /** + * Creates new AttributeInGrid using given DisplayForm's uri and it's title as alias. + * @param displayForm displayForm to create AttributeInGrid from + */ + public AttributeInGrid(final DisplayForm displayForm) { + this(notNull(notNull(displayForm, "displayForm").getUri(), "uri"), notNull(displayForm, "displayForm").getTitle()); + } + + /** + * Creates new AttributeInGrid using given Attribute's default DisplayForm's uri and it's title as alias. + * @param attribute attribute to create AttributeInGrid from + */ + public AttributeInGrid(final Attribute attribute) { + this(notNull(attribute, "attribute").getDefaultDisplayForm()); + } + public Collection> getTotals() { final LinkedList> result = new LinkedList<>(); for (final Collection t : totals) { diff --git a/src/main/java/com/gooddata/md/report/MetricElement.java b/src/main/java/com/gooddata/md/report/MetricElement.java index b54943b16..32ee6dbf7 100644 --- a/src/main/java/com/gooddata/md/report/MetricElement.java +++ b/src/main/java/com/gooddata/md/report/MetricElement.java @@ -8,6 +8,9 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.md.Metric; + +import static com.gooddata.util.Validate.notNull; /** * Metric used in {@link Grid} for report definition. @@ -36,6 +39,14 @@ public MetricElement(String uri, String alias) { this(uri, alias, null, null); } + /** + * Creates new instance using uri of given metric and it's title as alias. + * @param metric metric to create element from + */ + public MetricElement(final Metric metric) { + this(notNull(notNull(metric, "metric").getUri(), "uri"), notNull(metric, "metric").getTitle()); + } + public String getUri() { return uri; } diff --git a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java index 064dc1d34..1c831e506 100644 --- a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java +++ b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java @@ -4,6 +4,8 @@ package com.gooddata.md.report; import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.md.Attribute; +import com.gooddata.md.DisplayForm; import org.testng.annotations.Test; import java.io.InputStream; @@ -17,6 +19,8 @@ import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.isOneOf; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class AttributeInGridTest { @@ -52,4 +56,16 @@ public void testSerialization() throws Exception { assertThat(attr, serializesToJson("/md/report/attributeInGrid.json")); } + @Test + public void testCreateFromAttribute() throws Exception { + final Attribute attr = mock(Attribute.class); + final DisplayForm displayForm = mock(DisplayForm.class); + when(attr.getDefaultDisplayForm()).thenReturn(displayForm); + when(displayForm.getUri()).thenReturn(URI); + when(displayForm.getTitle()).thenReturn(ALIAS); + + final AttributeInGrid attrInGrid = new AttributeInGrid(attr); + assertThat(attrInGrid.getUri(), is(URI)); + assertThat(attrInGrid.getAlias(), is(ALIAS)); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/MetricElementTest.java b/src/test/java/com/gooddata/md/report/MetricElementTest.java index 11365d06b..a54d83a12 100644 --- a/src/test/java/com/gooddata/md/report/MetricElementTest.java +++ b/src/test/java/com/gooddata/md/report/MetricElementTest.java @@ -4,6 +4,7 @@ package com.gooddata.md.report; import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.md.Metric; import org.testng.annotations.Test; import java.io.InputStream; @@ -12,6 +13,8 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class MetricElementTest { @@ -37,4 +40,14 @@ public void testSerialization() throws Exception { assertThat(element, serializesToJson("/md/report/metricElement.json")); } + @Test + public void testCreateFromMetric() throws Exception { + final Metric metric = mock(Metric.class); + when(metric.getTitle()).thenReturn(ALIAS); + when(metric.getUri()).thenReturn(URI); + + final MetricElement element = new MetricElement(metric); + assertThat(element.getUri(), is(URI)); + assertThat(element.getAlias(), is(ALIAS)); + } } \ No newline at end of file From 6325816bac24f86a5e3b7be8f18c8f7807405446 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 29 Jul 2016 11:00:43 +0200 Subject: [PATCH 139/934] introduce convenient enum for Totals in grid --- .../gooddata/md/report/AttributeInGrid.java | 60 ++++++++++++++++--- .../java/com/gooddata/md/report/Total.java | 40 +++++++++++++ .../md/report/AttributeInGridTest.java | 26 ++++---- .../java/com/gooddata/md/report/GridTest.java | 3 +- .../com/gooddata/md/report/TotalTest.java | 26 ++++++++ .../resources/md/report/attributeInGrid.json | 2 +- src/test/resources/md/report/grid-input.json | 4 +- 7 files changed, 133 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/gooddata/md/report/Total.java create mode 100644 src/test/java/com/gooddata/md/report/TotalTest.java diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 3865c2d9c..92d1df5c9 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -4,6 +4,7 @@ package com.gooddata.md.report; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; @@ -13,10 +14,13 @@ import com.gooddata.md.DisplayForm; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; +import java.util.List; import static com.gooddata.util.Validate.notNull; +import static java.util.Arrays.asList; /** * Attribute in Grid @@ -29,22 +33,50 @@ public class AttributeInGrid implements GridElement { private final String uri; private final String alias; - private Collection> totals; + private List> totals; @JsonCreator - AttributeInGrid(@JsonProperty("uri") String uri, @JsonProperty("totals") Collection> totals, + AttributeInGrid(@JsonProperty("uri") String uri, @JsonProperty("totals") List> totals, @JsonProperty("alias") String alias) { this.uri = uri; this.alias = alias; this.totals = totals; } + /** + * Creates new instance. + * @param uri uri of displayForm of attribute to be in grid + */ public AttributeInGrid(String uri) { - this(uri, new ArrayList>(), null); + this(uri, null); } + /** + * Creates new instance. + * @param uri uri of displayForm of attribute to be in grid + * @param alias alias used to label the attribute + */ public AttributeInGrid(String uri, String alias) { - this(uri, new ArrayList>(), alias); + this(uri, new ArrayList>(), alias); + } + + /** + * Creates new instance. + * @param uri uri of displayForm of attribute to be in grid + * @param alias alias used to label the attribute + * @param totals totals for metrics used in grid - for each {@link MetricElement} in grid, there can be list + * of totals. The totals are evaluated in given order. + */ + public AttributeInGrid(String uri, String alias, List> totals) { + this(uri, alias); + notNull(totals, "totals"); + for (List totalList : totals) { + final List totalStringList = new ArrayList<>(totalList.size()); + for (Total total : totalList) { + totalStringList.add(total.toString()); + } + this.totals.add(totalStringList); + } } /** @@ -63,12 +95,22 @@ public AttributeInGrid(final Attribute attribute) { this(notNull(attribute, "attribute").getDefaultDisplayForm()); } - public Collection> getTotals() { - final LinkedList> result = new LinkedList<>(); - for (final Collection t : totals) { - result.add(t); + @JsonProperty("totals") + public List> getStringTotals() { + return totals; + } + + @JsonIgnore + public List> getTotals() { + final List> enumTotals = new ArrayList<>(totals.size()); + for (List totalList : totals) { + final List totalEnumList = new ArrayList<>(totalList.size()); + for (String total : totalList) { + totalEnumList.add(Total.of(total)); + } + enumTotals.add(totalEnumList); } - return result; + return enumTotals; } public String getUri() { diff --git a/src/main/java/com/gooddata/md/report/Total.java b/src/main/java/com/gooddata/md/report/Total.java new file mode 100644 index 000000000..8b5d2be1c --- /dev/null +++ b/src/main/java/com/gooddata/md/report/Total.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.report; + +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import static com.gooddata.util.Validate.notNull; +import static java.lang.String.format; + +/** + * Represents type of Total for {@link AttributeInGrid} + */ +public enum Total { + SUM, + AVG, + MAX, + MIN, + NAT, + MED; + + @Override + public String toString() { + return name().toLowerCase(); + } + + public static Total of(String total) { + notNull(total, "total"); + try { + return Total.valueOf(total.toUpperCase()); + } catch (IllegalArgumentException e) { + throw new UnsupportedOperationException( + format("Unknown value for Grid's total: \"%s\", supported values are: [%s]", + total, StringUtils.arrayToCommaDelimitedString(Total.values())), + e); + } + } +} diff --git a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java index 1c831e506..110e82f05 100644 --- a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java +++ b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java @@ -11,6 +11,7 @@ import java.io.InputStream; import java.util.Collection; import java.util.Iterator; +import java.util.List; import static com.gooddata.JsonMatchers.serializesToJson; import static java.util.Arrays.asList; @@ -24,8 +25,8 @@ public class AttributeInGridTest { - public static final String URI = "/URI"; - public static final String ALIAS = "ALIAS"; + private static final String URI = "/URI"; + private static final String ALIAS = "ALIAS"; @Test public void testDeserialization() throws Exception { @@ -36,23 +37,22 @@ public void testDeserialization() throws Exception { assertThat(attr.getUri(), is(URI)); assertThat(attr.getAlias(), is(ALIAS)); - assertThat(attr.getTotals(), is(notNullValue())); - assertThat(attr.getTotals(), hasSize(2)); - final Iterator> i = attr.getTotals().iterator(); - final Collection subTotal1 = i.next(); + assertThat(attr.getStringTotals(), is(notNullValue())); + assertThat(attr.getStringTotals(), hasSize(2)); + final Iterator> i = attr.getTotals().iterator(); + final List subTotal1 = i.next(); assertThat(subTotal1, hasSize(1)); - assertThat(subTotal1.iterator().next(), is("TOTAL1")); - final Collection subTotal2 = i.next(); + assertThat(subTotal1.iterator().next(), is(Total.SUM)); + final List subTotal2 = i.next(); assertThat(subTotal2, hasSize(2)); - assertThat(subTotal2.iterator().next(), isOneOf("TOTAL2", "TOTAL3")); - assertThat(subTotal2.iterator().next(), isOneOf("TOTAL2", "TOTAL3")); + assertThat(subTotal2.get(0), is(Total.AVG)); + assertThat(subTotal2.get(1), is(Total.MED)); } @Test public void testSerialization() throws Exception { - final Collection> totals = asList((Collection) asList("TOTAL1"), - asList("TOTAL2", "TOTAL3")); - final AttributeInGrid attr = new AttributeInGrid(URI, totals, ALIAS); + final List> totals = asList(asList(Total.SUM), asList(Total.AVG, Total.MED)); + final AttributeInGrid attr = new AttributeInGrid(URI, ALIAS, totals); assertThat(attr, serializesToJson("/md/report/attributeInGrid.json")); } diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index a799b5321..befc64ecc 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -58,8 +58,7 @@ public void testSerialization() throws Exception { sort.put("rows", Collections.emptyList()); final Grid grid = new Grid( asList(METRIC_GROUP), - asList(new AttributeInGrid("/gdc/md/PROJECT_ID/obj/ATTR_ID", - asList((Collection)Collections.emptyList()), "attr")), + asList(new AttributeInGrid("/gdc/md/PROJECT_ID/obj/ATTR_ID", "attr")), asList(new MetricElement("/gdc/md/PROJECT_ID/obj/METR_ID", "metr")), sort, asList(colWidths)); new ObjectMapper().writeValueAsString(grid); diff --git a/src/test/java/com/gooddata/md/report/TotalTest.java b/src/test/java/com/gooddata/md/report/TotalTest.java new file mode 100644 index 000000000..6a1fc4f23 --- /dev/null +++ b/src/test/java/com/gooddata/md/report/TotalTest.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. + */ + +package com.gooddata.md.report; + +import org.testng.annotations.Test; + +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + +public class TotalTest { + + @Test(expectedExceptions = UnsupportedOperationException.class, + expectedExceptionsMessageRegExp = ".*\"unknownValue\".*") + public void ofShouldThrowForUnknown() throws Exception { + Total.of("unknownValue"); + } + + @Test + public void testOf() throws Exception { + for (Total total : Total.values()) { + assertThat(Total.of(total.toString()), is(total)); + } + } +} \ No newline at end of file diff --git a/src/test/resources/md/report/attributeInGrid.json b/src/test/resources/md/report/attributeInGrid.json index e6872fefa..efb204979 100644 --- a/src/test/resources/md/report/attributeInGrid.json +++ b/src/test/resources/md/report/attributeInGrid.json @@ -1,7 +1,7 @@ { "attribute": { "uri": "/URI", - "totals": [ ["TOTAL1"], ["TOTAL2", "TOTAL3"] ], + "totals": [ ["sum"], ["avg", "med"] ], "alias": "ALIAS" } } diff --git a/src/test/resources/md/report/grid-input.json b/src/test/resources/md/report/grid-input.json index b760b581a..c2a5d6240 100644 --- a/src/test/resources/md/report/grid-input.json +++ b/src/test/resources/md/report/grid-input.json @@ -21,9 +21,7 @@ { "attribute": { "alias": "attr", - "totals": [ - [] - ], + "totals": [], "uri": "/gdc/md/PROJECT_ID/obj/ATTR_ID" } } From 6366c6aeb0084f7246e08e511cb0d1e5e7ac23c5 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 22 Aug 2016 18:23:12 +0200 Subject: [PATCH 140/934] rename getAccount() to getAccountById() and introduce getAccountByUri() This change is for the sake of consistency with project, data warehouse,... and it is not breaking backward compatibility, because it is introduced in unreleased version --- .../com/gooddata/account/AccountService.java | 17 ++++++++++++++--- .../com/gooddata/account/AccountServiceAT.java | 3 +-- .../com/gooddata/account/AccountServiceIT.java | 4 ++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gooddata/account/AccountService.java b/src/main/java/com/gooddata/account/AccountService.java index f3d978e6b..52058a2dd 100644 --- a/src/main/java/com/gooddata/account/AccountService.java +++ b/src/main/java/com/gooddata/account/AccountService.java @@ -35,7 +35,7 @@ public AccountService(RestTemplate restTemplate) { * @throws com.gooddata.GoodDataException when current account can't be accessed. */ public Account getCurrent() { - return getAccount(Account.CURRENT_ID); + return getAccountById(Account.CURRENT_ID); } /** @@ -66,7 +66,7 @@ public Account createAccount(Account account, String organizationName) { try { final UriResponse uriResponse = restTemplate.postForObject(Account.ACCOUNTS_URI, account, UriResponse.class, organizationName); - return getAccount(Account.getId(uriResponse.getUri())); + return getAccountByUri(uriResponse.getUri()); } catch (GoodDataException | RestClientException e) { throw new GoodDataException("Unable to create account", e); } @@ -101,7 +101,7 @@ public void removeAccount(Account account) { * @throws AccountNotFoundException when account for given id can't be found * @throws GoodDataException */ - public Account getAccount(String id) { + public Account getAccountById(String id) { try { return restTemplate.getForObject(Account.URI, Account.class, id); } catch (GoodDataRestException e) { @@ -115,4 +115,15 @@ public Account getAccount(String id) { } } + /** + * Get account for given account id + * @param uri to search for + * @return account for uri + * @throws AccountNotFoundException when account for given uri can't be found + * @throws GoodDataException + */ + public Account getAccountByUri(String uri) { + return getAccountById(Account.getId(uri)); + } + } diff --git a/src/test/java/com/gooddata/account/AccountServiceAT.java b/src/test/java/com/gooddata/account/AccountServiceAT.java index b66b55e2d..2e4ebe01e 100644 --- a/src/test/java/com/gooddata/account/AccountServiceAT.java +++ b/src/test/java/com/gooddata/account/AccountServiceAT.java @@ -7,7 +7,6 @@ import java.util.UUID; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -42,7 +41,7 @@ public void createAccount() { @Test(groups = "isolated_domain", dependsOnMethods = "createAccount") public void getAccount() { - final Account foundAccount = accountService.getAccount(this.account.getId()); + final Account foundAccount = accountService.getAccountById(this.account.getId()); assertThat(foundAccount, is(notNullValue())); assertThat(foundAccount.getId(), is(notNullValue())); diff --git a/src/test/java/com/gooddata/account/AccountServiceIT.java b/src/test/java/com/gooddata/account/AccountServiceIT.java index d01def336..f4ebebf5a 100644 --- a/src/test/java/com/gooddata/account/AccountServiceIT.java +++ b/src/test/java/com/gooddata/account/AccountServiceIT.java @@ -171,7 +171,7 @@ public void shouldGetAccount() { .withBody(readFromResource(ACCOUNT)) .withStatus(200); - final Account created = gd.getAccountService().getAccount(ACCOUNT_ID); + final Account created = gd.getAccountService().getAccountById(ACCOUNT_ID); assertThat(created, notNullValue()); assertThat(created.getFirstName(), is("Blah")); @@ -185,7 +185,7 @@ public void shouldFailToFindAccount() { .respond() .withStatus(404); - gd.getAccountService().getAccount(ACCOUNT_ID); + gd.getAccountService().getAccountById(ACCOUNT_ID); } } From 5d991cac9820691371eacde18ccc1bf93d203891 Mon Sep 17 00:00:00 2001 From: Petr Vales Date: Thu, 18 Aug 2016 13:48:52 +0200 Subject: [PATCH 141/934] add function for removing user from warehouse close #354 --- .../gooddata/warehouse/WarehouseService.java | 48 +++++++++++++++- .../com/gooddata/warehouse/WarehouseUser.java | 5 ++ .../WarehouseUserNotFoundException.java | 21 +++++++ .../warehouse/WarehouseServiceAT.java | 43 ++++++++++++++- .../warehouse/WarehouseServiceIT.java | 55 ++++++++++++++++++- .../gooddata/warehouse/WarehouseUserTest.java | 8 ++- .../warehouse/removeUserTask-finished.json | 7 +++ 7 files changed, 183 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java create mode 100644 src/test/resources/warehouse/removeUserTask-finished.json diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index a9a1037c1..872adf8ca 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -8,9 +8,9 @@ import com.gooddata.PollResult; import com.gooddata.collections.Page; import com.gooddata.collections.PageableList; +import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; -import org.springframework.util.StringUtils; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -234,6 +234,52 @@ public void handlePollException(final GoodDataRestException e) { }); } + /** + * Remove given user from warehouse instance + * @param user to remove from warehouse + * @throws WarehouseUserNotFoundException when user for removal can't be found + * @throws GoodDataException any other reason + */ + public FutureResult removeUserFromWarehouse(final WarehouseUser user) { + notNull(user, "user"); + + final WarehouseTask task; + try { + task = restTemplate.exchange(user.getUri(), HttpMethod.DELETE, null, WarehouseTask.class).getBody(); + } catch (GoodDataRestException e) { + if (HttpStatus.NOT_FOUND.value() == e.getStatusCode()) { + throw new WarehouseUserNotFoundException(user.getUri(), e); + } else { + throw e; + } + } catch (RestClientException e) { + throw new GoodDataException("Unable to remove Warehouse user from instance " + user.getUri(), e); + } + if (task == null) { + throw new GoodDataException("Empty response when user removed"); + } + + return new PollResult<>(this, + new AbstractPollHandler + (task.getPollLink(), WarehouseTask.class, Void.class) { + + @Override + public boolean isFinished(ClientHttpResponse response) throws IOException { + return HttpStatus.CREATED.equals(response.getStatusCode()); + } + + @Override + public void handlePollResult(WarehouseTask pollResult) { + setResult(null); + } + + @Override + public void handlePollException(final GoodDataRestException e) { + throw new GoodDataException("Unable to remove user from warehouse", e); + } + }); + } + /** * Updates given Warehouse. * diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUser.java b/src/main/java/com/gooddata/warehouse/WarehouseUser.java index bb1a96bba..c9a7880b4 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUser.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUser.java @@ -69,6 +69,11 @@ public Map getLinks() { return links; } + @JsonIgnore + public String getId() { + return TEMPLATE.match(getUri()).get("userId"); + } + @JsonIgnore public String getUri() { return links != null ? links.get(SELF_LINK): null; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java b/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java new file mode 100644 index 000000000..6534339d8 --- /dev/null +++ b/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java @@ -0,0 +1,21 @@ +package com.gooddata.warehouse; + +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; + +/** + * Warehouse instance doesn't exist. + */ +public class WarehouseUserNotFoundException extends GoodDataException { + + private final String userUri; + + public WarehouseUserNotFoundException(String uri, GoodDataRestException cause) { + super("Warehouse user " + uri + " was not found", cause); + this.userUri = uri; + } + + public String getUserUri() { + return userUri; + } +} diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java index 56c8c15f6..2122176ef 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java @@ -1,14 +1,18 @@ package com.gooddata.warehouse; import com.gooddata.AbstractGoodDataAT; +import com.gooddata.account.Account; import com.gooddata.collections.Page; import com.gooddata.collections.PageRequest; import com.gooddata.collections.PageableList; import com.gooddata.project.Environment; import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.Collection; +import java.util.UUID; +import java.util.concurrent.TimeUnit; import static com.gooddata.warehouse.WarehouseIdMatcher.hasSameIdAs; import static org.hamcrest.MatcherAssert.assertThat; @@ -21,24 +25,35 @@ /** * Warehouse acceptance tests */ + public class WarehouseServiceAT extends AbstractGoodDataAT { + private static final String LOGIN = "john.smith." + UUID.randomUUID() + "@gooddata.com"; + private final String warehouseToken; private final WarehouseService service; private Warehouse warehouse; private Warehouse warehouse2; + private Account account; + private WarehouseUser warehouseUser; + public WarehouseServiceAT() { warehouseToken = getProperty("warehouseToken"); service = gd.getWarehouseService(); } + @BeforeClass(groups = "isolated_domain") + public void initIsolatedDomainGroup() { + account = gd.getAccountService().createAccount(new Account(LOGIN, "nnPvcGXU7f", "FirstName", "LastName"), getProperty("domain")); + } + @Test(groups = "warehouse", dependsOnGroups = "account") public void createWarehouse() throws Exception { final Warehouse wh = new Warehouse(title, warehouseToken); wh.setEnvironment(Environment.TESTING); - warehouse = service.createWarehouse(wh).get(); + warehouse = service.createWarehouse(wh).get(60, TimeUnit.MINUTES); String jdbc = warehouse.getConnectionUrl(); } @@ -85,6 +100,19 @@ public void shouldListUsers() throws Exception { assertThat(users.getNextPage(), is(nullValue())); } + @Test(groups = { "warehouse", "isolated_domain" }, dependsOnMethods = "shouldListUsers") + public void shouldAddUserToWarehouse() { + warehouseUser = service.addUserToWarehouse(warehouse, new WarehouseUser(WarehouseUser.ADMIN_ROLE, null, LOGIN)).get(60, TimeUnit.SECONDS); + + assertThat(warehouseUser, is(notNullValue())); + } + + @Test(groups = { "warehouse", "isolated_domain" }, dependsOnMethods = "shouldAddUserToWarehouse") + public void shouldRemoveUserFromWarehouse() { + service.removeUserFromWarehouse(warehouseUser).get(60, TimeUnit.SECONDS); + warehouseUser = null; + } + @Test(dependsOnGroups = "warehouse") public void removeWarehouse() throws Exception { service.removeWarehouse(warehouse); @@ -105,6 +133,19 @@ public void tearDown() throws Exception { service.removeWarehouse(warehouse2); } } catch (Exception ignored) {} + } + @AfterClass(groups = "isolated_domain") + public void tearDownIsolatedDomainGroup() { + try { + if (warehouseUser != null) { + service.removeUserFromWarehouse(warehouseUser); + } + } catch (Exception ignored) {} + try { + if (account != null) { + gd.getAccountService().removeAccount(account); + } + } catch (Exception ignored) {} } } diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java index e7ef9e1d7..401c9c169 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java @@ -11,10 +11,10 @@ import org.testng.annotations.Test; import java.io.IOException; +import java.util.Collections; import static com.gooddata.util.ResourceUtils.readFromResource; import static net.jadler.Jadler.onRequest; -import static net.jadler.Jadler.port; import static net.jadler.Jadler.verifyThatRequest; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; @@ -33,6 +33,7 @@ public class WarehouseServiceIT extends AbstractGoodDataIT { private static final String WAREHOUSE_URI = Warehouse.TEMPLATE.expand(WAREHOUSE_ID).toString(); private static final String WAREHOUSE_USER_URI = WarehouseUsers.TEMPLATE.expand(WAREHOUSE_ID).toString(); + private static final String REMOVE_USER_TASK_DONE = "/warehouse/removeUserTask-finished.json"; private static final String CONNECTION_URL = "CONNECTION_URL"; @@ -243,4 +244,56 @@ public void shouldFailToAddUserToWarehouse() throws Exception { gd.getWarehouseService().addUserToWarehouse(warehouse, new WarehouseUser("role", "profile", null)).get(); } + @Test + public void shouldRemoveUserFromWarehouse() throws Exception { + onRequest() + .havingMethodEqualTo("DELETE") + .havingPathEqualTo(WAREHOUSE_USER_URI) + .respond() + .withBody(readFromResource(TASK_POLL)) + .withStatus(202); + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(pollingTask.getPollLink()) + .respond() + .withStatus(202) + .thenRespond() + .withBody(readFromResource(REMOVE_USER_TASK_DONE)) + .withStatus(201); + + gd.getWarehouseService() + .removeUserFromWarehouse(new WarehouseUser("role", "profile", "login", Collections.singletonMap("self", WAREHOUSE_USER_URI))) + .get(); + } + + @Test(expectedExceptions = WarehouseUserNotFoundException.class) + public void shouldFailToFindUserForRemovalFromWarehouse() throws Exception { + onRequest() + .havingMethodEqualTo("DELETE") + .havingPathEqualTo(WAREHOUSE_USER_URI) + .respond() + .withStatus(404); + + gd.getWarehouseService().removeUserFromWarehouse(new WarehouseUser("role", "profile", "login", Collections.singletonMap("self", WAREHOUSE_USER_URI))); + } + + @Test(expectedExceptions = GoodDataException.class) + public void shouldFailWhenRemoveUserTaskFails() throws Exception { + onRequest() + .havingMethodEqualTo("DELETE") + .havingPathEqualTo(WAREHOUSE_USER_URI) + .respond() + .withBody(readFromResource(TASK_POLL)) + .withStatus(202); + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(pollingTask.getPollLink()) + .respond() + .withStatus(409); + + gd.getWarehouseService() + .removeUserFromWarehouse(new WarehouseUser("role", "profile", "login", Collections.singletonMap("self", WAREHOUSE_USER_URI))) + .get(); + } + } diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java index 2cb76b5d9..15495c854 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java @@ -50,4 +50,10 @@ public void testDeserialization() throws Exception { assertThat(user.getUri(), is(SELF_LINK)); assertThat(user.getLinks(), is(LINKS)); } -} \ No newline at end of file + + @Test + public void testGetId() throws Exception { + final WarehouseUser user = new WarehouseUser(ROLE, PROFILE, LOGIN, LINKS); + assertThat(user.getId(), is("{profile-id}")); + } +} diff --git a/src/test/resources/warehouse/removeUserTask-finished.json b/src/test/resources/warehouse/removeUserTask-finished.json new file mode 100644 index 000000000..b48b33b6f --- /dev/null +++ b/src/test/resources/warehouse/removeUserTask-finished.json @@ -0,0 +1,7 @@ +{ + "asyncTask": { + "links": { + "users": "/gdc/datawarehouse/instances/instanceId/users" + } + } +} From 2aa88442d552d5350325f0f2dffa7471c57ca418 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Tue, 23 Aug 2016 11:11:55 +0200 Subject: [PATCH 142/934] fix: remove junit static import from TotalTest --- src/test/java/com/gooddata/md/report/TotalTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/gooddata/md/report/TotalTest.java b/src/test/java/com/gooddata/md/report/TotalTest.java index 6a1fc4f23..443e4362d 100644 --- a/src/test/java/com/gooddata/md/report/TotalTest.java +++ b/src/test/java/com/gooddata/md/report/TotalTest.java @@ -6,8 +6,8 @@ import org.testng.annotations.Test; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertThat; public class TotalTest { From ecd09ad3d5b8ce2141d4bca9470b45f5c0a27890 Mon Sep 17 00:00:00 2001 From: Peter Plochan Date: Wed, 24 Aug 2016 10:31:25 +0200 Subject: [PATCH 143/934] Refactor getting project uploads info in DatasetService --- .../com/gooddata/dataset/DatasetService.java | 83 ++++++----- .../gooddata/dataset/DatasetUploadsInfo.java | 130 ------------------ .../gooddata/dataset/ProjectUploadsInfo.java | 66 --------- .../com/gooddata/dataset/UploadsInfo.java | 120 ++++++++++++++++ .../gooddata/dataset/DatasetServiceAT.java | 24 +--- .../gooddata/dataset/DatasetServiceIT.java | 31 ++--- .../gooddata/dataset/DatasetServiceTest.java | 71 +++++++--- .../dataset/ProjectUploadsInfoTest.java | 56 -------- .../com/gooddata/dataset/UploadsInfoTest.java | 38 +++++ 9 files changed, 272 insertions(+), 347 deletions(-) delete mode 100644 src/main/java/com/gooddata/dataset/DatasetUploadsInfo.java delete mode 100644 src/main/java/com/gooddata/dataset/ProjectUploadsInfo.java create mode 100644 src/main/java/com/gooddata/dataset/UploadsInfo.java delete mode 100644 src/test/java/com/gooddata/dataset/ProjectUploadsInfoTest.java create mode 100644 src/test/java/com/gooddata/dataset/UploadsInfoTest.java diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index b64477bbb..d327e1249 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -22,6 +22,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -326,65 +327,55 @@ public void handlePollException(final GoodDataRestException e) { } /** - * Returns {@link ProjectUploadsInfo} object containing upload information for every single dataset - * in the given project. + * Lists all uploads for the dataset with the given identifier in the given project. Returns empty list if there + * are no uploads for the given dataset. * * @param project GoodData project - * @return information about dataset uploads - */ - public ProjectUploadsInfo getProjectUploadsInfo(Project project) { - notNull(project, "project"); - - try { - return restTemplate.getForObject(ProjectUploadsInfo.URI, ProjectUploadsInfo.class, project.getId()); - } catch (RestClientException e) { - throw new GoodDataException("Unable to get dataset uploads for project '" + project.getId() + "'.", e); - } - } - - /** - * Lists all uploads for the given dataset. Returns empty list if there are no uploads for the given dataset. - * - * @param datasetUploadsInfo {@link DatasetUploadsInfo} object for the given dataset + * @param datasetId dataset identifier * @return collection of {@link Upload} objects or empty list */ - public Collection listUploadsForDataset(DatasetUploadsInfo datasetUploadsInfo) { - notNull(datasetUploadsInfo, "datasetUploadsInfo"); + public Collection listUploadsForDataset(Project project, String datasetId) { + final UploadsInfo.DataSet dataSet = getDataSetInfo(project, datasetId); - if (isEmpty(datasetUploadsInfo.getUploadsUri())) { - throw new GoodDataException("Uploads link for dataset '" + datasetUploadsInfo.getDatasetId() - + "' does not exist."); + if (isEmpty(dataSet.getUploadsUri())) { + return emptyList(); } try { - final Uploads result = restTemplate.getForObject(datasetUploadsInfo.getUploadsUri(), Uploads.class); + final Uploads result = restTemplate.getForObject(dataSet.getUploadsUri(), Uploads.class); if (result == null) { - throw new GoodDataException("empty response from API call"); + throw new GoodDataException("Empty response from '" + dataSet.getUploadsUri() + "'."); } else if (result.items() == null){ return emptyList(); } return result.items(); } catch (RestClientException e) { - throw new GoodDataException("Unable to get uploads for dataset '" + datasetUploadsInfo.getDatasetId() - + "'.", e); + throw new GoodDataException("Unable to get '" + dataSet.getUploadsUri() + "'.", e); } } /** - * Lists all uploads for the dataset with the given identifier in the given project. Returns empty list if there - * are no uploads for the given dataset. + * Returns last upload for the dataset with given identifier in the given project. Returns null if the last upload + * doesn't exist. * - * @param project GD project + * @param project GoodData project * @param datasetId dataset identifier - * @return collection of {@link Upload} objects or empty list + * @return last dataset upload or {@code null} if the upload doesn't exist */ - public Collection listUploadsForDataset(Project project, String datasetId) { - final ProjectUploadsInfo projectUploadsInfo = getProjectUploadsInfo(project); - final DatasetUploadsInfo datasetUploadsInfo = projectUploadsInfo.getDatasetUploadsInfo(datasetId); + public Upload getLastUploadForDataset(Project project, String datasetId) { + final UploadsInfo.DataSet dataSet = getDataSetInfo(project, datasetId); - return listUploadsForDataset(datasetUploadsInfo); + if (isEmpty(dataSet.getLastUploadUri())) { + return null; + } + + try { + return restTemplate.getForObject(dataSet.getLastUploadUri(), Upload.class); + } catch (RestClientException e) { + throw new GoodDataException("Unable to get '" + dataSet.getLastUploadUri() + "'."); + } } /** @@ -402,4 +393,26 @@ public UploadStatistics getUploadStatistics(Project project) { throw new GoodDataException("Unable to get dataset uploads statistics.", e); } } + + /** + * Returns {@link UploadsInfo.DataSet} object containing upload information for the given dataset in the given project. + * + * Package-private for testing purposes. + */ + UploadsInfo.DataSet getDataSetInfo(Project project, String datasetId) { + notNull(project, "project"); + notEmpty(datasetId, "datasetId"); + + final URI uploadsInfoUri = UploadsInfo.URI_TEMPLATE.expand(project.getId()); + try { + final UploadsInfo uploadsInfo = restTemplate.getForObject(uploadsInfoUri, UploadsInfo.class); + if (uploadsInfo == null) { + throw new GoodDataException("Empty response from '" + uploadsInfoUri.toString() + "'."); + } + + return uploadsInfo.getDataSet(datasetId); + } catch (RestClientException e) { + throw new GoodDataException("Unable to get '" + uploadsInfoUri.toString() + "'.", e); + } + } } diff --git a/src/main/java/com/gooddata/dataset/DatasetUploadsInfo.java b/src/main/java/com/gooddata/dataset/DatasetUploadsInfo.java deleted file mode 100644 index a3c459310..000000000 --- a/src/main/java/com/gooddata/dataset/DatasetUploadsInfo.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.gooddata.dataset; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.gooddata.md.Meta; -import com.gooddata.util.GDDateTimeDeserializer; -import org.joda.time.DateTime; - -/** - * Contains information about dataset uploads for one dataset in the project. Information contain: - *
    - *
  • dataset ID
  • - *
  • uri to all uploads for the given dataset
  • - *
  • date of the last successful upload
  • - *
  • last upload
  • - *
- * - * Deserialization only. - */ -@JsonIgnoreProperties(ignoreUnknown = true) -public class DatasetUploadsInfo { - - private final Meta meta; - private final String datasetUploadsUri; - private final DateTime lastSuccess; - private final LastUpload lastUpload; - - private DatasetUploadsInfo( - @JsonProperty("meta") Meta meta, - @JsonProperty("dataUploads") String datasetUploadsUri, - @JsonProperty("lastSuccess") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime lastSuccess, - @JsonProperty("lastUpload") LastUpload lastUpload) { - this.meta = meta; - this.datasetUploadsUri = datasetUploadsUri; - this.lastSuccess = lastSuccess; - this.lastUpload = lastUpload; - } - - /** - * @return dataset identifier - */ - public String getDatasetId() { - return meta.getIdentifier(); - } - - /** - * @return dataset's author - */ - public String getDatasetAuthor() { - return meta.getAuthor(); - } - - /** - * @return dataset created date - */ - public DateTime getDatasetCreated() { - return meta.getCreated(); - } - - /** - * @return dataset title - */ - public String getDatasetTitle() { - return meta.getTitle(); - } - - /** - * @return dataset URI link - */ - public String getDatasetUri() { - return meta.getUri(); - } - - /** - * @return dataset's summary - */ - public String getDatasetSummary() { - return meta.getSummary(); - } - - /** - * @return URI for all uploads of this dataset - */ - public String getUploadsUri() { - return datasetUploadsUri; - } - - /** - * @return date of the last successful upload of this dataset - */ - public DateTime getLastSuccess() { - return lastSuccess; - } - - /** - * Returns object containing information about last dataset upload. This upload doesn't contain information - * about upload mode, size of data and date when this upload was processed. If you want to get more information about - * dataset uploads, use {@link DatasetService#listUploadsForDataset(DatasetUploadsInfo)} method. - * - * @return {@link Upload} object - */ - public Upload getLastUpload() { - return lastUpload.upload; - } - - /** - * Wrapper class for the last upload. - * Only for deserialization. For internal use only. - */ - @JsonIgnoreProperties(ignoreUnknown = true) - @JsonTypeName("dataUploadShort") - @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) - private static class LastUpload { - - private final Upload upload; - - private LastUpload( - @JsonProperty("uri") String uri, - @JsonProperty("status") String status, - @JsonProperty("progress") Double progress, - @JsonProperty("msg") String message, - @JsonProperty("date") @JsonDeserialize(using = GDDateTimeDeserializer.class) DateTime date) { - - this.upload = new Upload(message, progress, status, null, uri, date, null, null); - } - } -} diff --git a/src/main/java/com/gooddata/dataset/ProjectUploadsInfo.java b/src/main/java/com/gooddata/dataset/ProjectUploadsInfo.java deleted file mode 100644 index bab0b8662..000000000 --- a/src/main/java/com/gooddata/dataset/ProjectUploadsInfo.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.gooddata.dataset; - -import static com.gooddata.util.Validate.notEmpty; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; -import org.springframework.web.util.UriTemplate; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -/** - * Contains information about dataset uploads for every single dataset in the project. - * For more about dataset uploads information, see {@link DatasetUploadsInfo}. - * Deserialization only. - */ -@JsonTypeName("dataSetsInfo") -@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) -@JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectUploadsInfo { - - public static final String URI = "/gdc/md/{projectId}/data/sets"; - public static final UriTemplate URI_TEMPLATE = new UriTemplate(URI); - - private final Map datasets = new HashMap<>(); - - //for deserialization and testing purposes only - ProjectUploadsInfo(@JsonProperty("sets") Collection datasets) { - if (datasets != null) { - for (DatasetUploadsInfo dataset : datasets) { - this.datasets.put(dataset.getDatasetId(), dataset); - } - } - } - - /** - * Returns dataset uploads information for a dataset with the given ID. - * - * @param datasetId dataset identifier - * @return {@link DatasetUploadsInfo} object - */ - public DatasetUploadsInfo getDatasetUploadsInfo(String datasetId) { - notEmpty(datasetId, "datasetId"); - - if (hasDataset(datasetId)) { - return datasets.get(datasetId); - } else { - throw new DatasetNotFoundException(datasetId); - } - } - - /** - * Returns if dataset with the given identifier exists in the project dataset uploads. - * - * @param datasetId dataset identifier - * @return {@code true} if the dataset exists, {@code false} otherwise - */ - public boolean hasDataset(String datasetId) { - notEmpty(datasetId, "datasetId"); - - return datasets.containsKey(datasetId); - } -} diff --git a/src/main/java/com/gooddata/dataset/UploadsInfo.java b/src/main/java/com/gooddata/dataset/UploadsInfo.java new file mode 100644 index 000000000..ba1823413 --- /dev/null +++ b/src/main/java/com/gooddata/dataset/UploadsInfo.java @@ -0,0 +1,120 @@ +package com.gooddata.dataset; + +import static com.gooddata.util.Validate.notEmpty; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.md.Meta; +import org.springframework.web.util.UriTemplate; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * Contains information about dataset uploads for every single dataset in the project. + * For more about dataset uploads information, see {@link DataSet}. + * Deserialization only. Internal use only + */ +@JsonTypeName("dataSetsInfo") +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonIgnoreProperties(ignoreUnknown = true) +class UploadsInfo { + + static final String URI = "/gdc/md/{projectId}/data/sets"; + static final UriTemplate URI_TEMPLATE = new UriTemplate(URI); + + private final Map datasets = new HashMap<>(); + + //for deserialization and testing purposes only + UploadsInfo(@JsonProperty("sets") Collection datasets) { + if (datasets != null) { + for (DataSet dataset : datasets) { + this.datasets.put(dataset.getDatasetId(), dataset); + } + } + } + + /** + * Returns dataset uploads information for a dataset with the given ID. + * + * @param datasetId dataset identifier + * @return {@link DataSet} object + */ + DataSet getDataSet(String datasetId) { + notEmpty(datasetId, "datasetId"); + + final DataSet dataSet = datasets.get(datasetId); + if (dataSet != null) { + return dataSet; + } else { + throw new DatasetNotFoundException(datasetId); + } + } + + /** + * Contains information about dataset uploads for one dataset in the project. Information contain: + *
    + *
  • dataset ID
  • + *
  • uri to all uploads for the given dataset
  • + *
  • last upload
  • + *
+ * + * Deserialization only. + */ + @JsonIgnoreProperties(ignoreUnknown = true) + static class DataSet { + + private final Meta meta; + private final String datasetUploadsUri; + private final LastUpload lastUpload; + + private DataSet( + @JsonProperty("meta") Meta meta, + @JsonProperty("dataUploads") String datasetUploadsUri, + @JsonProperty("lastUpload") LastUpload lastUpload) { + this.meta = meta; + this.datasetUploadsUri = datasetUploadsUri; + this.lastUpload = lastUpload; + } + + /** + * @return dataset identifier + */ + String getDatasetId() { + return meta.getIdentifier(); + } + + /** + * @return URI for all uploads of this dataset + */ + String getUploadsUri() { + return datasetUploadsUri; + } + + /** + * @return {@link Upload} uri of the last upload + */ + String getLastUploadUri() { + return lastUpload.uri; + } + } + + /** + * Wrapper class for the last upload. + * Only for deserialization. For internal use only. + */ + @JsonIgnoreProperties(ignoreUnknown = true) + @JsonTypeName("dataUploadShort") + @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) + private static class LastUpload { + + private final String uri; + + private LastUpload(@JsonProperty("uri") String uri) { + this.uri = uri; + } + } +} diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java index 8d0628825..e08af9f64 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java @@ -76,32 +76,18 @@ public void loadDatasetBatchFail() throws Exception { } @Test(groups = "dataset", dependsOnMethods = {"loadDataset"}) - public void getProjectsUploadsInfo() throws Exception { - final ProjectUploadsInfo projectUploadsInfo = gd.getDatasetService().getProjectUploadsInfo(project); - - assertThat(projectUploadsInfo, notNullValue()); - assertTrue(projectUploadsInfo.hasDataset("dataset.person")); - assertThat(projectUploadsInfo.getDatasetUploadsInfo("dataset.person").getLastUpload(), notNullValue()); - } - - @Test(groups = "dataset", dependsOnMethods = {"getProjectsUploadsInfo"}) public void listUploadsForDataset() throws Exception { - final DatasetService datasetService = gd.getDatasetService(); - - final DatasetUploadsInfo datasetUploadsInfo = - datasetService.getProjectUploadsInfo(project).getDatasetUploadsInfo("dataset.person"); - final Collection uploads = datasetService.listUploadsForDataset(datasetUploadsInfo); + final Collection uploads = gd.getDatasetService().listUploadsForDataset(project, "dataset.person"); assertThat(uploads, notNullValue()); assertFalse(uploads.isEmpty()); } - @Test(groups = "dataset", dependsOnMethods = {"getProjectsUploadsInfo"}) - public void listUploadsForDatasetId() throws Exception { - final Collection uploads = gd.getDatasetService().listUploadsForDataset(project, "dataset.person"); + @Test(groups = "dataset", dependsOnMethods = {"loadDataset"}) + public void getLastUploadForDataset() throws Exception { + final Upload lastUpload = gd.getDatasetService().getLastUploadForDataset(project, "dataset.person"); - assertThat(uploads, notNullValue()); - assertFalse(uploads.isEmpty()); + assertThat(lastUpload, notNullValue()); } @Test(groups = "dataset", dependsOnMethods = {"loadDataset", "loadDatasetFail"}) diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index e1e6e3cb1..ce0c7e724 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -255,40 +255,27 @@ public void shouldFailUpdateProjectData() throws IOException { } @Test - public void shouldGetProjectUploadsInfo() { + public void shouldListUploadsForDataset() throws Exception { onRequest() .havingPathEqualTo("/gdc/md/PROJECT_ID/data/sets") .respond() .withStatus(200) .withBody(readFromResource("/dataset/uploads/data-sets.json")); - final ProjectUploadsInfo projectUploadsInfo = gd.getDatasetService().getProjectUploadsInfo(project); - - assertThat(projectUploadsInfo, notNullValue()); - assertTrue(projectUploadsInfo.hasDataset("dataset.campaign")); - } - - @Test - public void shouldListUploadsForDataset() { - final String datasetUploadsUri = "/gdc/md/PROJECT_ID/uploads/DATASET_ID"; - onRequest() - .havingPathEqualTo(datasetUploadsUri) + .havingPathEqualTo("/gdc/md/PROJECT_ID/data/uploads/814") .respond() .withStatus(200) .withBody(readFromResource("/dataset/uploads/uploads.json")); - final DatasetUploadsInfo info = mock(DatasetUploadsInfo.class); - when(info.getUploadsUri()).thenReturn(datasetUploadsUri); - - final Collection uploads = gd.getDatasetService().listUploadsForDataset(info); + final Collection uploads = gd.getDatasetService().listUploadsForDataset(project, "dataset.campaign"); assertThat(uploads, notNullValue()); assertThat(uploads, hasSize(2)); } @Test - public void shouldListUploadsForDatasetId() throws Exception { + public void shouldGetLastUploadForDataset() throws Exception { onRequest() .havingPathEqualTo("/gdc/md/PROJECT_ID/data/sets") .respond() @@ -296,15 +283,15 @@ public void shouldListUploadsForDatasetId() throws Exception { .withBody(readFromResource("/dataset/uploads/data-sets.json")); onRequest() - .havingPathEqualTo("/gdc/md/PROJECT_ID/data/uploads/814") + .havingPathEqualTo("/gdc/md/PROJECT_ID/data/upload/1076") .respond() .withStatus(200) - .withBody(readFromResource("/dataset/uploads/uploads.json")); + .withBody(readFromResource("/dataset/uploads/upload.json")); - final Collection uploads = gd.getDatasetService().listUploadsForDataset(project, "dataset.campaign"); + final Upload upload = gd.getDatasetService().getLastUploadForDataset(project, "dataset.campaign"); - assertThat(uploads, notNullValue()); - assertThat(uploads, hasSize(2)); + assertThat(upload, notNullValue()); + assertThat(upload.getStatus(), is("OK")); } @Test diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java index 64adbb8d3..af51f952f 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java @@ -23,6 +23,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; @@ -176,44 +177,71 @@ public void testListDatasetsWithEmptyResponse() throws Exception { } @Test(expectedExceptions = GoodDataException.class) - public void testGetProjectsUploadsInfoWithRestClientError() throws Exception { - when(restTemplate.getForObject(ProjectUploadsInfo.URI, ProjectUploadsInfo.class, PROJECT_ID)) + public void testGetDataSetInfoRestClientError() throws Exception { + when(restTemplate.getForObject(UploadsInfo.URI, UploadsInfo.class, PROJECT_ID)) .thenThrow(new RestClientException("")); - service.getProjectUploadsInfo(project); + service.getDataSetInfo(project, "dataset.id"); } @Test(expectedExceptions = GoodDataException.class) - public void testListUploadsForDatasetWhenMissingUploadsUri() throws Exception { - final DatasetUploadsInfo uploadsInfo = mockDatasetUploadsInfo(null); + public void testGetDataSetInfoEmptyResponse() throws Exception { + when(restTemplate.getForObject(UploadsInfo.URI, UploadsInfo.class, PROJECT_ID)).thenReturn(null); + service.getDataSetInfo(project, "dataset.id"); + } + + @Test + public void testListUploadsForDatasetMissingUri() throws Exception { + mockDataSetInfo(); - service.listUploadsForDataset(uploadsInfo); + assertThat(service.listUploadsForDataset(project, DATASET_ID), Matchers.empty()); } @Test(expectedExceptions = GoodDataException.class) - public void testListUploadsForDatasetWhenRestClientError() throws Exception { - final DatasetUploadsInfo uploadsInfo = mockDatasetUploadsInfo(DATASET_UPLOADS_URI); + public void testListUploadsForDatasetRestClientError() throws Exception { + final UploadsInfo.DataSet dataSetInfo = mockDataSetInfo(); + when(dataSetInfo.getUploadsUri()).thenReturn(DATASET_UPLOADS_URI); when(restTemplate.getForObject(DATASET_UPLOADS_URI, Uploads.class)).thenThrow(new RestClientException("")); - service.listUploadsForDataset(uploadsInfo); + service.listUploadsForDataset(project, DATASET_ID); } @Test(expectedExceptions = GoodDataException.class) - public void testListUploadsForDatasetWithNoResponse() throws Exception { - final DatasetUploadsInfo uploadsInfo = mockDatasetUploadsInfo(DATASET_UPLOADS_URI); + public void testListUploadsForDatasetEmptyResponse() throws Exception { + final UploadsInfo.DataSet dataSetInfo = mockDataSetInfo(); + when(dataSetInfo.getUploadsUri()).thenReturn(DATASET_UPLOADS_URI); when(restTemplate.getForObject(DATASET_UPLOADS_URI, Uploads.class)).thenReturn(null); - service.listUploadsForDataset(uploadsInfo); + service.listUploadsForDataset(project, DATASET_ID); } @Test - public void testListUploadsForDatasetWithEmptyResponseBody() throws Exception { - final DatasetUploadsInfo datasetUploadsInfo = mockDatasetUploadsInfo(DATASET_UPLOADS_URI); + public void testListUploadsForDatasetEmptyResponseBody() throws Exception { + final UploadsInfo.DataSet dataSetInfo = mockDataSetInfo(); + when(dataSetInfo.getUploadsUri()).thenReturn(DATASET_UPLOADS_URI); when(restTemplate.getForObject(DATASET_UPLOADS_URI, Uploads.class)).thenReturn(new Uploads(null)); - assertThat(service.listUploadsForDataset(datasetUploadsInfo), Matchers.empty()); + assertThat(service.listUploadsForDataset(project, DATASET_ID), Matchers.empty()); + } + + @Test + public void testGetLastUploadForDatasetMissingUri() throws Exception { + mockDataSetInfo(); + + assertThat(service.getLastUploadForDataset(project, DATASET_ID), nullValue()); + } + + @Test(expectedExceptions = GoodDataException.class) + public void testGetLastUploadForDatasetRestClientError() throws Exception { + final UploadsInfo.DataSet dataSetInfo = mockDataSetInfo(); + final String lastUploadUri = "last/upload/uri"; + when(dataSetInfo.getLastUploadUri()).thenReturn(lastUploadUri); + + when(restTemplate.getForObject(lastUploadUri, Upload.class)).thenThrow(new RestClientException("")); + + service.getLastUploadForDataset(project, DATASET_ID); } @Test(expectedExceptions = GoodDataException.class) @@ -224,10 +252,15 @@ public void testGetUploadStatisticsWhenRestClientError() throws Exception { service.getUploadStatistics(project); } - private DatasetUploadsInfo mockDatasetUploadsInfo(String uploadsUri) { - final DatasetUploadsInfo uploadsInfo = mock(DatasetUploadsInfo.class); - when(uploadsInfo.getUploadsUri()).thenReturn(uploadsUri); + private UploadsInfo.DataSet mockDataSetInfo() { + final UploadsInfo.DataSet dataSetInfo = mock(UploadsInfo.DataSet.class); + when(dataSetInfo.getDatasetId()).thenReturn(DATASET_ID); + + final UploadsInfo uploadsInfo = new UploadsInfo(singletonList(dataSetInfo)); + + when(restTemplate.getForObject(UploadsInfo.URI_TEMPLATE.expand(PROJECT_ID), UploadsInfo.class)) + .thenReturn(uploadsInfo); - return uploadsInfo; + return dataSetInfo; } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/ProjectUploadsInfoTest.java b/src/test/java/com/gooddata/dataset/ProjectUploadsInfoTest.java deleted file mode 100644 index d1d3a919d..000000000 --- a/src/test/java/com/gooddata/dataset/ProjectUploadsInfoTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.gooddata.dataset; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.closeTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.testng.Assert.assertTrue; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.testng.annotations.Test; - -import java.io.InputStream; -import java.util.Collections; - -public class ProjectUploadsInfoTest { - - @Test - public void shouldDeserialize() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-sets.json"); - final ProjectUploadsInfo projectUploadsInfo = new ObjectMapper().readValue(input, ProjectUploadsInfo.class); - - assertThat(projectUploadsInfo, notNullValue()); - assertTrue(projectUploadsInfo.hasDataset("dataset.campaign"), - "ProjectUploadsInfo must contain dataset with id: 'dataset.campaign'."); - - final DatasetUploadsInfo dataset = projectUploadsInfo.getDatasetUploadsInfo("dataset.campaign"); - - assertThat(dataset, notNullValue()); - - assertThat(dataset.getDatasetId(), is("dataset.campaign")); - assertThat(dataset.getDatasetUri(), is("/gdc/md/PROJECT_ID/obj/814")); - assertThat(dataset.getDatasetTitle(), is("Campaign")); - assertThat(dataset.getDatasetAuthor(), is("/gdc/account/profile/1")); - assertThat(dataset.getDatasetCreated(), is(new DateTime(2010, 11, 23, 10, 37, 54, DateTimeZone.UTC))); - assertThat(dataset.getDatasetSummary(), - is("Information about Medium, Campaign, Keyword, Ad Slot, Source and Referral Path")); - - assertThat(dataset.getUploadsUri(), is("/gdc/md/PROJECT_ID/data/uploads/814")); - assertThat(dataset.getLastSuccess(), is(new DateTime(2011, 9, 12, 13, 36, 27, DateTimeZone.UTC))); - - final Upload lastUpload = dataset.getLastUpload(); - assertThat(lastUpload, notNullValue()); - assertThat(lastUpload.getUri(), is("/gdc/md/PROJECT_ID/data/upload/1076")); - assertThat(lastUpload.getStatus(), is("WARNING")); - assertThat(lastUpload.getProgress(), closeTo(1, 0.0001)); - assertThat(lastUpload.getMessage(), is("1 of 7 parts went with warnings")); - assertThat(lastUpload.getCreatedAt(), is(new DateTime(2011, 10, 4, 10, 35, 5, DateTimeZone.UTC))); - } - - @Test(expectedExceptions = DatasetNotFoundException.class) - public void getDatasetUploadInfoFails() throws Exception { - new ProjectUploadsInfo(Collections.emptyList()).getDatasetUploadsInfo("dataset.non_existing_one"); - } -} \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java new file mode 100644 index 000000000..7bc42e95c --- /dev/null +++ b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java @@ -0,0 +1,38 @@ +package com.gooddata.dataset; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.closeTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.testng.Assert.assertTrue; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.testng.annotations.Test; + +import java.io.InputStream; +import java.util.Collections; + +public class UploadsInfoTest { + + @Test + public void shouldDeserialize() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-sets.json"); + final UploadsInfo uploadsInfo = new ObjectMapper().readValue(input, UploadsInfo.class); + + assertThat(uploadsInfo, notNullValue()); + + final UploadsInfo.DataSet dataset = uploadsInfo.getDataSet("dataset.campaign"); + + assertThat(dataset, notNullValue()); + assertThat(dataset.getDatasetId(), is("dataset.campaign")); + assertThat(dataset.getUploadsUri(), is("/gdc/md/PROJECT_ID/data/uploads/814")); + assertThat(dataset.getLastUploadUri(), is("/gdc/md/PROJECT_ID/data/upload/1076")); + } + + @Test(expectedExceptions = DatasetNotFoundException.class) + public void getDatasetUploadInfoFails() throws Exception { + new UploadsInfo(Collections.emptyList()).getDataSet("dataset.non_existing_one"); + } +} \ No newline at end of file From bb0c87af950ccd59c716e08fb8869fd96a5114b9 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 24 Aug 2016 11:25:32 +0200 Subject: [PATCH 144/934] [maven-release-plugin] prepare release gooddata-java-1.7.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8cb01ce07..ea0f16e7f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.6.1-SNAPSHOT + 1.7.0 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 02b89cc352d72551386d623d9914e69d5fa07c99 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 24 Aug 2016 11:25:32 +0200 Subject: [PATCH 145/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ea0f16e7f..5b7b337a8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 1.7.0 + 1.7.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 0c3827fafa1a90cf6cef6e036bb82397a1d7a5bb Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 24 Aug 2016 13:00:41 +0200 Subject: [PATCH 146/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 50cde79a8..5742635e5 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 1.6.0 + 1.7.0 ``` From 2339f4636d8b161d82b51b48ec7d46c6a1a09123 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 24 Aug 2016 13:09:02 +0200 Subject: [PATCH 147/934] [maven-release-plugin] prepare release gooddata-java-2.0.0-RC.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c0fd2471a..d7f8c4e5c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.0.0.RC-SNAPSHOT + 2.0.0-RC.1 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From dee3d346c1e69db5d08ff598671dbfe21feff690 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 24 Aug 2016 13:09:02 +0200 Subject: [PATCH 148/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d7f8c4e5c..d6e918624 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.0.0-RC.1 + 2.0.0-RC.2-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From ba3e35583bbb054c200856c3e08edc786ab1d333 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 29 Aug 2016 15:06:02 +0200 Subject: [PATCH 149/934] make MetricElement constructor package private This doesn't break compatibility as this class is new in 2.0 --- src/main/java/com/gooddata/md/report/MetricElement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/md/report/MetricElement.java b/src/main/java/com/gooddata/md/report/MetricElement.java index 32ee6dbf7..1f2bee5ee 100644 --- a/src/main/java/com/gooddata/md/report/MetricElement.java +++ b/src/main/java/com/gooddata/md/report/MetricElement.java @@ -25,7 +25,7 @@ public class MetricElement { private final String drillAcrossStepAttributeDisplayFormUri; @JsonCreator - public MetricElement(@JsonProperty("uri") final String uri, + MetricElement(@JsonProperty("uri") final String uri, @JsonProperty("alias") final String alias, @JsonProperty("format") final String format, @JsonProperty("drillAcrossStepAttributeDF") String drillAcrossStepAttributeDisplayFormUri) { From fea22d98a30ceb34df837b8e345d797948edb52e Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 29 Aug 2016 16:01:59 +0200 Subject: [PATCH 150/934] add: convenient MetricElement constructors --- .../com/gooddata/md/report/MetricElement.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/md/report/MetricElement.java b/src/main/java/com/gooddata/md/report/MetricElement.java index 1f2bee5ee..ce042aa8f 100644 --- a/src/main/java/com/gooddata/md/report/MetricElement.java +++ b/src/main/java/com/gooddata/md/report/MetricElement.java @@ -35,16 +35,33 @@ public class MetricElement { this.drillAcrossStepAttributeDisplayFormUri = drillAcrossStepAttributeDisplayFormUri; } + /** + * Creates a new metric element + * @param uri metric uri + * @param alias metric alias + * @deprecated for compatibility with 1.x only, + * use {@link #MetricElement(Metric, String)} or {@link #MetricElement(Metric)} + */ + @Deprecated public MetricElement(String uri, String alias) { this(uri, alias, null, null); } + /** + * Creates new instance using uri of given metric and alias. + * @param metric metric to create element from + * @param alias metric alias + */ + public MetricElement(final Metric metric, final String alias) { + this(notNull(notNull(metric, "metric").getUri(), "uri"), notNull(alias, "alias"), null, null); + } + /** * Creates new instance using uri of given metric and it's title as alias. * @param metric metric to create element from */ public MetricElement(final Metric metric) { - this(notNull(notNull(metric, "metric").getUri(), "uri"), notNull(metric, "metric").getTitle()); + this(metric, notNull(metric, "metric").getTitle()); } public String getUri() { From 3d7729b0a101be90f9d3ef2e6f4f1ec47be3f24c Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Mon, 29 Aug 2016 16:33:44 +0200 Subject: [PATCH 151/934] Get rid of some deprecated API usage warnings --- .../com/gooddata/dataset/DatasetService.java | 2 +- .../com/gooddata/warehouse/WarehouseService.java | 2 +- .../java/com/gooddata/account/AccountTest.java | 1 + .../dataload/processes/DataloadProcessTest.java | 1 + .../processes/ProcessExecutionTaskTest.java | 1 + .../com/gooddata/dataset/DatasetServiceIT.java | 1 + .../com/gooddata/dataset/DatasetServiceTest.java | 16 ++++++++++------ .../java/com/gooddata/dataset/DatasetTest.java | 1 + .../java/com/gooddata/dataset/DatasetsTest.java | 1 + src/test/java/com/gooddata/gdc/GdcServiceIT.java | 4 +++- src/test/java/com/gooddata/gdc/GdcTest.java | 1 + .../java/com/gooddata/gdc/LinkEntriesTest.java | 1 + .../java/com/gooddata/gdc/RootLinksTest.java | 14 ++++++++++++++ .../gooddata/md/AttributeDisplayFormTest.java | 1 + src/test/java/com/gooddata/md/AttributeTest.java | 1 + src/test/java/com/gooddata/md/DatasetTest.java | 1 + .../java/com/gooddata/md/DisplayFormTest.java | 1 + src/test/java/com/gooddata/md/EntryTest.java | 1 + .../com/gooddata/md/NestedAttributeTest.java | 1 + .../com/gooddata/model/MaqlDdlLinksTest.java | 1 + .../java/com/gooddata/project/ProjectTest.java | 1 + .../gooddata/warehouse/WarehouseServiceIT.java | 4 ++-- .../gooddata/warehouse/WarehouseTaskTest.java | 2 ++ 23 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 4a00b931b..c546e7e2c 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -237,7 +237,7 @@ public Collection listDatasets(Project project) { public Collection listDatasetLinks(final Project project) { notNull(project, "project"); try { - final Datasets result = restTemplate.getForObject(Datasets.URI, Datasets.class, project.getId()); + final DatasetLinks result = restTemplate.getForObject(DatasetLinks.URI, DatasetLinks.class, project.getId()); if (result == null) { throw new GoodDataException("Empty response from API call"); } else if (result.getLinks() == null) { diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index 2de495c14..19d01d828 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -261,7 +261,7 @@ public FutureResult removeUserFromWarehouse(final WarehouseUser user) { return new PollResult<>(this, new AbstractPollHandler - (task.getPollLink(), WarehouseTask.class, Void.class) { + (task.getPollUri(), WarehouseTask.class, Void.class) { @Override public boolean isFinished(ClientHttpResponse response) throws IOException { diff --git a/src/test/java/com/gooddata/account/AccountTest.java b/src/test/java/com/gooddata/account/AccountTest.java index a5b1893c9..9a888b54e 100644 --- a/src/test/java/com/gooddata/account/AccountTest.java +++ b/src/test/java/com/gooddata/account/AccountTest.java @@ -14,6 +14,7 @@ public class AccountTest { private static final String FIRST_NAME = "Blah"; private static final String LAST_NAME = "Muhehe"; + @SuppressWarnings("deprecation") @Test public void testDeserialize() throws Exception { final Account account = new ObjectMapper() diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java index 7132ff308..3a3745c75 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java @@ -12,6 +12,7 @@ public class DataloadProcessTest { + @SuppressWarnings("deprecation") @Test public void testDeserialization() throws Exception { final DataloadProcess process = new ObjectMapper() diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java index 3e36044e1..77c128ca2 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java @@ -8,6 +8,7 @@ public class ProcessExecutionTaskTest { + @SuppressWarnings("deprecation") @Test public void testDeserialize() throws Exception { final ProcessExecutionTask task = new ObjectMapper() diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index b9f30258a..8d916e986 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -135,6 +135,7 @@ public void shouldGetDatasetManifest() throws Exception { assertThat(manifest, is(notNullValue())); } + @SuppressWarnings("deprecation") @Test public void shouldListDatasets() throws Exception { onRequest() diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java index aa669a443..790ce1e8d 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java @@ -150,27 +150,31 @@ public void testLoadDatasetByIdWithNullInputStream() throws Exception { service.loadDataset(project, DATASET_ID, null); } + @SuppressWarnings("deprecation") @Test(expectedExceptions = IllegalArgumentException.class) public void testListDatasetsWithNullProject() throws Exception { service.listDatasets(null); } + @SuppressWarnings("deprecation") @Test(expectedExceptions = GoodDataException.class) public void testListDatasetsWithNullResponse() throws Exception { when(restTemplate.getForObject(Datasets.URI, Link.class, PROJECT_ID)).thenReturn(null); service.listDatasets(project); } + @SuppressWarnings("deprecation") @Test(expectedExceptions = GoodDataException.class) public void testListDatasetsWithRestClientError() throws Exception { when(restTemplate.getForObject(Datasets.URI, Link.class, PROJECT_ID)).thenThrow(new RestClientException("")); service.listDatasets(project); } + @SuppressWarnings("deprecation") @Test public void testListDatasetsWithEmptyResponse() throws Exception { - final Datasets datasets = mock(Datasets.class); - when(restTemplate.getForObject(Datasets.URI, Datasets.class, PROJECT_ID)).thenReturn(datasets); + final DatasetLinks datasets = mock(DatasetLinks.class); + when(restTemplate.getForObject(DatasetLinks.URI, DatasetLinks.class, PROJECT_ID)).thenReturn(datasets); when(datasets.getLinks()).thenReturn(singletonList(datasetLink)); when(datasetLink.getIdentifier()).thenReturn("ID"); @@ -188,20 +192,20 @@ public void testListDatasetLinksWithNullProject() throws Exception { @Test(expectedExceptions = GoodDataException.class) public void testListDatasetLinksWithNullResponse() throws Exception { - when(restTemplate.getForObject(Datasets.URI, Link.class, PROJECT_ID)).thenReturn(null); + when(restTemplate.getForObject(DatasetLinks.URI, Link.class, PROJECT_ID)).thenReturn(null); service.listDatasetLinks(project); } @Test(expectedExceptions = GoodDataException.class) public void testListDatasetLinksWithRestClientError() throws Exception { - when(restTemplate.getForObject(Datasets.URI, Link.class, PROJECT_ID)).thenThrow(new RestClientException("")); + when(restTemplate.getForObject(DatasetLinks.URI, Link.class, PROJECT_ID)).thenThrow(new RestClientException("")); service.listDatasetLinks(project); } @Test public void testListDatasetLinksWithEmptyResponse() throws Exception { - final Datasets datasets = mock(Datasets.class); - when(restTemplate.getForObject(Datasets.URI, Datasets.class, PROJECT_ID)).thenReturn(datasets); + final DatasetLinks datasets = mock(DatasetLinks.class); + when(restTemplate.getForObject(DatasetLinks.URI, DatasetLinks.class, PROJECT_ID)).thenReturn(datasets); when(datasets.getLinks()).thenReturn(singletonList(datasetLink)); final Collection result = service.listDatasetLinks(project); diff --git a/src/test/java/com/gooddata/dataset/DatasetTest.java b/src/test/java/com/gooddata/dataset/DatasetTest.java index 9763bff61..cc6ea375e 100644 --- a/src/test/java/com/gooddata/dataset/DatasetTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetTest.java @@ -16,6 +16,7 @@ public class DatasetTest { + @SuppressWarnings("deprecation") @Test public void deserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/dataset/dataset.json"); diff --git a/src/test/java/com/gooddata/dataset/DatasetsTest.java b/src/test/java/com/gooddata/dataset/DatasetsTest.java index 2a53d9d6d..a534d2589 100644 --- a/src/test/java/com/gooddata/dataset/DatasetsTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetsTest.java @@ -14,6 +14,7 @@ public class DatasetsTest { + @SuppressWarnings("deprecation") @Test public void deserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/dataset/datasetLinks.json"); diff --git a/src/test/java/com/gooddata/gdc/GdcServiceIT.java b/src/test/java/com/gooddata/gdc/GdcServiceIT.java index 655c208d6..bb3b3893a 100644 --- a/src/test/java/com/gooddata/gdc/GdcServiceIT.java +++ b/src/test/java/com/gooddata/gdc/GdcServiceIT.java @@ -12,6 +12,7 @@ public class GdcServiceIT extends AbstractGoodDataIT { + @SuppressWarnings("deprecation") @Test public void shouldReturnGdc() throws Exception { onRequest() @@ -26,6 +27,7 @@ public void shouldReturnGdc() throws Exception { assertThat(gdc.getUserStagingUri(), is("/uploads")); } + @SuppressWarnings("deprecation") @Test public void shouldUseProperVersionHeader() throws Exception { onRequest() @@ -51,7 +53,7 @@ public void shouldReturnRootLinks() throws Exception { final RootLinks rootLinks = gd.getGdcService().getRootLinks(); assertThat(rootLinks, is(notNullValue())); - assertThat(rootLinks.getUserStagingLink(), is("/uploads")); + assertThat(rootLinks.getUserStagingUri(), is("/uploads")); } @Test diff --git a/src/test/java/com/gooddata/gdc/GdcTest.java b/src/test/java/com/gooddata/gdc/GdcTest.java index 7178f56df..8f483fdd1 100644 --- a/src/test/java/com/gooddata/gdc/GdcTest.java +++ b/src/test/java/com/gooddata/gdc/GdcTest.java @@ -11,6 +11,7 @@ public class GdcTest { + @SuppressWarnings("deprecation") @Test public void deserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/gdc/gdc.json"); diff --git a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java index b831793b9..7bdf95b53 100644 --- a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java +++ b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java @@ -15,6 +15,7 @@ public class LinkEntriesTest { + @SuppressWarnings("deprecation") @Test public void testDeserialization() throws Exception { final InputStream stream = getClass().getResourceAsStream("/gdc/linkEntries.json"); diff --git a/src/test/java/com/gooddata/gdc/RootLinksTest.java b/src/test/java/com/gooddata/gdc/RootLinksTest.java index 59ec65d9b..5caa6c1a2 100644 --- a/src/test/java/com/gooddata/gdc/RootLinksTest.java +++ b/src/test/java/com/gooddata/gdc/RootLinksTest.java @@ -14,6 +14,7 @@ public class RootLinksTest { + @SuppressWarnings("deprecation") @Test public void deserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/gdc/gdc.json"); @@ -21,17 +22,30 @@ public void deserialize() throws Exception { assertThat(rootLinks, is(notNullValue())); assertThat(rootLinks.getHomeLink(), is("/gdc/")); + assertThat(rootLinks.getHomeUri(), is("/gdc/")); assertThat(rootLinks.getTokenLink(), is("/gdc/account/token")); + assertThat(rootLinks.getTokenUri(), is("/gdc/account/token")); assertThat(rootLinks.getLoginLink(), is("/gdc/account/login")); + assertThat(rootLinks.getLoginUri(), is("/gdc/account/login")); assertThat(rootLinks.getMetadataLink(), is("/gdc/md")); + assertThat(rootLinks.getMetadataUri(), is("/gdc/md")); assertThat(rootLinks.getXTabLink(), is("/gdc/xtab2")); + assertThat(rootLinks.getXTabUri(), is("/gdc/xtab2")); assertThat(rootLinks.getAvailableElementsLink(), is("/gdc/availableelements")); + assertThat(rootLinks.getAvailableElementsUri(), is("/gdc/availableelements")); assertThat(rootLinks.getReportExporterLink(), is("/gdc/exporter")); + assertThat(rootLinks.getReportExporterUri(), is("/gdc/exporter")); assertThat(rootLinks.getAccountLink(), is("/gdc/account")); + assertThat(rootLinks.getAccountUri(), is("/gdc/account")); assertThat(rootLinks.getProjectsLink(), is("/gdc/projects")); + assertThat(rootLinks.getProjectsUri(), is("/gdc/projects")); assertThat(rootLinks.getToolLink(), is("/gdc/tool")); + assertThat(rootLinks.getToolUri(), is("/gdc/tool")); assertThat(rootLinks.getTemplatesLink(), is("/gdc/templates")); + assertThat(rootLinks.getTemplatesUri(), is("/gdc/templates")); assertThat(rootLinks.getReleaseInfoLink(), is("/gdc/releaseInfo")); + assertThat(rootLinks.getReleaseInfoUri(), is("/gdc/releaseInfo")); assertThat(rootLinks.getUserStagingLink(), is("/uploads")); + assertThat(rootLinks.getUserStagingUri(), is("/uploads")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java index eeaf26b6b..a7d412039 100644 --- a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java +++ b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java @@ -20,6 +20,7 @@ public class AttributeDisplayFormTest { private static final String TYPE = "TYPE"; private static final String ELEMENTS_LINK = "/gdc/md/PROJECT_ID/obj/DF_ID/elements"; + @SuppressWarnings("deprecation") @Test public void shouldDeserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/md/attributeDisplayForm.json"); diff --git a/src/test/java/com/gooddata/md/AttributeTest.java b/src/test/java/com/gooddata/md/AttributeTest.java index f83696990..ae7bf8dce 100644 --- a/src/test/java/com/gooddata/md/AttributeTest.java +++ b/src/test/java/com/gooddata/md/AttributeTest.java @@ -20,6 +20,7 @@ public class AttributeTest { public static final String TITLE = "Person ID"; + @SuppressWarnings("deprecation") @Test public void shouldDeserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/md/attribute.json"); diff --git a/src/test/java/com/gooddata/md/DatasetTest.java b/src/test/java/com/gooddata/md/DatasetTest.java index 4a685d245..e8a9b8aff 100644 --- a/src/test/java/com/gooddata/md/DatasetTest.java +++ b/src/test/java/com/gooddata/md/DatasetTest.java @@ -19,6 +19,7 @@ public class DatasetTest { + @SuppressWarnings("deprecation") @Test public void shouldDeserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/md/dataset.json"); diff --git a/src/test/java/com/gooddata/md/DisplayFormTest.java b/src/test/java/com/gooddata/md/DisplayFormTest.java index aedae527f..78b96c0a1 100644 --- a/src/test/java/com/gooddata/md/DisplayFormTest.java +++ b/src/test/java/com/gooddata/md/DisplayFormTest.java @@ -21,6 +21,7 @@ public class DisplayFormTest { public static final String LDM_EXPRESSION = ""; private static final String ELEMENTS_LINK = "/gdc/md/PROJECT_ID/obj/DF_ID/elements"; + @SuppressWarnings("deprecation") @Test public void shouldDeserialize() throws Exception { final InputStream stream = getClass().getResourceAsStream("/md/displayForm.json"); diff --git a/src/test/java/com/gooddata/md/EntryTest.java b/src/test/java/com/gooddata/md/EntryTest.java index 792b462dc..15483c500 100644 --- a/src/test/java/com/gooddata/md/EntryTest.java +++ b/src/test/java/com/gooddata/md/EntryTest.java @@ -33,6 +33,7 @@ public class EntryTest { public static final boolean LOCKED = true; public static final boolean UNLISTED = false; + @SuppressWarnings("deprecation") @Test public void testDeserialize() throws Exception { final Entry entry = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/entry.json"), Entry.class); diff --git a/src/test/java/com/gooddata/md/NestedAttributeTest.java b/src/test/java/com/gooddata/md/NestedAttributeTest.java index 9276e2edb..a2358062f 100644 --- a/src/test/java/com/gooddata/md/NestedAttributeTest.java +++ b/src/test/java/com/gooddata/md/NestedAttributeTest.java @@ -16,6 +16,7 @@ public class NestedAttributeTest { + @SuppressWarnings("deprecation") @Test public void testDeserialization() throws Exception { final NestedAttribute attribute = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/dimensionAttribute.json"), NestedAttribute.class); diff --git a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java index b4d2fb3eb..e30f757d9 100644 --- a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java +++ b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java @@ -14,6 +14,7 @@ public class MaqlDdlLinksTest { + @SuppressWarnings("deprecation") @Test public void testDeserialization() throws Exception { final InputStream stream = getClass().getResourceAsStream("/model/maqlDdlLinks.json"); diff --git a/src/test/java/com/gooddata/project/ProjectTest.java b/src/test/java/com/gooddata/project/ProjectTest.java index a22664932..621d6dd59 100644 --- a/src/test/java/com/gooddata/project/ProjectTest.java +++ b/src/test/java/com/gooddata/project/ProjectTest.java @@ -12,6 +12,7 @@ public class ProjectTest { + @SuppressWarnings("deprecation") @Test public void testDeserialize() throws Exception { final Project project = new ObjectMapper() diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java index b6898d521..94be7eef5 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java @@ -254,7 +254,7 @@ public void shouldRemoveUserFromWarehouse() throws Exception { .withStatus(202); onRequest() .havingMethodEqualTo("GET") - .havingPathEqualTo(pollingTask.getPollLink()) + .havingPathEqualTo(pollingTask.getPollUri()) .respond() .withStatus(202) .thenRespond() @@ -287,7 +287,7 @@ public void shouldFailWhenRemoveUserTaskFails() throws Exception { .withStatus(202); onRequest() .havingMethodEqualTo("GET") - .havingPathEqualTo(pollingTask.getPollLink()) + .havingPathEqualTo(pollingTask.getPollUri()) .respond() .withStatus(409); diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java index 6c1a40d10..d766aebad 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java @@ -10,6 +10,7 @@ public class WarehouseTaskTest { + @SuppressWarnings("deprecation") @Test public void testDeserializePoll() throws Exception { final WarehouseTask warehouseTask = deserialize("/warehouse/warehouseTask-poll.json"); @@ -17,6 +18,7 @@ public void testDeserializePoll() throws Exception { assertThat(warehouseTask.getPollUri(), is("/gdc/datawarehouse/executions/executionId")); } + @SuppressWarnings("deprecation") @Test public void testDeserializeInstance() throws Exception { final WarehouseTask warehouseTask = deserialize("/warehouse/warehouseTask-finished.json"); From 292d1445eba3cae77a3060db2612667ef2d6f9c6 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Wed, 31 Aug 2016 13:40:19 +0200 Subject: [PATCH 152/934] switch build to java 8 --- .travis.yml | 1 - pom.xml | 2 +- .../java/com/gooddata/md/MetadataServiceTest.java | 11 ++++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3f65c6ac0..1a21b9291 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ language: java install: true script: mvn verify javadoc:javadoc coveralls:report -Pcoverage jdk: - - openjdk7 - oraclejdk8 branches: only: diff --git a/pom.xml b/pom.xml index d6e918624..dbeb647e4 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ - 1.7 + 1.8 UTF-8 UTF-8 4.3.3 diff --git a/src/test/java/com/gooddata/md/MetadataServiceTest.java b/src/test/java/com/gooddata/md/MetadataServiceTest.java index 08af25241..b1bc9fc9d 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceTest.java +++ b/src/test/java/com/gooddata/md/MetadataServiceTest.java @@ -96,7 +96,8 @@ public void testUpdateObj() throws Exception { final Updatable resultObj = mock(Updatable.class); when(obj.getUri()).thenReturn(URI); - when(restTemplate.getForObject(URI, obj.getClass())).thenReturn(resultObj); + final Updatable forObject = restTemplate.getForObject(URI, obj.getClass()); + when(forObject).thenReturn(resultObj); final Obj result = service.updateObj(obj); @@ -149,9 +150,9 @@ public void testGetObjByUriNotFound() throws Exception { @Test public void testGetObjByUri() throws Exception { final Obj resultObj = mock(Obj.class); - when(restTemplate.getForObject(URI, resultObj.getClass())).thenReturn(resultObj); + when(restTemplate.getForObject(URI, Obj.class)).thenReturn(resultObj); - final Obj result = service.getObjByUri(URI, resultObj.getClass()); + final Obj result = service.getObjByUri(URI, Obj.class); assertThat(result, is(resultObj)); } @@ -191,9 +192,9 @@ public void testGetObjByIdNullCls() throws Exception { public void testGetObjById() throws Exception { final Obj resultObj = mock(Obj.class); final String uri = format("/gdc/md/%s/obj/%s", PROJECT_ID, ID); - when(restTemplate.getForObject(uri, resultObj.getClass())).thenReturn(resultObj); + when(restTemplate.getForObject(uri, Obj.class)).thenReturn(resultObj); - final Obj result = service.getObjById(project, ID, resultObj.getClass()); + final Obj result = service.getObjById(project, ID, Obj.class); assertThat(result, is(resultObj)); } From 03ec29e7e9d838796f397a87d91d54685d5f1ddf Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 1 Sep 2016 10:22:52 +0200 Subject: [PATCH 153/934] fix: AttributeInGrid has always alias set Also deprecate the constructor without alias, since empty String is not very useful value for alias. --- src/main/java/com/gooddata/md/report/AttributeInGrid.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 92d1df5c9..e728125ab 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -44,11 +44,13 @@ public class AttributeInGrid implements GridElement { } /** - * Creates new instance. + * Creates new instance from given uri with empty alias * @param uri uri of displayForm of attribute to be in grid + * @deprecated because empty alias does not make much sense */ + @Deprecated public AttributeInGrid(String uri) { - this(uri, null); + this(uri, ""); } /** From 18ae3a14690790ee6c306ad445f79ce4b560967f Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 2 Sep 2016 07:37:00 +0200 Subject: [PATCH 154/934] adjust README (JDK 8 and correct RC version) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2b699d91e..e21fe0012 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.0.0.RC + 2.0.0-RC.1 ``` @@ -30,7 +30,7 @@ The *GoodData Java SDK* uses: * the *Apache HTTP Client* version 4.3 or later (for white-labeled domains at least version 4.3.2 is required) * the *Spring Framework* version 4.3.* * the *Jackson JSON Processor* version 2.8.* -* the *Java Development Kit (JDK)* version 7 or later +* the *Java Development Kit (JDK)* version 8 or later ## License The *GoodData Java SDK* is free and open-source software under [BSD License](LICENSE.txt). From 91853eb142e93721fd77904f04dc8da297b36010 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Mon, 5 Sep 2016 16:26:02 +0200 Subject: [PATCH 155/934] use Attribute's title as alias in grid when creating AttributeInGrid from Attribute additionally add constructor with explicit alias to be used --- .../gooddata/md/report/AttributeInGrid.java | 22 +++++++++++++++++-- .../md/report/AttributeInGridTest.java | 13 +++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index e728125ab..7167aed2b 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -90,11 +90,29 @@ public AttributeInGrid(final DisplayForm displayForm) { } /** - * Creates new AttributeInGrid using given Attribute's default DisplayForm's uri and it's title as alias. + * Creates new AttributeInGrid using given DisplayForm's uri and given alias. + * @param displayForm displayForm to create AttributeInGrid from + * @param alias alias used to label the attribute + */ + public AttributeInGrid(final DisplayForm displayForm, final String alias) { + this(notNull(notNull(displayForm, "displayForm").getUri(), "uri"), alias); + } + + /** + * Creates new AttributeInGrid using given Attribute's default DisplayForm's uri and Attribute's title as alias. * @param attribute attribute to create AttributeInGrid from */ public AttributeInGrid(final Attribute attribute) { - this(notNull(attribute, "attribute").getDefaultDisplayForm()); + this(notNull(attribute, "attribute").getDefaultDisplayForm(), notNull(attribute, "attribute").getTitle()); + } + + /** + * Creates new AttributeInGrid using given Attribute's default DisplayForm's uri and given alias. + * @param attribute attribute to create AttributeInGrid from + * @param alias alias used to label the attribute + */ + public AttributeInGrid(final Attribute attribute, final String alias) { + this(notNull(attribute, "attribute").getDefaultDisplayForm(), alias); } @JsonProperty("totals") diff --git a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java index 110e82f05..f29f60846 100644 --- a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java +++ b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java @@ -27,6 +27,7 @@ public class AttributeInGridTest { private static final String URI = "/URI"; private static final String ALIAS = "ALIAS"; + private static final String ATTR_TITLE = "attrTitle"; @Test public void testDeserialization() throws Exception { @@ -61,11 +62,23 @@ public void testCreateFromAttribute() throws Exception { final Attribute attr = mock(Attribute.class); final DisplayForm displayForm = mock(DisplayForm.class); when(attr.getDefaultDisplayForm()).thenReturn(displayForm); + when(attr.getTitle()).thenReturn(ATTR_TITLE); when(displayForm.getUri()).thenReturn(URI); when(displayForm.getTitle()).thenReturn(ALIAS); final AttributeInGrid attrInGrid = new AttributeInGrid(attr); assertThat(attrInGrid.getUri(), is(URI)); + assertThat(attrInGrid.getAlias(), is(ATTR_TITLE)); + } + + @Test + public void testCreateFromDisplayForm() throws Exception { + final DisplayForm displayForm = mock(DisplayForm.class); + when(displayForm.getUri()).thenReturn(URI); + when(displayForm.getTitle()).thenReturn(ALIAS); + + final AttributeInGrid attrInGrid = new AttributeInGrid(displayForm); + assertThat(attrInGrid.getUri(), is(URI)); assertThat(attrInGrid.getAlias(), is(ALIAS)); } } \ No newline at end of file From 97fea660226558bc213c975fb601b2798caba229 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Mon, 5 Sep 2016 16:26:48 +0200 Subject: [PATCH 156/934] fix AttributeInGrid's import and remove redundant generics --- src/main/java/com/gooddata/md/report/AttributeInGrid.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 7167aed2b..635cb9e84 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -14,13 +14,9 @@ import com.gooddata.md.DisplayForm; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedList; import java.util.List; import static com.gooddata.util.Validate.notNull; -import static java.util.Arrays.asList; /** * Attribute in Grid @@ -59,7 +55,7 @@ public AttributeInGrid(String uri) { * @param alias alias used to label the attribute */ public AttributeInGrid(String uri, String alias) { - this(uri, new ArrayList>(), alias); + this(uri, new ArrayList<>(), alias); } /** From 8b0111d341ca9281e0601ad58db2377262395b4a Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Tue, 6 Sep 2016 09:20:40 +0200 Subject: [PATCH 157/934] add SuppressWarnings unchecked instead of SafeVarargs to usedBy methods SafeVarargs implies final methods, however that would prevent mocking of such methods --- src/main/java/com/gooddata/md/MetadataService.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index 3b94ecc02..db5f46b39 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -300,8 +300,8 @@ public Collection findUris(Project project, * 'table'...) * @return objects using given objects. */ - @SafeVarargs - public final Collection usedBy(Project project, Obj obj, boolean nearest, Class... types) { + @SuppressWarnings("unchecked") + public Collection usedBy(Project project, Obj obj, boolean nearest, Class... types) { notNull(obj, "obj"); return usedBy(project, obj.getUri(), nearest, types); } @@ -316,8 +316,8 @@ public final Collection usedBy(Project project, Obj obj, boolean nearest, * @return objects using given objects. * @see #usedBy(Project, Collection, boolean, Class[]) */ - @SafeVarargs - public final Collection usedBy(Project project, String uri, boolean nearest, Class... types) { + @SuppressWarnings("unchecked") + public Collection usedBy(Project project, String uri, boolean nearest, Class... types) { notNull(uri, "uri"); notNull(project, "project"); @@ -335,8 +335,8 @@ public final Collection usedBy(Project project, String uri, boolean neare * @return objects usages * @see #usedBy(Project, String, boolean, Class[]) */ - @SafeVarargs - public final Collection usedBy(Project project, Collection uris, boolean nearest, Class... types) { + @SuppressWarnings("unchecked") + public Collection usedBy(Project project, Collection uris, boolean nearest, Class... types) { notNull(uris, "uris"); notNull(project, "project"); From 2b6dbe3aee3da438f8eaab3b6b7bf43d9a4d752d Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 9 Sep 2016 09:11:46 +0200 Subject: [PATCH 158/934] [maven-release-plugin] prepare release gooddata-java-2.0.0-RC.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dbeb647e4..83f3de0f9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.0.0-RC.2-SNAPSHOT + 2.0.0-RC.2 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From a91195ff96e17fe01bf35951dda84e1d3559034c Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 9 Sep 2016 09:11:46 +0200 Subject: [PATCH 159/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 83f3de0f9..7d0f8243e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.0.0-RC.2 + 2.0.0-RC.3-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 0f27677424638aca00b226acdf2f9cc64f7d78f2 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 9 Sep 2016 13:07:12 +0200 Subject: [PATCH 160/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e21fe0012..a781fd94f 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.0.0-RC.1 + 2.0.0-RC.2 ``` From dfb50275517cd671bc529f035dc1580a57f6ae60 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 12 Sep 2016 12:26:11 +0200 Subject: [PATCH 161/934] add: license plugin and missing licenses --- pom.xml | 29 +++++++++++++++++++ .../java/com/gooddata/GoodDataSettings.java | 3 ++ .../java/com/gooddata/SimplePollHandler.java | 3 ++ .../account/AccountNotFoundException.java | 3 ++ .../java/com/gooddata/collections/Page.java | 3 ++ .../com/gooddata/collections/PageRequest.java | 3 ++ .../gooddata/collections/PageableList.java | 3 ++ .../collections/PageableListDeserializer.java | 3 ++ .../java/com/gooddata/collections/Paging.java | 3 ++ .../com/gooddata/collections/UriPage.java | 3 ++ .../connector/ConnectorException.java | 3 ++ .../IntegrationNotFoundException.java | 3 ++ .../java/com/gooddata/connector/Status.java | 3 ++ .../dataload/processes/DataloadProcess.java | 3 ++ .../dataload/processes/ProcessExecution.java | 3 ++ .../processes/ProcessExecutionDetail.java | 3 ++ .../processes/ProcessExecutionException.java | 3 ++ .../processes/ProcessExecutionTask.java | 3 ++ .../processes/ProcessNotFoundException.java | 3 ++ .../dataload/processes/ProcessService.java | 3 ++ .../dataload/processes/ProcessType.java | 3 ++ .../gooddata/dataload/processes/Schedule.java | 3 ++ .../processes/ScheduleNotFoundException.java | 3 ++ .../dataload/processes/ScheduleState.java | 3 ++ .../processes/SchedulesDeserializer.java | 3 ++ .../java/com/gooddata/dataset/Dataset.java | 3 ++ .../java/com/gooddata/dataset/EtlMode.java | 3 ++ .../com/gooddata/dataset/EtlModeType.java | 3 ++ .../java/com/gooddata/dataset/LookupMode.java | 3 ++ .../java/com/gooddata/dataset/Upload.java | 3 ++ .../java/com/gooddata/dataset/UploadMode.java | 3 ++ .../gooddata/dataset/UploadStatistics.java | 3 ++ .../java/com/gooddata/dataset/Uploads.java | 3 ++ .../com/gooddata/dataset/UploadsInfo.java | 3 ++ .../com/gooddata/gdc/DataStoreException.java | 3 ++ .../java/com/gooddata/gdc/ErrorStructure.java | 3 ++ .../java/com/gooddata/gdc/TaskStatus.java | 3 ++ .../com/gooddata/md/AttributeDisplayForm.java | 3 ++ src/main/java/com/gooddata/md/Entry.java | 3 ++ .../com/gooddata/md/IdentifierAndUri.java | 3 ++ .../java/com/gooddata/md/IdentifierToUri.java | 3 ++ .../com/gooddata/md/IdentifiersAndUris.java | 3 ++ src/main/java/com/gooddata/md/InUseMany.java | 3 ++ src/main/java/com/gooddata/md/Key.java | 3 ++ .../gooddata/md/NonUniqueObjException.java | 3 ++ src/main/java/com/gooddata/md/Obj.java | 3 ++ .../com/gooddata/md/ObjCreateException.java | 3 ++ .../com/gooddata/md/ObjNotFoundException.java | 3 ++ .../com/gooddata/md/ObjUpdateException.java | 3 ++ .../com/gooddata/md/ProjectDashboard.java | 3 ++ src/main/java/com/gooddata/md/Query.java | 3 ++ src/main/java/com/gooddata/md/Queryable.java | 3 ++ .../java/com/gooddata/md/Restriction.java | 3 ++ src/main/java/com/gooddata/md/Updatable.java | 3 ++ src/main/java/com/gooddata/md/Usage.java | 3 ++ src/main/java/com/gooddata/md/UseMany.java | 3 ++ .../java/com/gooddata/md/UseManyEntries.java | 3 ++ .../md/maintenance/ExportImportException.java | 3 ++ .../md/maintenance/PartialMdArtifact.java | 3 ++ .../md/maintenance/PartialMdExport.java | 3 ++ .../md/maintenance/PartialMdExportToken.java | 3 ++ .../java/com/gooddata/md/report/Filter.java | 3 ++ .../com/gooddata/project/Environment.java | 3 ++ .../gooddata/project/ProjectEnvironment.java | 3 ++ .../project/ProjectNotFoundException.java | 3 ++ .../project/ProjectValidationResult.java | 3 ++ ...ProjectValidationResultGdcTimeElParam.java | 3 ++ .../project/ProjectValidationResultItem.java | 3 ++ .../ProjectValidationResultObjectParam.java | 3 ++ .../project/ProjectValidationResultParam.java | 3 ++ .../ProjectValidationResultSliElParam.java | 3 ++ .../ProjectValidationResultStringParam.java | 3 ++ .../project/ProjectValidationResults.java | 3 ++ .../project/ProjectValidationType.java | 3 ++ .../gooddata/project/ProjectValidations.java | 3 ++ src/main/java/com/gooddata/project/Role.java | 3 ++ .../project/RoleNotFoundException.java | 3 ++ src/main/java/com/gooddata/project/Roles.java | 3 ++ src/main/java/com/gooddata/project/User.java | 3 ++ .../gooddata/project/UsersDeserializer.java | 3 ++ .../gooddata/report/ExecuteDefinition.java | 3 ++ .../com/gooddata/report/ExecuteReport.java | 3 ++ .../report/NoDataReportException.java | 3 ++ .../com/gooddata/report/ReportException.java | 3 ++ .../gooddata/report/ReportExportFormat.java | 3 ++ .../gooddata/util/BooleanDeserializer.java | 3 ++ .../util/BooleanIntegerSerializer.java | 3 ++ .../util/BooleanStringSerializer.java | 3 ++ .../gooddata/util/GDDateTimeDeserializer.java | 3 ++ .../gooddata/util/GDDateTimeSerializer.java | 3 ++ .../util/ISODateTimeDeserializer.java | 3 ++ .../gooddata/util/ISODateTimeSerializer.java | 3 ++ .../com/gooddata/util/TagsDeserializer.java | 3 ++ src/main/java/com/gooddata/util/Validate.java | 3 ++ .../java/com/gooddata/util/ZipHelper.java | 3 ++ .../com/gooddata/warehouse/Warehouse.java | 3 ++ .../warehouse/WarehouseNotFoundException.java | 3 ++ .../gooddata/warehouse/WarehouseService.java | 3 ++ .../com/gooddata/warehouse/WarehouseTask.java | 3 ++ .../com/gooddata/warehouse/WarehouseUser.java | 3 ++ .../WarehouseUserNotFoundException.java | 3 ++ .../gooddata/warehouse/WarehouseUsers.java | 3 ++ .../com/gooddata/warehouse/Warehouses.java | 3 ++ .../java/com/gooddata/AbstractGoodDataAT.java | 3 ++ .../com/gooddata/AbstractServiceTest.java | 3 ++ .../gooddata/GoodDataRestExceptionTest.java | 3 ++ .../com/gooddata/GoodDataSettingsTest.java | 3 ++ src/test/java/com/gooddata/JsonMatchers.java | 3 ++ .../gooddata/account/AccountServiceAT.java | 3 ++ .../com/gooddata/account/AccountTest.java | 3 ++ .../gooddata/collections/PageRequestTest.java | 3 ++ .../collections/PageableListTest.java | 3 ++ .../com/gooddata/collections/PagingTest.java | 3 ++ .../com/gooddata/collections/UriPageTest.java | 3 ++ .../connector/ConnectorServiceIT.java | 3 ++ .../gooddata/connector/IntegrationTest.java | 3 ++ .../gooddata/connector/ProcessStatusTest.java | 3 ++ .../processes/DataloadProcessTest.java | 3 ++ .../processes/ProcessExecutionDetailTest.java | 3 ++ .../processes/ProcessExecutionTaskTest.java | 3 ++ .../processes/ProcessExecutionTest.java | 3 ++ .../dataload/processes/ProcessIdMatcher.java | 3 ++ .../dataload/processes/ProcessServiceAT.java | 3 ++ .../dataload/processes/ProcessServiceIT.java | 3 ++ .../dataload/processes/ScheduleTest.java | 3 ++ .../dataload/processes/SchedulesTest.java | 3 ++ .../gooddata/dataset/DatasetServiceAT.java | 3 ++ .../gooddata/dataset/DatasetServiceIT.java | 3 ++ .../com/gooddata/dataset/DatasetsTest.java | 3 ++ .../com/gooddata/dataset/PullTaskTest.java | 3 ++ .../java/com/gooddata/dataset/PullTest.java | 3 ++ .../dataset/UploadStatisticsTest.java | 3 ++ .../java/com/gooddata/dataset/UploadTest.java | 3 ++ .../com/gooddata/dataset/UploadsInfoTest.java | 3 ++ .../com/gooddata/dataset/UploadsTest.java | 3 ++ .../com/gooddata/gdc/DataStoreServiceIT.java | 3 ++ .../com/gooddata/gdc/DatastoreServiceAT.java | 3 ++ .../com/gooddata/gdc/ErrorStructureTest.java | 3 ++ .../java/com/gooddata/gdc/GdcServiceIT.java | 3 ++ src/test/java/com/gooddata/gdc/GdcTest.java | 3 ++ .../java/com/gooddata/gdc/TaskStatusTest.java | 3 ++ .../gooddata/md/AttributeDisplayFormTest.java | 3 ++ .../com/gooddata/md/MetadataServiceAT.java | 3 ++ .../com/gooddata/md/ProjectDashboardTest.java | 3 ++ .../md/maintenance/PartialMdArtifactTest.java | 3 ++ .../md/maintenance/PartialMdExportTest.java | 3 ++ .../maintenance/PartialMdExportTokenTest.java | 3 ++ .../gooddata/md/report/ReportServiceAT.java | 3 ++ .../com/gooddata/model/ModelServiceAT.java | 3 ++ .../com/gooddata/model/ModelServiceIT.java | 3 ++ .../gooddata/project/ProjectIdMatcher.java | 3 ++ .../gooddata/project/ProjectServiceAT.java | 3 ++ .../gooddata/project/ProjectServiceIT.java | 3 ++ .../com/gooddata/project/ProjectTest.java | 3 ++ .../ProjectValidationResultItemTest.java | 3 ++ .../ProjectValidationResultParamTest.java | 3 ++ ...ProjectValidationResultSliElParamTest.java | 3 ++ .../project/ProjectValidationResultTest.java | 3 ++ .../project/ProjectValidationResultsTest.java | 3 ++ .../project/ProjectValidationTypeTest.java | 3 ++ .../project/ProjectValidationsTest.java | 3 ++ .../java/com/gooddata/project/RoleTest.java | 3 ++ .../java/com/gooddata/project/RolesTest.java | 3 ++ .../java/com/gooddata/project/UserTest.java | 3 ++ .../java/com/gooddata/project/UsersTest.java | 3 ++ .../com/gooddata/report/ReportServiceIT.java | 3 ++ .../util/BooleanDeserializerTest.java | 3 ++ .../gooddata/util/BooleanIntegerClass.java | 3 ++ .../util/BooleanIntegerSerializerTest.java | 3 ++ .../com/gooddata/util/BooleanStringClass.java | 3 ++ .../util/BooleanStringSerializerTest.java | 3 ++ .../java/com/gooddata/util/GDDateClass.java | 3 ++ .../gooddata/util/GDDateDeserializerTest.java | 3 ++ .../gooddata/util/GDDateSerializerTest.java | 3 ++ .../com/gooddata/util/GDDateTimeClass.java | 3 ++ .../util/GDDateTimeDeserializerTest.java | 3 ++ .../util/GDDateTimeSerializerTest.java | 3 ++ .../java/com/gooddata/util/ISODateClass.java | 3 ++ .../util/ISODateTimeDeserializerTest.java | 3 ++ .../util/ISODateTimeSerializerTest.java | 3 ++ .../gooddata/util/TagsDeserializerTest.java | 3 ++ .../java/com/gooddata/util/ZipHelperTest.java | 3 ++ .../warehouse/WarehouseIdMatcher.java | 3 ++ .../warehouse/WarehouseServiceAT.java | 3 ++ .../warehouse/WarehouseServiceIT.java | 3 ++ .../gooddata/warehouse/WarehouseTaskTest.java | 3 ++ .../com/gooddata/warehouse/WarehouseTest.java | 3 ++ .../gooddata/warehouse/WarehouseUserTest.java | 3 ++ .../warehouse/WarehouseUsersTest.java | 3 ++ .../gooddata/warehouse/WarehousesTest.java | 3 ++ 190 files changed, 596 insertions(+) diff --git a/pom.xml b/pom.xml index 7d0f8243e..1cc61db08 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,8 @@ 4.3.1.RELEASE 1.1.1 1.5.3 + yyyy + ${maven.build.timestamp} @@ -159,6 +161,33 @@ true
+ + com.mycila + license-maven-plugin + 3.0 + + Copyright (C) ${inceptionYear}-${currentYear}, GoodData(R) Corporation. All rights reserved. + true + true + true + + 2004 + ${currentYear} + + + src/**/*.java + + + + + package + + check + + + + + diff --git a/src/main/java/com/gooddata/GoodDataSettings.java b/src/main/java/com/gooddata/GoodDataSettings.java index 8e919bb11..4a385989d 100644 --- a/src/main/java/com/gooddata/GoodDataSettings.java +++ b/src/main/java/com/gooddata/GoodDataSettings.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/com/gooddata/SimplePollHandler.java b/src/main/java/com/gooddata/SimplePollHandler.java index 62fbdae1a..c6fb41c4c 100644 --- a/src/main/java/com/gooddata/SimplePollHandler.java +++ b/src/main/java/com/gooddata/SimplePollHandler.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata; /** diff --git a/src/main/java/com/gooddata/account/AccountNotFoundException.java b/src/main/java/com/gooddata/account/AccountNotFoundException.java index 9567d8cb3..9006d9b2e 100644 --- a/src/main/java/com/gooddata/account/AccountNotFoundException.java +++ b/src/main/java/com/gooddata/account/AccountNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.account; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/collections/Page.java b/src/main/java/com/gooddata/collections/Page.java index 6216455d7..e40e72f79 100644 --- a/src/main/java/com/gooddata/collections/Page.java +++ b/src/main/java/com/gooddata/collections/Page.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import org.springframework.web.client.RestOperations; diff --git a/src/main/java/com/gooddata/collections/PageRequest.java b/src/main/java/com/gooddata/collections/PageRequest.java index fa6f6fe59..8393f392d 100644 --- a/src/main/java/com/gooddata/collections/PageRequest.java +++ b/src/main/java/com/gooddata/collections/PageRequest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import org.springframework.web.util.UriComponentsBuilder; diff --git a/src/main/java/com/gooddata/collections/PageableList.java b/src/main/java/com/gooddata/collections/PageableList.java index 03b19eed6..18cd669aa 100644 --- a/src/main/java/com/gooddata/collections/PageableList.java +++ b/src/main/java/com/gooddata/collections/PageableList.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import java.util.Collection; diff --git a/src/main/java/com/gooddata/collections/PageableListDeserializer.java b/src/main/java/com/gooddata/collections/PageableListDeserializer.java index cbb611a3c..3e76f1d04 100644 --- a/src/main/java/com/gooddata/collections/PageableListDeserializer.java +++ b/src/main/java/com/gooddata/collections/PageableListDeserializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/main/java/com/gooddata/collections/Paging.java b/src/main/java/com/gooddata/collections/Paging.java index f03e4c3c6..6f56bc75b 100644 --- a/src/main/java/com/gooddata/collections/Paging.java +++ b/src/main/java/com/gooddata/collections/Paging.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/collections/UriPage.java b/src/main/java/com/gooddata/collections/UriPage.java index 19228a4d3..3922c0116 100644 --- a/src/main/java/com/gooddata/collections/UriPage.java +++ b/src/main/java/com/gooddata/collections/UriPage.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import org.springframework.web.util.UriComponents; diff --git a/src/main/java/com/gooddata/connector/ConnectorException.java b/src/main/java/com/gooddata/connector/ConnectorException.java index cd7b8f136..f3232f279 100644 --- a/src/main/java/com/gooddata/connector/ConnectorException.java +++ b/src/main/java/com/gooddata/connector/ConnectorException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.connector; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/connector/IntegrationNotFoundException.java b/src/main/java/com/gooddata/connector/IntegrationNotFoundException.java index f705320b8..6b3253f6c 100644 --- a/src/main/java/com/gooddata/connector/IntegrationNotFoundException.java +++ b/src/main/java/com/gooddata/connector/IntegrationNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.connector; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/connector/Status.java b/src/main/java/com/gooddata/connector/Status.java index f6d6f5aaf..5ed38d3c6 100644 --- a/src/main/java/com/gooddata/connector/Status.java +++ b/src/main/java/com/gooddata/connector/Status.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.connector; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index 897189c17..1a479af72 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java index 79335cab0..036811338 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java index b6c736f04..43ecae2d5 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.fasterxml.jackson.annotation.*; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionException.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionException.java index 5f5120d01..62cc3d114 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionException.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java index 7809f5874..ba9ca1e30 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessNotFoundException.java b/src/main/java/com/gooddata/dataload/processes/ProcessNotFoundException.java index bf1572d1d..1875082e0 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessNotFoundException.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index 28ed73289..83c74b9dd 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.gooddata.AbstractPollHandler; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessType.java b/src/main/java/com/gooddata/dataload/processes/ProcessType.java index f0ff8b142..cea285927 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessType.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessType.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; /** diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index 24bf66de9..f8c15ead5 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/gooddata/dataload/processes/ScheduleNotFoundException.java b/src/main/java/com/gooddata/dataload/processes/ScheduleNotFoundException.java index d8a165aac..72ec80e76 100644 --- a/src/main/java/com/gooddata/dataload/processes/ScheduleNotFoundException.java +++ b/src/main/java/com/gooddata/dataload/processes/ScheduleNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/dataload/processes/ScheduleState.java b/src/main/java/com/gooddata/dataload/processes/ScheduleState.java index 0fcc8a89b..de30f1641 100644 --- a/src/main/java/com/gooddata/dataload/processes/ScheduleState.java +++ b/src/main/java/com/gooddata/dataload/processes/ScheduleState.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; /** diff --git a/src/main/java/com/gooddata/dataload/processes/SchedulesDeserializer.java b/src/main/java/com/gooddata/dataload/processes/SchedulesDeserializer.java index b6d9f0e6f..1d3b6a118 100644 --- a/src/main/java/com/gooddata/dataload/processes/SchedulesDeserializer.java +++ b/src/main/java/com/gooddata/dataload/processes/SchedulesDeserializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.gooddata.collections.PageableListDeserializer; diff --git a/src/main/java/com/gooddata/dataset/Dataset.java b/src/main/java/com/gooddata/dataset/Dataset.java index 85068d532..54288302a 100644 --- a/src/main/java/com/gooddata/dataset/Dataset.java +++ b/src/main/java/com/gooddata/dataset/Dataset.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/dataset/EtlMode.java b/src/main/java/com/gooddata/dataset/EtlMode.java index 7f5522084..e018e6036 100644 --- a/src/main/java/com/gooddata/dataset/EtlMode.java +++ b/src/main/java/com/gooddata/dataset/EtlMode.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/dataset/EtlModeType.java b/src/main/java/com/gooddata/dataset/EtlModeType.java index f6f27d9d0..c4f643547 100644 --- a/src/main/java/com/gooddata/dataset/EtlModeType.java +++ b/src/main/java/com/gooddata/dataset/EtlModeType.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/src/main/java/com/gooddata/dataset/LookupMode.java b/src/main/java/com/gooddata/dataset/LookupMode.java index b3753f2e8..03e55a81c 100644 --- a/src/main/java/com/gooddata/dataset/LookupMode.java +++ b/src/main/java/com/gooddata/dataset/LookupMode.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/src/main/java/com/gooddata/dataset/Upload.java b/src/main/java/com/gooddata/dataset/Upload.java index 77a819b83..ca9b6b39c 100644 --- a/src/main/java/com/gooddata/dataset/Upload.java +++ b/src/main/java/com/gooddata/dataset/Upload.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/src/main/java/com/gooddata/dataset/UploadMode.java b/src/main/java/com/gooddata/dataset/UploadMode.java index a44e0759e..b10b502c4 100644 --- a/src/main/java/com/gooddata/dataset/UploadMode.java +++ b/src/main/java/com/gooddata/dataset/UploadMode.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; public enum UploadMode { diff --git a/src/main/java/com/gooddata/dataset/UploadStatistics.java b/src/main/java/com/gooddata/dataset/UploadStatistics.java index 61d7c6f94..80fdfe1a1 100644 --- a/src/main/java/com/gooddata/dataset/UploadStatistics.java +++ b/src/main/java/com/gooddata/dataset/UploadStatistics.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/src/main/java/com/gooddata/dataset/Uploads.java b/src/main/java/com/gooddata/dataset/Uploads.java index 3eb507764..26a0080df 100644 --- a/src/main/java/com/gooddata/dataset/Uploads.java +++ b/src/main/java/com/gooddata/dataset/Uploads.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/src/main/java/com/gooddata/dataset/UploadsInfo.java b/src/main/java/com/gooddata/dataset/UploadsInfo.java index ba1823413..43fab465a 100644 --- a/src/main/java/com/gooddata/dataset/UploadsInfo.java +++ b/src/main/java/com/gooddata/dataset/UploadsInfo.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/gdc/DataStoreException.java b/src/main/java/com/gooddata/gdc/DataStoreException.java index 36ee49300..7a3316004 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreException.java +++ b/src/main/java/com/gooddata/gdc/DataStoreException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/gdc/ErrorStructure.java b/src/main/java/com/gooddata/gdc/ErrorStructure.java index 1d573b883..ff7ef3309 100644 --- a/src/main/java/com/gooddata/gdc/ErrorStructure.java +++ b/src/main/java/com/gooddata/gdc/ErrorStructure.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/gdc/TaskStatus.java b/src/main/java/com/gooddata/gdc/TaskStatus.java index 96e5d1c7f..dfff658e6 100644 --- a/src/main/java/com/gooddata/gdc/TaskStatus.java +++ b/src/main/java/com/gooddata/gdc/TaskStatus.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/AttributeDisplayForm.java b/src/main/java/com/gooddata/md/AttributeDisplayForm.java index d870861d4..4e00f3a92 100644 --- a/src/main/java/com/gooddata/md/AttributeDisplayForm.java +++ b/src/main/java/com/gooddata/md/AttributeDisplayForm.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 89051cb03..58f19dcab 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.*; diff --git a/src/main/java/com/gooddata/md/IdentifierAndUri.java b/src/main/java/com/gooddata/md/IdentifierAndUri.java index f9c95672b..ef562b1f3 100644 --- a/src/main/java/com/gooddata/md/IdentifierAndUri.java +++ b/src/main/java/com/gooddata/md/IdentifierAndUri.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/IdentifierToUri.java b/src/main/java/com/gooddata/md/IdentifierToUri.java index aab23d6de..60acdfa2f 100644 --- a/src/main/java/com/gooddata/md/IdentifierToUri.java +++ b/src/main/java/com/gooddata/md/IdentifierToUri.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/src/main/java/com/gooddata/md/IdentifiersAndUris.java b/src/main/java/com/gooddata/md/IdentifiersAndUris.java index ef414b4a9..82228b48c 100644 --- a/src/main/java/com/gooddata/md/IdentifiersAndUris.java +++ b/src/main/java/com/gooddata/md/IdentifiersAndUris.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/InUseMany.java b/src/main/java/com/gooddata/md/InUseMany.java index 1794508cd..87edc6e5e 100644 --- a/src/main/java/com/gooddata/md/InUseMany.java +++ b/src/main/java/com/gooddata/md/InUseMany.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/gooddata/md/Key.java b/src/main/java/com/gooddata/md/Key.java index 74a6f1011..98c64b43a 100644 --- a/src/main/java/com/gooddata/md/Key.java +++ b/src/main/java/com/gooddata/md/Key.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/NonUniqueObjException.java b/src/main/java/com/gooddata/md/NonUniqueObjException.java index 8ff744e2c..329baac1a 100644 --- a/src/main/java/com/gooddata/md/NonUniqueObjException.java +++ b/src/main/java/com/gooddata/md/NonUniqueObjException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/md/Obj.java b/src/main/java/com/gooddata/md/Obj.java index 814dbcd4d..1da39a679 100644 --- a/src/main/java/com/gooddata/md/Obj.java +++ b/src/main/java/com/gooddata/md/Obj.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import org.springframework.web.util.UriTemplate; diff --git a/src/main/java/com/gooddata/md/ObjCreateException.java b/src/main/java/com/gooddata/md/ObjCreateException.java index 53bf176d9..c72e17528 100644 --- a/src/main/java/com/gooddata/md/ObjCreateException.java +++ b/src/main/java/com/gooddata/md/ObjCreateException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/md/ObjNotFoundException.java b/src/main/java/com/gooddata/md/ObjNotFoundException.java index 7bf4d475d..75df30815 100644 --- a/src/main/java/com/gooddata/md/ObjNotFoundException.java +++ b/src/main/java/com/gooddata/md/ObjNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/md/ObjUpdateException.java b/src/main/java/com/gooddata/md/ObjUpdateException.java index 8a909e8f7..9af2dba14 100644 --- a/src/main/java/com/gooddata/md/ObjUpdateException.java +++ b/src/main/java/com/gooddata/md/ObjUpdateException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/md/ProjectDashboard.java b/src/main/java/com/gooddata/md/ProjectDashboard.java index f9917de9e..4558cde0a 100644 --- a/src/main/java/com/gooddata/md/ProjectDashboard.java +++ b/src/main/java/com/gooddata/md/ProjectDashboard.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/md/Query.java b/src/main/java/com/gooddata/md/Query.java index 5fa92a96c..628600b1b 100644 --- a/src/main/java/com/gooddata/md/Query.java +++ b/src/main/java/com/gooddata/md/Query.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/Queryable.java b/src/main/java/com/gooddata/md/Queryable.java index 0f3af2efe..03259c5e7 100644 --- a/src/main/java/com/gooddata/md/Queryable.java +++ b/src/main/java/com/gooddata/md/Queryable.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; /** diff --git a/src/main/java/com/gooddata/md/Restriction.java b/src/main/java/com/gooddata/md/Restriction.java index 097d3ea30..6b04fa590 100644 --- a/src/main/java/com/gooddata/md/Restriction.java +++ b/src/main/java/com/gooddata/md/Restriction.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; /** diff --git a/src/main/java/com/gooddata/md/Updatable.java b/src/main/java/com/gooddata/md/Updatable.java index 71800487f..f3c4f4717 100644 --- a/src/main/java/com/gooddata/md/Updatable.java +++ b/src/main/java/com/gooddata/md/Updatable.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; /** diff --git a/src/main/java/com/gooddata/md/Usage.java b/src/main/java/com/gooddata/md/Usage.java index 422e6ebed..f26c9bf9a 100644 --- a/src/main/java/com/gooddata/md/Usage.java +++ b/src/main/java/com/gooddata/md/Usage.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import java.util.Collection; diff --git a/src/main/java/com/gooddata/md/UseMany.java b/src/main/java/com/gooddata/md/UseMany.java index f8e09b3ab..14ef0cce3 100644 --- a/src/main/java/com/gooddata/md/UseMany.java +++ b/src/main/java/com/gooddata/md/UseMany.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/UseManyEntries.java b/src/main/java/com/gooddata/md/UseManyEntries.java index 74d74c9ee..ca8c54681 100644 --- a/src/main/java/com/gooddata/md/UseManyEntries.java +++ b/src/main/java/com/gooddata/md/UseManyEntries.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/maintenance/ExportImportException.java b/src/main/java/com/gooddata/md/maintenance/ExportImportException.java index 24f56d6ef..b640e6c03 100644 --- a/src/main/java/com/gooddata/md/maintenance/ExportImportException.java +++ b/src/main/java/com/gooddata/md/maintenance/ExportImportException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.maintenance; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java index 0835c52b6..ab09d1b61 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.maintenance; import com.fasterxml.jackson.annotation.*; diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java index ed72f6b6f..338b0ed02 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.maintenance; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java index d5536c2da..e7bea63bb 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.maintenance; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/md/report/Filter.java b/src/main/java/com/gooddata/md/report/Filter.java index 1282dba65..4130f64ab 100644 --- a/src/main/java/com/gooddata/md/report/Filter.java +++ b/src/main/java/com/gooddata/md/report/Filter.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.report; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/Environment.java b/src/main/java/com/gooddata/project/Environment.java index be54f9eca..7181e466d 100644 --- a/src/main/java/com/gooddata/project/Environment.java +++ b/src/main/java/com/gooddata/project/Environment.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; /** diff --git a/src/main/java/com/gooddata/project/ProjectEnvironment.java b/src/main/java/com/gooddata/project/ProjectEnvironment.java index b96697dc0..d9aebfe48 100644 --- a/src/main/java/com/gooddata/project/ProjectEnvironment.java +++ b/src/main/java/com/gooddata/project/ProjectEnvironment.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; /** diff --git a/src/main/java/com/gooddata/project/ProjectNotFoundException.java b/src/main/java/com/gooddata/project/ProjectNotFoundException.java index 106a6a1a4..08e1cbd95 100644 --- a/src/main/java/com/gooddata/project/ProjectNotFoundException.java +++ b/src/main/java/com/gooddata/project/ProjectNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResult.java b/src/main/java/com/gooddata/project/ProjectValidationResult.java index cbc68e73a..abf2b7f42 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResult.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResult.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java index b39350e0f..26965d95a 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultItem.java b/src/main/java/com/gooddata/project/ProjectValidationResultItem.java index 16d14ec8c..c0e37f298 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultItem.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultItem.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java index 7b3e72b56..e4a59499c 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultParam.java index aabc34bb2..1ed82d9a5 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultParam.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java index 626c278c9..7ef574111 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import static java.lang.String.format; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java index c83a5f14c..92b374b4b 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResults.java b/src/main/java/com/gooddata/project/ProjectValidationResults.java index 5a96adf5a..0a35dfbd5 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResults.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResults.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.gooddata.util.BooleanDeserializer; diff --git a/src/main/java/com/gooddata/project/ProjectValidationType.java b/src/main/java/com/gooddata/project/ProjectValidationType.java index 65e3419d6..c9fec0f33 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationType.java +++ b/src/main/java/com/gooddata/project/ProjectValidationType.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/ProjectValidations.java b/src/main/java/com/gooddata/project/ProjectValidations.java index f2eae87ca..ce55281d3 100644 --- a/src/main/java/com/gooddata/project/ProjectValidations.java +++ b/src/main/java/com/gooddata/project/ProjectValidations.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index c3664e59c..b74453927 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/gooddata/project/RoleNotFoundException.java b/src/main/java/com/gooddata/project/RoleNotFoundException.java index 0eda92536..74346e12e 100644 --- a/src/main/java/com/gooddata/project/RoleNotFoundException.java +++ b/src/main/java/com/gooddata/project/RoleNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/project/Roles.java b/src/main/java/com/gooddata/project/Roles.java index 85754bc39..081624f4f 100644 --- a/src/main/java/com/gooddata/project/Roles.java +++ b/src/main/java/com/gooddata/project/Roles.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/project/User.java b/src/main/java/com/gooddata/project/User.java index 4d5e987c9..d8a777ee0 100644 --- a/src/main/java/com/gooddata/project/User.java +++ b/src/main/java/com/gooddata/project/User.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/gooddata/project/UsersDeserializer.java b/src/main/java/com/gooddata/project/UsersDeserializer.java index 855fe3b57..0a45e5de4 100644 --- a/src/main/java/com/gooddata/project/UsersDeserializer.java +++ b/src/main/java/com/gooddata/project/UsersDeserializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.gooddata.collections.PageableListDeserializer; diff --git a/src/main/java/com/gooddata/report/ExecuteDefinition.java b/src/main/java/com/gooddata/report/ExecuteDefinition.java index 7e43f7b2c..a354afb85 100644 --- a/src/main/java/com/gooddata/report/ExecuteDefinition.java +++ b/src/main/java/com/gooddata/report/ExecuteDefinition.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/report/ExecuteReport.java b/src/main/java/com/gooddata/report/ExecuteReport.java index 79c521f76..d2bdf7c07 100644 --- a/src/main/java/com/gooddata/report/ExecuteReport.java +++ b/src/main/java/com/gooddata/report/ExecuteReport.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/report/NoDataReportException.java b/src/main/java/com/gooddata/report/NoDataReportException.java index 955d4e74c..2af3445bf 100644 --- a/src/main/java/com/gooddata/report/NoDataReportException.java +++ b/src/main/java/com/gooddata/report/NoDataReportException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.report; /** diff --git a/src/main/java/com/gooddata/report/ReportException.java b/src/main/java/com/gooddata/report/ReportException.java index 8fd9b827d..02c1bf25d 100644 --- a/src/main/java/com/gooddata/report/ReportException.java +++ b/src/main/java/com/gooddata/report/ReportException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.report; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/report/ReportExportFormat.java b/src/main/java/com/gooddata/report/ReportExportFormat.java index ef3ab5453..c017e3945 100644 --- a/src/main/java/com/gooddata/report/ReportExportFormat.java +++ b/src/main/java/com/gooddata/report/ReportExportFormat.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.report; /** diff --git a/src/main/java/com/gooddata/util/BooleanDeserializer.java b/src/main/java/com/gooddata/util/BooleanDeserializer.java index 4465b233e..8107e45e2 100644 --- a/src/main/java/com/gooddata/util/BooleanDeserializer.java +++ b/src/main/java/com/gooddata/util/BooleanDeserializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java b/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java index cc8b3ed99..527a99aba 100644 --- a/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java +++ b/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.core.JsonGenerator; diff --git a/src/main/java/com/gooddata/util/BooleanStringSerializer.java b/src/main/java/com/gooddata/util/BooleanStringSerializer.java index 4bf8fd161..d6d243379 100644 --- a/src/main/java/com/gooddata/util/BooleanStringSerializer.java +++ b/src/main/java/com/gooddata/util/BooleanStringSerializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.core.JsonGenerator; diff --git a/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java b/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java index 5f17e7abc..26092e82e 100644 --- a/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java +++ b/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/main/java/com/gooddata/util/GDDateTimeSerializer.java b/src/main/java/com/gooddata/util/GDDateTimeSerializer.java index 556c2cafd..4a909702c 100644 --- a/src/main/java/com/gooddata/util/GDDateTimeSerializer.java +++ b/src/main/java/com/gooddata/util/GDDateTimeSerializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.core.JsonGenerator; diff --git a/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java b/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java index 186895615..a2ac81b8c 100644 --- a/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java +++ b/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import java.io.IOException; diff --git a/src/main/java/com/gooddata/util/ISODateTimeSerializer.java b/src/main/java/com/gooddata/util/ISODateTimeSerializer.java index 1a6d5a2e3..fb38942d9 100644 --- a/src/main/java/com/gooddata/util/ISODateTimeSerializer.java +++ b/src/main/java/com/gooddata/util/ISODateTimeSerializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.core.JsonGenerator; diff --git a/src/main/java/com/gooddata/util/TagsDeserializer.java b/src/main/java/com/gooddata/util/TagsDeserializer.java index 7e9a2ed17..98127c613 100644 --- a/src/main/java/com/gooddata/util/TagsDeserializer.java +++ b/src/main/java/com/gooddata/util/TagsDeserializer.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.core.JsonParser; diff --git a/src/main/java/com/gooddata/util/Validate.java b/src/main/java/com/gooddata/util/Validate.java index f83d85f51..16cb0ec3f 100644 --- a/src/main/java/com/gooddata/util/Validate.java +++ b/src/main/java/com/gooddata/util/Validate.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import java.util.Collection; diff --git a/src/main/java/com/gooddata/util/ZipHelper.java b/src/main/java/com/gooddata/util/ZipHelper.java index 1fa7fcbe2..5c793034f 100644 --- a/src/main/java/com/gooddata/util/ZipHelper.java +++ b/src/main/java/com/gooddata/util/ZipHelper.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index d6967cc00..1298be7a9 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseNotFoundException.java b/src/main/java/com/gooddata/warehouse/WarehouseNotFoundException.java index cdcbe9ed6..4b3010397 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseNotFoundException.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index 19d01d828..7edac4b7b 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.gooddata.AbstractPollHandler; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseTask.java b/src/main/java/com/gooddata/warehouse/WarehouseTask.java index 6d9db65b8..1ba9dd875 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseTask.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseTask.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUser.java b/src/main/java/com/gooddata/warehouse/WarehouseUser.java index c9a7880b4..d71a5136c 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUser.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUser.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java b/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java index 6534339d8..b7aadb017 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.gooddata.GoodDataException; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUsers.java b/src/main/java/com/gooddata/warehouse/WarehouseUsers.java index 2a55c6670..434e7dec1 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUsers.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUsers.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.gooddata.collections.PageableList; diff --git a/src/main/java/com/gooddata/warehouse/Warehouses.java b/src/main/java/com/gooddata/warehouse/Warehouses.java index 38b0c61de..4ece0b196 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouses.java +++ b/src/main/java/com/gooddata/warehouse/Warehouses.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.gooddata.collections.PageableList; diff --git a/src/test/java/com/gooddata/AbstractGoodDataAT.java b/src/test/java/com/gooddata/AbstractGoodDataAT.java index 47200d329..8f9552a0d 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataAT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata; import com.gooddata.http.client.GoodDataHttpClient; diff --git a/src/test/java/com/gooddata/AbstractServiceTest.java b/src/test/java/com/gooddata/AbstractServiceTest.java index 78a96bc39..3f797c34d 100644 --- a/src/test/java/com/gooddata/AbstractServiceTest.java +++ b/src/test/java/com/gooddata/AbstractServiceTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata; import org.mockito.Mock; diff --git a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java index 6bc002b1f..f400bb378 100644 --- a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java +++ b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata; import com.gooddata.gdc.GdcError; diff --git a/src/test/java/com/gooddata/GoodDataSettingsTest.java b/src/test/java/com/gooddata/GoodDataSettingsTest.java index 0a1ba8753..5c92d912d 100644 --- a/src/test/java/com/gooddata/GoodDataSettingsTest.java +++ b/src/test/java/com/gooddata/GoodDataSettingsTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata; import org.testng.annotations.BeforeMethod; diff --git a/src/test/java/com/gooddata/JsonMatchers.java b/src/test/java/com/gooddata/JsonMatchers.java index a45fee411..2acb95c9a 100644 --- a/src/test/java/com/gooddata/JsonMatchers.java +++ b/src/test/java/com/gooddata/JsonMatchers.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata; import static java.lang.String.format; diff --git a/src/test/java/com/gooddata/account/AccountServiceAT.java b/src/test/java/com/gooddata/account/AccountServiceAT.java index 2e4ebe01e..80abd1a46 100644 --- a/src/test/java/com/gooddata/account/AccountServiceAT.java +++ b/src/test/java/com/gooddata/account/AccountServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.account; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/account/AccountTest.java b/src/test/java/com/gooddata/account/AccountTest.java index 9a888b54e..daa873f14 100644 --- a/src/test/java/com/gooddata/account/AccountTest.java +++ b/src/test/java/com/gooddata/account/AccountTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.account; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/collections/PageRequestTest.java b/src/test/java/com/gooddata/collections/PageRequestTest.java index a21c49180..6424a6426 100644 --- a/src/test/java/com/gooddata/collections/PageRequestTest.java +++ b/src/test/java/com/gooddata/collections/PageRequestTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import org.springframework.web.util.UriComponentsBuilder; diff --git a/src/test/java/com/gooddata/collections/PageableListTest.java b/src/test/java/com/gooddata/collections/PageableListTest.java index ac9b278a6..86debeb89 100644 --- a/src/test/java/com/gooddata/collections/PageableListTest.java +++ b/src/test/java/com/gooddata/collections/PageableListTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/collections/PagingTest.java b/src/test/java/com/gooddata/collections/PagingTest.java index c47f5bfb9..e59bac7f2 100644 --- a/src/test/java/com/gooddata/collections/PagingTest.java +++ b/src/test/java/com/gooddata/collections/PagingTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/collections/UriPageTest.java b/src/test/java/com/gooddata/collections/UriPageTest.java index 7af35a5f7..5259d67a9 100644 --- a/src/test/java/com/gooddata/collections/UriPageTest.java +++ b/src/test/java/com/gooddata/collections/UriPageTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.collections; import org.springframework.web.util.UriComponents; diff --git a/src/test/java/com/gooddata/connector/ConnectorServiceIT.java b/src/test/java/com/gooddata/connector/ConnectorServiceIT.java index 28471e76f..98e35a21e 100644 --- a/src/test/java/com/gooddata/connector/ConnectorServiceIT.java +++ b/src/test/java/com/gooddata/connector/ConnectorServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.connector; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/connector/IntegrationTest.java b/src/test/java/com/gooddata/connector/IntegrationTest.java index d3aa02784..23b3ca595 100644 --- a/src/test/java/com/gooddata/connector/IntegrationTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.connector; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/connector/ProcessStatusTest.java b/src/test/java/com/gooddata/connector/ProcessStatusTest.java index d51d285cc..1808436ac 100644 --- a/src/test/java/com/gooddata/connector/ProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/ProcessStatusTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.connector; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java index 3a3745c75..76a54d773 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java index 13f5636a3..067dc67a8 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java index 77c128ca2..6134d18fd 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import static org.hamcrest.core.Is.is; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java index e93ca303d..133f069f2 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java b/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java index 9ca460576..7a396511d 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import org.hamcrest.Description; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index 473b0efd0..a91520643 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java index 522a7d57a..02f763261 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index d0ca412fd..101128017 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java b/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java index c12bab0fc..60b6054dc 100644 --- a/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java +++ b/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataload.processes; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java index e08af9f64..f6103fc9f 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index 8d916e986..194208309 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/dataset/DatasetsTest.java b/src/test/java/com/gooddata/dataset/DatasetsTest.java index a534d2589..081c7aecc 100644 --- a/src/test/java/com/gooddata/dataset/DatasetsTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetsTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/dataset/PullTaskTest.java b/src/test/java/com/gooddata/dataset/PullTaskTest.java index 2c9058fc1..32d97ab25 100644 --- a/src/test/java/com/gooddata/dataset/PullTaskTest.java +++ b/src/test/java/com/gooddata/dataset/PullTaskTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/dataset/PullTest.java b/src/test/java/com/gooddata/dataset/PullTest.java index 4ebce51bf..35df78883 100644 --- a/src/test/java/com/gooddata/dataset/PullTest.java +++ b/src/test/java/com/gooddata/dataset/PullTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java index 27638562b..ecd7b491d 100644 --- a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/dataset/UploadTest.java b/src/test/java/com/gooddata/dataset/UploadTest.java index 6aac22e12..0e1a53e33 100644 --- a/src/test/java/com/gooddata/dataset/UploadTest.java +++ b/src/test/java/com/gooddata/dataset/UploadTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java index 7bc42e95c..fbccc47b5 100644 --- a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/dataset/UploadsTest.java b/src/test/java/com/gooddata/dataset/UploadsTest.java index 41904c24c..12f9cf29a 100644 --- a/src/test/java/com/gooddata/dataset/UploadsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.dataset; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java b/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java index 67da5e316..52f6301a6 100644 --- a/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java +++ b/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java index 65180c2e0..b3c8cfbd2 100644 --- a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java +++ b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/gdc/ErrorStructureTest.java b/src/test/java/com/gooddata/gdc/ErrorStructureTest.java index b889d7bd7..29c71a7c6 100644 --- a/src/test/java/com/gooddata/gdc/ErrorStructureTest.java +++ b/src/test/java/com/gooddata/gdc/ErrorStructureTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/gdc/GdcServiceIT.java b/src/test/java/com/gooddata/gdc/GdcServiceIT.java index bb3b3893a..b67b8421f 100644 --- a/src/test/java/com/gooddata/gdc/GdcServiceIT.java +++ b/src/test/java/com/gooddata/gdc/GdcServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/gdc/GdcTest.java b/src/test/java/com/gooddata/gdc/GdcTest.java index 8f483fdd1..8433d0dab 100644 --- a/src/test/java/com/gooddata/gdc/GdcTest.java +++ b/src/test/java/com/gooddata/gdc/GdcTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/gdc/TaskStatusTest.java b/src/test/java/com/gooddata/gdc/TaskStatusTest.java index a5d0910b9..a71edff77 100644 --- a/src/test/java/com/gooddata/gdc/TaskStatusTest.java +++ b/src/test/java/com/gooddata/gdc/TaskStatusTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.gdc; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java index a7d412039..47ed6b601 100644 --- a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java +++ b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/md/MetadataServiceAT.java b/src/test/java/com/gooddata/md/MetadataServiceAT.java index 1bc8bd03d..2e0ed8c25 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceAT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import static com.gooddata.md.Restriction.identifier; diff --git a/src/test/java/com/gooddata/md/ProjectDashboardTest.java b/src/test/java/com/gooddata/md/ProjectDashboardTest.java index a4612d520..fb43e91d0 100644 --- a/src/test/java/com/gooddata/md/ProjectDashboardTest.java +++ b/src/test/java/com/gooddata/md/ProjectDashboardTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java index c1b0f7336..e21a7f645 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.maintenance; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java index 4d750a573..e0179c54e 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.maintenance; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java index 863628ffd..dce9b5fba 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.maintenance; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/md/report/ReportServiceAT.java b/src/test/java/com/gooddata/md/report/ReportServiceAT.java index 45f46c4fc..b215634b1 100644 --- a/src/test/java/com/gooddata/md/report/ReportServiceAT.java +++ b/src/test/java/com/gooddata/md/report/ReportServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.md.report; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/model/ModelServiceAT.java b/src/test/java/com/gooddata/model/ModelServiceAT.java index 911fbf708..9e6f29729 100644 --- a/src/test/java/com/gooddata/model/ModelServiceAT.java +++ b/src/test/java/com/gooddata/model/ModelServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.model; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/model/ModelServiceIT.java b/src/test/java/com/gooddata/model/ModelServiceIT.java index 90945e0c4..874bce75d 100644 --- a/src/test/java/com/gooddata/model/ModelServiceIT.java +++ b/src/test/java/com/gooddata/model/ModelServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.model; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/project/ProjectIdMatcher.java b/src/test/java/com/gooddata/project/ProjectIdMatcher.java index 9205efc7a..72adc82aa 100644 --- a/src/test/java/com/gooddata/project/ProjectIdMatcher.java +++ b/src/test/java/com/gooddata/project/ProjectIdMatcher.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import org.hamcrest.Description; diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index a881186c7..aa2232338 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/project/ProjectServiceIT.java b/src/test/java/com/gooddata/project/ProjectServiceIT.java index a54f654f2..d6017797f 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceIT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/project/ProjectTest.java b/src/test/java/com/gooddata/project/ProjectTest.java index 621d6dd59..2d2655d40 100644 --- a/src/test/java/com/gooddata/project/ProjectTest.java +++ b/src/test/java/com/gooddata/project/ProjectTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java index ff90a90be..eee2d5fbe 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java index 4a3ece4cc..42861df47 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java index 8077d46e6..f52c7de27 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import static java.util.Arrays.asList; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java index 38e2a6cc5..35c857e54 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java index 5fb29b036..7287a1d97 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java b/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java index d0de73a3e..f91b6f018 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/ProjectValidationsTest.java b/src/test/java/com/gooddata/project/ProjectValidationsTest.java index 9e632c474..cc05c8d28 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationsTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationsTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/RoleTest.java b/src/test/java/com/gooddata/project/RoleTest.java index 524aaa2a2..434c7572a 100644 --- a/src/test/java/com/gooddata/project/RoleTest.java +++ b/src/test/java/com/gooddata/project/RoleTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/RolesTest.java b/src/test/java/com/gooddata/project/RolesTest.java index 8410f1f2c..f85d11893 100644 --- a/src/test/java/com/gooddata/project/RolesTest.java +++ b/src/test/java/com/gooddata/project/RolesTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/UserTest.java b/src/test/java/com/gooddata/project/UserTest.java index 2c52644ff..70b1a7c17 100644 --- a/src/test/java/com/gooddata/project/UserTest.java +++ b/src/test/java/com/gooddata/project/UserTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/project/UsersTest.java b/src/test/java/com/gooddata/project/UsersTest.java index 279197690..5f7a6924e 100644 --- a/src/test/java/com/gooddata/project/UsersTest.java +++ b/src/test/java/com/gooddata/project/UsersTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.project; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/report/ReportServiceIT.java b/src/test/java/com/gooddata/report/ReportServiceIT.java index 956abe4a1..4bc5bc5b9 100644 --- a/src/test/java/com/gooddata/report/ReportServiceIT.java +++ b/src/test/java/com/gooddata/report/ReportServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.report; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/util/BooleanDeserializerTest.java b/src/test/java/com/gooddata/util/BooleanDeserializerTest.java index 47a392eb6..f03a0b757 100644 --- a/src/test/java/com/gooddata/util/BooleanDeserializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanDeserializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/BooleanIntegerClass.java b/src/test/java/com/gooddata/util/BooleanIntegerClass.java index b485c6cbb..e54b87da7 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerClass.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerClass.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java b/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java index 6a70fa107..97576577a 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/BooleanStringClass.java b/src/test/java/com/gooddata/util/BooleanStringClass.java index 8104c59bc..ba8085fb2 100644 --- a/src/test/java/com/gooddata/util/BooleanStringClass.java +++ b/src/test/java/com/gooddata/util/BooleanStringClass.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java b/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java index 5a2f2f32f..7fac2055d 100644 --- a/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/GDDateClass.java b/src/test/java/com/gooddata/util/GDDateClass.java index 4c1714faa..983b94f49 100644 --- a/src/test/java/com/gooddata/util/GDDateClass.java +++ b/src/test/java/com/gooddata/util/GDDateClass.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java index 8cf5507aa..919565890 100644 --- a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/GDDateSerializerTest.java b/src/test/java/com/gooddata/util/GDDateSerializerTest.java index 73f1b5ec6..1667c61cf 100644 --- a/src/test/java/com/gooddata/util/GDDateSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateSerializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/GDDateTimeClass.java b/src/test/java/com/gooddata/util/GDDateTimeClass.java index 0da6b1fdc..80dc20bbc 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeClass.java +++ b/src/test/java/com/gooddata/util/GDDateTimeClass.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java index ec4c5ab7d..ce30473c5 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java b/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java index aa6f5a522..9b87bb730 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/ISODateClass.java b/src/test/java/com/gooddata/util/ISODateClass.java index f3d742008..e9c6eb1f4 100644 --- a/src/test/java/com/gooddata/util/ISODateClass.java +++ b/src/test/java/com/gooddata/util/ISODateClass.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java b/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java index 53a04606b..21f4e24d7 100644 --- a/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java +++ b/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java b/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java index 606dec32e..c73593291 100644 --- a/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java +++ b/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; diff --git a/src/test/java/com/gooddata/util/TagsDeserializerTest.java b/src/test/java/com/gooddata/util/TagsDeserializerTest.java index 047d9b71a..a801bad2f 100644 --- a/src/test/java/com/gooddata/util/TagsDeserializerTest.java +++ b/src/test/java/com/gooddata/util/TagsDeserializerTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/util/ZipHelperTest.java b/src/test/java/com/gooddata/util/ZipHelperTest.java index 255f347f7..3cf1e8441 100644 --- a/src/test/java/com/gooddata/util/ZipHelperTest.java +++ b/src/test/java/com/gooddata/util/ZipHelperTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.util; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseIdMatcher.java b/src/test/java/com/gooddata/warehouse/WarehouseIdMatcher.java index 6bf558e41..7c5e17d51 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseIdMatcher.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseIdMatcher.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import org.hamcrest.Description; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java index 2122176ef..b1e13c4b0 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java index 94be7eef5..c3df7a56e 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.gooddata.AbstractGoodDataIT; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java index d766aebad..f23372040 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import static org.hamcrest.core.Is.is; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTest.java index 3e45bae87..065512b39 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java index 15495c854..1bcf5be0f 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java index 52f3f9f6b..3c2d9bab6 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/warehouse/WarehousesTest.java b/src/test/java/com/gooddata/warehouse/WarehousesTest.java index aea53cfb8..b18c5244c 100644 --- a/src/test/java/com/gooddata/warehouse/WarehousesTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehousesTest.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + */ package com.gooddata.warehouse; import static com.gooddata.JsonMatchers.serializesToJson; From e8f8b291ed034193df2ceebf8aed3ab48d702408 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 13 Sep 2016 13:43:37 +0200 Subject: [PATCH 162/934] chg: license header --- README.md | 2 ++ pom.xml | 2 +- src/license_header.txt | 3 +++ src/main/java/com/gooddata/AbstractPollHandler.java | 6 ++++-- src/main/java/com/gooddata/AbstractPollHandlerBase.java | 6 ++++-- src/main/java/com/gooddata/AbstractService.java | 6 ++++-- src/main/java/com/gooddata/FutureResult.java | 6 ++++-- src/main/java/com/gooddata/GoodData.java | 6 ++++-- src/main/java/com/gooddata/GoodDataException.java | 6 ++++-- src/main/java/com/gooddata/GoodDataRestException.java | 6 ++++-- src/main/java/com/gooddata/GoodDataSettings.java | 2 ++ .../java/com/gooddata/HeaderSettingRequestInterceptor.java | 6 ++++-- src/main/java/com/gooddata/PollHandler.java | 6 ++++-- src/main/java/com/gooddata/PollResult.java | 6 ++++-- src/main/java/com/gooddata/SimplePollHandler.java | 2 ++ src/main/java/com/gooddata/UriPrefixer.java | 6 ++++-- .../com/gooddata/UriPrefixingClientHttpRequestFactory.java | 6 ++++-- src/main/java/com/gooddata/account/Account.java | 6 ++++-- .../com/gooddata/account/AccountNotFoundException.java | 2 ++ src/main/java/com/gooddata/account/AccountService.java | 6 ++++-- src/main/java/com/gooddata/collections/Page.java | 2 ++ src/main/java/com/gooddata/collections/PageRequest.java | 2 ++ src/main/java/com/gooddata/collections/PageableList.java | 2 ++ .../com/gooddata/collections/PageableListDeserializer.java | 2 ++ .../com/gooddata/collections/PageableListSerializer.java | 6 ++++-- src/main/java/com/gooddata/collections/Paging.java | 2 ++ src/main/java/com/gooddata/collections/UriPage.java | 2 ++ .../java/com/gooddata/connector/ConnectorException.java | 2 ++ src/main/java/com/gooddata/connector/ConnectorService.java | 6 ++++-- src/main/java/com/gooddata/connector/ConnectorType.java | 6 ++++-- src/main/java/com/gooddata/connector/Integration.java | 6 ++++-- .../gooddata/connector/IntegrationNotFoundException.java | 2 ++ .../com/gooddata/connector/IntegrationProcessStatus.java | 6 ++++-- src/main/java/com/gooddata/connector/ProcessExecution.java | 6 ++++-- src/main/java/com/gooddata/connector/ProcessStatus.java | 6 ++++-- src/main/java/com/gooddata/connector/Settings.java | 6 ++++-- src/main/java/com/gooddata/connector/Status.java | 2 ++ .../com/gooddata/connector/Zendesk4ProcessExecution.java | 6 ++++-- src/main/java/com/gooddata/connector/Zendesk4Settings.java | 6 ++++-- .../java/com/gooddata/dataload/processes/AsyncTask.java | 6 ++++-- .../com/gooddata/dataload/processes/DataloadProcess.java | 2 ++ .../com/gooddata/dataload/processes/DataloadProcesses.java | 6 ++++-- .../com/gooddata/dataload/processes/ProcessExecution.java | 2 ++ .../dataload/processes/ProcessExecutionDetail.java | 2 ++ .../dataload/processes/ProcessExecutionException.java | 2 ++ .../gooddata/dataload/processes/ProcessExecutionTask.java | 2 ++ .../dataload/processes/ProcessNotFoundException.java | 2 ++ .../com/gooddata/dataload/processes/ProcessService.java | 2 ++ .../java/com/gooddata/dataload/processes/ProcessType.java | 2 ++ .../java/com/gooddata/dataload/processes/Schedule.java | 2 ++ .../dataload/processes/ScheduleNotFoundException.java | 2 ++ .../com/gooddata/dataload/processes/ScheduleState.java | 2 ++ .../java/com/gooddata/dataload/processes/Schedules.java | 6 ++++-- .../gooddata/dataload/processes/SchedulesDeserializer.java | 2 ++ src/main/java/com/gooddata/dataset/Dataset.java | 2 ++ src/main/java/com/gooddata/dataset/DatasetException.java | 6 ++++-- src/main/java/com/gooddata/dataset/DatasetLinks.java | 6 ++++-- src/main/java/com/gooddata/dataset/DatasetManifest.java | 6 ++++-- src/main/java/com/gooddata/dataset/DatasetManifests.java | 7 ++++--- .../com/gooddata/dataset/DatasetNotFoundException.java | 6 ++++-- src/main/java/com/gooddata/dataset/DatasetService.java | 6 ++++-- src/main/java/com/gooddata/dataset/Datasets.java | 6 ++++-- src/main/java/com/gooddata/dataset/EtlMode.java | 2 ++ src/main/java/com/gooddata/dataset/EtlModeType.java | 2 ++ src/main/java/com/gooddata/dataset/LookupMode.java | 2 ++ src/main/java/com/gooddata/dataset/MaqlDml.java | 7 ++++--- src/main/java/com/gooddata/dataset/Pull.java | 6 ++++-- src/main/java/com/gooddata/dataset/PullTask.java | 6 ++++-- src/main/java/com/gooddata/dataset/TaskState.java | 7 ++++--- src/main/java/com/gooddata/dataset/Upload.java | 2 ++ src/main/java/com/gooddata/dataset/UploadMode.java | 2 ++ src/main/java/com/gooddata/dataset/UploadStatistics.java | 2 ++ src/main/java/com/gooddata/dataset/Uploads.java | 2 ++ src/main/java/com/gooddata/dataset/UploadsInfo.java | 2 ++ src/main/java/com/gooddata/featureflag/FeatureFlag.java | 6 ++++-- .../java/com/gooddata/featureflag/FeatureFlagService.java | 6 ++++-- src/main/java/com/gooddata/featureflag/FeatureFlags.java | 6 ++++-- .../java/com/gooddata/featureflag/ProjectFeatureFlag.java | 6 ++++-- .../java/com/gooddata/featureflag/ProjectFeatureFlags.java | 6 ++++-- src/main/java/com/gooddata/gdc/AboutLinks.java | 6 ++++-- src/main/java/com/gooddata/gdc/AbstractMaql.java | 6 ++++-- src/main/java/com/gooddata/gdc/AsyncTask.java | 6 ++++-- src/main/java/com/gooddata/gdc/DataStoreException.java | 2 ++ src/main/java/com/gooddata/gdc/DataStoreService.java | 6 ++++-- src/main/java/com/gooddata/gdc/ErrorStructure.java | 2 ++ src/main/java/com/gooddata/gdc/Gdc.java | 6 ++++-- src/main/java/com/gooddata/gdc/GdcError.java | 6 ++++-- src/main/java/com/gooddata/gdc/GdcSardine.java | 6 ++++-- src/main/java/com/gooddata/gdc/GdcService.java | 6 ++++-- src/main/java/com/gooddata/gdc/LinkEntries.java | 6 ++++-- src/main/java/com/gooddata/gdc/RootLinks.java | 6 ++++-- src/main/java/com/gooddata/gdc/TaskStatus.java | 2 ++ src/main/java/com/gooddata/gdc/UriResponse.java | 6 ++++-- src/main/java/com/gooddata/md/AbstractObj.java | 6 ++++-- src/main/java/com/gooddata/md/Attachment.java | 6 ++++-- src/main/java/com/gooddata/md/Attribute.java | 6 ++++-- src/main/java/com/gooddata/md/AttributeDisplayForm.java | 2 ++ src/main/java/com/gooddata/md/AttributeElement.java | 7 ++++--- src/main/java/com/gooddata/md/AttributeElements.java | 7 ++++--- src/main/java/com/gooddata/md/AttributeSort.java | 7 ++++--- src/main/java/com/gooddata/md/Column.java | 7 ++++--- src/main/java/com/gooddata/md/DashboardAttachment.java | 6 ++++-- src/main/java/com/gooddata/md/DataLoadingColumn.java | 7 ++++--- src/main/java/com/gooddata/md/Dataset.java | 7 ++++--- src/main/java/com/gooddata/md/Dimension.java | 6 ++++-- src/main/java/com/gooddata/md/DisplayForm.java | 6 ++++-- src/main/java/com/gooddata/md/Entry.java | 2 ++ src/main/java/com/gooddata/md/Expression.java | 6 ++++-- src/main/java/com/gooddata/md/Fact.java | 6 ++++-- src/main/java/com/gooddata/md/IdentifierAndUri.java | 2 ++ src/main/java/com/gooddata/md/IdentifierToUri.java | 2 ++ src/main/java/com/gooddata/md/IdentifiersAndUris.java | 2 ++ src/main/java/com/gooddata/md/InUseMany.java | 2 ++ src/main/java/com/gooddata/md/Key.java | 2 ++ src/main/java/com/gooddata/md/MaqlAst.java | 6 ++++-- src/main/java/com/gooddata/md/Meta.java | 6 ++++-- src/main/java/com/gooddata/md/MetadataService.java | 6 ++++-- src/main/java/com/gooddata/md/Metric.java | 6 ++++-- src/main/java/com/gooddata/md/NestedAttribute.java | 6 ++++-- src/main/java/com/gooddata/md/NonUniqueObjException.java | 2 ++ src/main/java/com/gooddata/md/Obj.java | 2 ++ src/main/java/com/gooddata/md/ObjCreateException.java | 2 ++ src/main/java/com/gooddata/md/ObjNotFoundException.java | 2 ++ src/main/java/com/gooddata/md/ObjUpdateException.java | 2 ++ src/main/java/com/gooddata/md/ProjectDashboard.java | 2 ++ src/main/java/com/gooddata/md/Query.java | 2 ++ src/main/java/com/gooddata/md/Queryable.java | 2 ++ src/main/java/com/gooddata/md/ReportAttachment.java | 6 ++++-- src/main/java/com/gooddata/md/Restriction.java | 2 ++ src/main/java/com/gooddata/md/ScheduledMail.java | 6 ++++-- src/main/java/com/gooddata/md/ScheduledMailWhen.java | 6 ++++-- src/main/java/com/gooddata/md/Table.java | 7 ++++--- src/main/java/com/gooddata/md/TableDataLoad.java | 7 ++++--- src/main/java/com/gooddata/md/Updatable.java | 2 ++ src/main/java/com/gooddata/md/Usage.java | 2 ++ src/main/java/com/gooddata/md/UseMany.java | 2 ++ src/main/java/com/gooddata/md/UseManyEntries.java | 2 ++ .../com/gooddata/md/maintenance/ExportImportException.java | 2 ++ .../com/gooddata/md/maintenance/ExportImportService.java | 7 ++++--- .../com/gooddata/md/maintenance/PartialMdArtifact.java | 2 ++ .../java/com/gooddata/md/maintenance/PartialMdExport.java | 2 ++ .../com/gooddata/md/maintenance/PartialMdExportToken.java | 2 ++ src/main/java/com/gooddata/md/report/AttributeInGrid.java | 6 ++++-- src/main/java/com/gooddata/md/report/Filter.java | 2 ++ src/main/java/com/gooddata/md/report/Grid.java | 6 ++++-- src/main/java/com/gooddata/md/report/GridElement.java | 6 ++++-- .../com/gooddata/md/report/GridElementDeserializer.java | 7 ++++--- .../java/com/gooddata/md/report/GridElementSerializer.java | 7 ++++--- .../gooddata/md/report/GridReportDefinitionContent.java | 6 ++++-- src/main/java/com/gooddata/md/report/MetricElement.java | 7 ++++--- src/main/java/com/gooddata/md/report/MetricGroup.java | 7 ++++--- .../md/report/OneNumberReportDefinitionContent.java | 6 ++++-- src/main/java/com/gooddata/md/report/Report.java | 6 ++++-- src/main/java/com/gooddata/md/report/ReportDefinition.java | 6 ++++-- .../com/gooddata/md/report/ReportDefinitionContent.java | 6 ++++-- src/main/java/com/gooddata/md/report/Total.java | 7 ++++--- src/main/java/com/gooddata/model/DiffRequest.java | 6 ++++-- src/main/java/com/gooddata/model/MaqlDdl.java | 6 ++++-- src/main/java/com/gooddata/model/MaqlDdlLinks.java | 6 ++++-- src/main/java/com/gooddata/model/ModelDiff.java | 6 ++++-- src/main/java/com/gooddata/model/ModelException.java | 6 ++++-- src/main/java/com/gooddata/model/ModelService.java | 6 ++++-- .../com/gooddata/notification/NotificationService.java | 7 ++++--- src/main/java/com/gooddata/notification/ProjectEvent.java | 7 ++++--- src/main/java/com/gooddata/project/Environment.java | 2 ++ src/main/java/com/gooddata/project/Project.java | 6 ++++-- src/main/java/com/gooddata/project/ProjectDriver.java | 7 ++++--- src/main/java/com/gooddata/project/ProjectEnvironment.java | 2 ++ .../com/gooddata/project/ProjectNotFoundException.java | 2 ++ src/main/java/com/gooddata/project/ProjectService.java | 6 ++++-- src/main/java/com/gooddata/project/ProjectTemplate.java | 6 ++++-- src/main/java/com/gooddata/project/ProjectTemplates.java | 6 ++++-- .../java/com/gooddata/project/ProjectValidationResult.java | 2 ++ .../project/ProjectValidationResultGdcTimeElParam.java | 2 ++ .../com/gooddata/project/ProjectValidationResultItem.java | 2 ++ .../project/ProjectValidationResultObjectParam.java | 2 ++ .../com/gooddata/project/ProjectValidationResultParam.java | 2 ++ .../project/ProjectValidationResultSliElParam.java | 2 ++ .../project/ProjectValidationResultStringParam.java | 2 ++ .../com/gooddata/project/ProjectValidationResults.java | 2 ++ .../java/com/gooddata/project/ProjectValidationType.java | 2 ++ src/main/java/com/gooddata/project/ProjectValidations.java | 2 ++ src/main/java/com/gooddata/project/Projects.java | 6 ++++-- src/main/java/com/gooddata/project/Role.java | 2 ++ .../java/com/gooddata/project/RoleNotFoundException.java | 2 ++ src/main/java/com/gooddata/project/Roles.java | 2 ++ src/main/java/com/gooddata/project/User.java | 2 ++ src/main/java/com/gooddata/project/Users.java | 6 ++++-- src/main/java/com/gooddata/project/UsersDeserializer.java | 2 ++ src/main/java/com/gooddata/report/ExecuteDefinition.java | 2 ++ src/main/java/com/gooddata/report/ExecuteReport.java | 2 ++ .../java/com/gooddata/report/NoDataReportException.java | 2 ++ src/main/java/com/gooddata/report/ReportException.java | 2 ++ src/main/java/com/gooddata/report/ReportExportFormat.java | 2 ++ src/main/java/com/gooddata/report/ReportRequest.java | 6 ++++-- src/main/java/com/gooddata/report/ReportService.java | 6 ++++-- src/main/java/com/gooddata/util/BooleanDeserializer.java | 2 ++ .../java/com/gooddata/util/BooleanIntegerSerializer.java | 2 ++ .../java/com/gooddata/util/BooleanStringSerializer.java | 2 ++ src/main/java/com/gooddata/util/GDDateDeserializer.java | 6 ++++-- src/main/java/com/gooddata/util/GDDateSerializer.java | 6 ++++-- .../java/com/gooddata/util/GDDateTimeDeserializer.java | 2 ++ src/main/java/com/gooddata/util/GDDateTimeSerializer.java | 2 ++ .../java/com/gooddata/util/ISODateTimeDeserializer.java | 2 ++ src/main/java/com/gooddata/util/ISODateTimeSerializer.java | 2 ++ src/main/java/com/gooddata/util/ResponseErrorHandler.java | 6 ++++-- src/main/java/com/gooddata/util/TagsDeserializer.java | 2 ++ src/main/java/com/gooddata/util/TagsSerializer.java | 6 ++++-- src/main/java/com/gooddata/util/Validate.java | 2 ++ src/main/java/com/gooddata/util/ZipHelper.java | 2 ++ src/main/java/com/gooddata/warehouse/Warehouse.java | 2 ++ .../com/gooddata/warehouse/WarehouseNotFoundException.java | 2 ++ src/main/java/com/gooddata/warehouse/WarehouseService.java | 2 ++ src/main/java/com/gooddata/warehouse/WarehouseTask.java | 2 ++ src/main/java/com/gooddata/warehouse/WarehouseUser.java | 2 ++ .../gooddata/warehouse/WarehouseUserNotFoundException.java | 2 ++ src/main/java/com/gooddata/warehouse/WarehouseUsers.java | 2 ++ .../com/gooddata/warehouse/WarehouseUsersDeserializer.java | 6 ++++-- .../com/gooddata/warehouse/WarehouseUsersSerializer.java | 6 ++++-- src/main/java/com/gooddata/warehouse/Warehouses.java | 2 ++ .../com/gooddata/warehouse/WarehousesDeserializer.java | 6 ++++-- .../java/com/gooddata/warehouse/WarehousesSerializer.java | 6 ++++-- src/test/java/com/gooddata/AbstractGoodDataAT.java | 2 ++ src/test/java/com/gooddata/AbstractGoodDataIT.java | 6 ++++-- src/test/java/com/gooddata/AbstractServiceTest.java | 2 ++ src/test/java/com/gooddata/Example.java | 6 ++++-- src/test/java/com/gooddata/GoodDataRestExceptionTest.java | 2 ++ src/test/java/com/gooddata/GoodDataSettingsTest.java | 2 ++ src/test/java/com/gooddata/JsonMatchers.java | 2 ++ src/test/java/com/gooddata/UriPrefixerTest.java | 6 ++++-- src/test/java/com/gooddata/account/AccountServiceAT.java | 2 ++ src/test/java/com/gooddata/account/AccountServiceIT.java | 6 ++++-- src/test/java/com/gooddata/account/AccountTest.java | 2 ++ .../java/com/gooddata/collections/PageRequestTest.java | 2 ++ .../java/com/gooddata/collections/PageableListTest.java | 2 ++ src/test/java/com/gooddata/collections/PagingTest.java | 2 ++ src/test/java/com/gooddata/collections/UriPageTest.java | 2 ++ .../java/com/gooddata/connector/ConnectorServiceIT.java | 2 ++ .../gooddata/connector/IntegrationProcessStatusTest.java | 6 ++++-- src/test/java/com/gooddata/connector/IntegrationTest.java | 2 ++ .../java/com/gooddata/connector/ProcessExecutionTest.java | 6 ++++-- .../java/com/gooddata/connector/ProcessStatusTest.java | 2 ++ src/test/java/com/gooddata/connector/StatusTest.java | 6 ++++-- .../gooddata/connector/Zendesk4ProcessExecutionTest.java | 6 ++++-- .../java/com/gooddata/connector/Zendesk4SettingsTest.java | 6 ++++-- .../gooddata/dataload/processes/DataloadProcessTest.java | 2 ++ .../gooddata/dataload/processes/DataloadProcessesTest.java | 6 ++++-- .../dataload/processes/ProcessExecutionDetailTest.java | 2 ++ .../dataload/processes/ProcessExecutionTaskTest.java | 2 ++ .../gooddata/dataload/processes/ProcessExecutionTest.java | 2 ++ .../com/gooddata/dataload/processes/ProcessIdMatcher.java | 2 ++ .../com/gooddata/dataload/processes/ProcessServiceAT.java | 2 ++ .../com/gooddata/dataload/processes/ProcessServiceIT.java | 2 ++ .../gooddata/dataload/processes/ProcessServiceTest.java | 6 ++++-- .../java/com/gooddata/dataload/processes/ScheduleTest.java | 2 ++ .../com/gooddata/dataload/processes/SchedulesTest.java | 2 ++ src/test/java/com/gooddata/dataset/DatasetLinksTest.java | 6 ++++-- .../java/com/gooddata/dataset/DatasetManifestTest.java | 6 ++++-- src/test/java/com/gooddata/dataset/DatasetServiceAT.java | 2 ++ src/test/java/com/gooddata/dataset/DatasetServiceIT.java | 2 ++ src/test/java/com/gooddata/dataset/DatasetServiceTest.java | 6 ++++-- src/test/java/com/gooddata/dataset/DatasetTest.java | 6 ++++-- src/test/java/com/gooddata/dataset/DatasetsTest.java | 2 ++ src/test/java/com/gooddata/dataset/MaqlDmlTest.java | 6 ++++-- src/test/java/com/gooddata/dataset/PullTaskTest.java | 2 ++ src/test/java/com/gooddata/dataset/PullTest.java | 2 ++ src/test/java/com/gooddata/dataset/TaskStateTest.java | 7 ++++--- .../java/com/gooddata/dataset/UploadStatisticsTest.java | 2 ++ src/test/java/com/gooddata/dataset/UploadTest.java | 2 ++ src/test/java/com/gooddata/dataset/UploadsInfoTest.java | 2 ++ src/test/java/com/gooddata/dataset/UploadsTest.java | 2 ++ .../com/gooddata/featureflag/FeatureFlagServiceAT.java | 7 ++++--- .../com/gooddata/featureflag/FeatureFlagServiceIT.java | 6 ++++-- .../com/gooddata/featureflag/FeatureFlagServiceTest.java | 6 ++++-- .../java/com/gooddata/featureflag/FeatureFlagsTest.java | 6 ++++-- .../com/gooddata/featureflag/ProjectFeatureFlagTest.java | 6 ++++-- .../com/gooddata/featureflag/ProjectFeatureFlagsTest.java | 6 ++++-- src/test/java/com/gooddata/gdc/AboutLinksTest.java | 6 ++++-- src/test/java/com/gooddata/gdc/AsyncTaskTest.java | 6 ++++-- src/test/java/com/gooddata/gdc/DataStoreServiceIT.java | 2 ++ src/test/java/com/gooddata/gdc/DatastoreServiceAT.java | 2 ++ src/test/java/com/gooddata/gdc/ErrorStructureTest.java | 2 ++ src/test/java/com/gooddata/gdc/GdcErrorTest.java | 6 ++++-- src/test/java/com/gooddata/gdc/GdcServiceIT.java | 2 ++ src/test/java/com/gooddata/gdc/GdcTest.java | 2 ++ src/test/java/com/gooddata/gdc/LinkEntriesTest.java | 6 ++++-- src/test/java/com/gooddata/gdc/RootLinksTest.java | 6 ++++-- src/test/java/com/gooddata/gdc/TaskStatusTest.java | 2 ++ src/test/java/com/gooddata/gdc/UriResponseTest.java | 6 ++++-- .../java/com/gooddata/md/AttributeDisplayFormTest.java | 2 ++ src/test/java/com/gooddata/md/AttributeElementTest.java | 7 ++++--- src/test/java/com/gooddata/md/AttributeElementsTest.java | 7 ++++--- src/test/java/com/gooddata/md/AttributeSortTest.java | 7 ++++--- src/test/java/com/gooddata/md/AttributeTest.java | 6 ++++-- src/test/java/com/gooddata/md/ColumnTest.java | 7 ++++--- src/test/java/com/gooddata/md/DataLoadingColumnTest.java | 7 ++++--- src/test/java/com/gooddata/md/DatasetTest.java | 7 ++++--- src/test/java/com/gooddata/md/DimensionTest.java | 6 ++++-- src/test/java/com/gooddata/md/DisplayFormTest.java | 6 ++++-- src/test/java/com/gooddata/md/EntryTest.java | 6 ++++-- src/test/java/com/gooddata/md/ExportImportServiceAT.java | 7 ++++--- src/test/java/com/gooddata/md/ExpressionTest.java | 6 ++++-- src/test/java/com/gooddata/md/FactTest.java | 6 ++++-- src/test/java/com/gooddata/md/KeyTest.java | 6 ++++-- src/test/java/com/gooddata/md/MetaTest.java | 6 ++++-- src/test/java/com/gooddata/md/MetadataServiceAT.java | 2 ++ src/test/java/com/gooddata/md/MetadataServiceIT.java | 6 ++++-- src/test/java/com/gooddata/md/MetadataServiceTest.java | 6 ++++-- src/test/java/com/gooddata/md/MetricTest.java | 6 ++++-- src/test/java/com/gooddata/md/NestedAttributeTest.java | 6 ++++-- src/test/java/com/gooddata/md/ObjTest.java | 6 ++++-- src/test/java/com/gooddata/md/ProjectDashboardTest.java | 2 ++ src/test/java/com/gooddata/md/QueryTest.java | 6 ++++-- src/test/java/com/gooddata/md/RestrictionTest.java | 6 ++++-- src/test/java/com/gooddata/md/ScheduledMailTest.java | 6 ++++-- src/test/java/com/gooddata/md/TableDataLoadTest.java | 7 ++++--- src/test/java/com/gooddata/md/TableTest.java | 7 ++++--- .../com/gooddata/md/maintenance/ExportImportServiceIT.java | 7 ++++--- .../gooddata/md/maintenance/ExportImportServiceTest.java | 7 ++++--- .../com/gooddata/md/maintenance/PartialMdArtifactTest.java | 2 ++ .../com/gooddata/md/maintenance/PartialMdExportTest.java | 2 ++ .../gooddata/md/maintenance/PartialMdExportTokenTest.java | 2 ++ .../java/com/gooddata/md/report/AttributeInGridTest.java | 6 ++++-- .../gooddata/md/report/GridElementDeserializerTest.java | 7 ++++--- .../com/gooddata/md/report/GridElementSerializerTest.java | 7 ++++--- .../md/report/GridReportDefinitionContentTest.java | 6 ++++-- src/test/java/com/gooddata/md/report/GridTest.java | 6 ++++-- .../java/com/gooddata/md/report/MetricElementTest.java | 6 ++++-- .../md/report/OneNumberReportDefinitionContentTest.java | 6 ++++-- .../gooddata/md/report/ReportDefinitionContentTest.java | 6 ++++-- .../java/com/gooddata/md/report/ReportDefinitionTest.java | 6 ++++-- src/test/java/com/gooddata/md/report/ReportServiceAT.java | 2 ++ src/test/java/com/gooddata/md/report/ReportTest.java | 6 ++++-- src/test/java/com/gooddata/md/report/TotalTest.java | 7 ++++--- src/test/java/com/gooddata/model/DiffRequestTest.java | 6 ++++-- src/test/java/com/gooddata/model/MaqlDdlLinksTest.java | 6 ++++-- src/test/java/com/gooddata/model/MaqlDdlTest.java | 6 ++++-- src/test/java/com/gooddata/model/ModelDiffTest.java | 6 ++++-- src/test/java/com/gooddata/model/ModelServiceAT.java | 2 ++ src/test/java/com/gooddata/model/ModelServiceIT.java | 2 ++ .../com/gooddata/notification/NotificationServiceAT.java | 7 ++++--- .../com/gooddata/notification/NotificationServiceIT.java | 7 ++++--- .../com/gooddata/notification/NotificationServiceTest.java | 7 ++++--- .../java/com/gooddata/notification/ProjectEventTest.java | 7 ++++--- src/test/java/com/gooddata/project/ProjectIdMatcher.java | 2 ++ src/test/java/com/gooddata/project/ProjectServiceAT.java | 2 ++ src/test/java/com/gooddata/project/ProjectServiceIT.java | 2 ++ src/test/java/com/gooddata/project/ProjectServiceTest.java | 6 ++++-- .../java/com/gooddata/project/ProjectTemplateTest.java | 6 ++++-- .../java/com/gooddata/project/ProjectTemplatesTest.java | 6 ++++-- src/test/java/com/gooddata/project/ProjectTest.java | 2 ++ .../gooddata/project/ProjectValidationResultItemTest.java | 2 ++ .../gooddata/project/ProjectValidationResultParamTest.java | 2 ++ .../project/ProjectValidationResultSliElParamTest.java | 2 ++ .../com/gooddata/project/ProjectValidationResultTest.java | 2 ++ .../com/gooddata/project/ProjectValidationResultsTest.java | 2 ++ .../com/gooddata/project/ProjectValidationTypeTest.java | 2 ++ .../java/com/gooddata/project/ProjectValidationsTest.java | 2 ++ src/test/java/com/gooddata/project/RoleTest.java | 2 ++ src/test/java/com/gooddata/project/RolesTest.java | 2 ++ src/test/java/com/gooddata/project/UserTest.java | 2 ++ src/test/java/com/gooddata/project/UsersTest.java | 2 ++ .../java/com/gooddata/report/ExecuteDefinitionTest.java | 6 ++++-- src/test/java/com/gooddata/report/ExecuteReportTest.java | 6 ++++-- src/test/java/com/gooddata/report/ReportServiceIT.java | 2 ++ .../java/com/gooddata/util/BooleanDeserializerTest.java | 2 ++ src/test/java/com/gooddata/util/BooleanIntegerClass.java | 2 ++ .../com/gooddata/util/BooleanIntegerSerializerTest.java | 2 ++ src/test/java/com/gooddata/util/BooleanStringClass.java | 2 ++ .../com/gooddata/util/BooleanStringSerializerTest.java | 2 ++ src/test/java/com/gooddata/util/GDDateClass.java | 2 ++ .../java/com/gooddata/util/GDDateDeserializerTest.java | 2 ++ src/test/java/com/gooddata/util/GDDateSerializerTest.java | 2 ++ src/test/java/com/gooddata/util/GDDateTimeClass.java | 2 ++ .../java/com/gooddata/util/GDDateTimeDeserializerTest.java | 2 ++ .../java/com/gooddata/util/GDDateTimeSerializerTest.java | 2 ++ src/test/java/com/gooddata/util/ISODateClass.java | 2 ++ .../com/gooddata/util/ISODateTimeDeserializerTest.java | 2 ++ .../java/com/gooddata/util/ISODateTimeSerializerTest.java | 2 ++ src/test/java/com/gooddata/util/ResourceUtils.java | 7 ++++--- src/test/java/com/gooddata/util/TagsDeserializerTest.java | 2 ++ src/test/java/com/gooddata/util/TagsSerializerTest.java | 6 ++++-- src/test/java/com/gooddata/util/TagsTestClass.java | 6 ++++-- src/test/java/com/gooddata/util/ZipHelperTest.java | 2 ++ .../java/com/gooddata/warehouse/WarehouseIdMatcher.java | 2 ++ .../java/com/gooddata/warehouse/WarehouseServiceAT.java | 2 ++ .../java/com/gooddata/warehouse/WarehouseServiceIT.java | 2 ++ .../java/com/gooddata/warehouse/WarehouseTaskTest.java | 2 ++ src/test/java/com/gooddata/warehouse/WarehouseTest.java | 2 ++ .../java/com/gooddata/warehouse/WarehouseUserTest.java | 2 ++ .../java/com/gooddata/warehouse/WarehouseUsersTest.java | 2 ++ src/test/java/com/gooddata/warehouse/WarehousesTest.java | 2 ++ 392 files changed, 1184 insertions(+), 442 deletions(-) create mode 100644 src/license_header.txt diff --git a/README.md b/README.md index a781fd94f..3a2a06b59 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ The *GoodData Java SDK* encapsulates the REST API provided by the [GoodData](http://www.gooddata.com) platform. The first version was implemented during the [All Data Hackathon](http://hackathon.gooddata.com) April 10 - 11 2014 and currently the SDK is transitioned to be an official GoodData project. +GoodData Corporation provides this software "as-is" under conditions +specified in the [license](LICENSE.txt). ## Usage diff --git a/pom.xml b/pom.xml index 1cc61db08..0699f595f 100644 --- a/pom.xml +++ b/pom.xml @@ -166,7 +166,7 @@ license-maven-plugin 3.0 - Copyright (C) ${inceptionYear}-${currentYear}, GoodData(R) Corporation. All rights reserved. +
src/license_header.txt
true true true diff --git a/src/license_header.txt b/src/license_header.txt new file mode 100644 index 000000000..b12ff63d8 --- /dev/null +++ b/src/license_header.txt @@ -0,0 +1,3 @@ +Copyright (C) ${inceptionYear}-${currentYear}, GoodData(R) Corporation. All rights reserved. +This source code is licensed under the BSD-style license found in the +LICENSE.txt file in the root directory of this source tree. \ No newline at end of file diff --git a/src/main/java/com/gooddata/AbstractPollHandler.java b/src/main/java/com/gooddata/AbstractPollHandler.java index 304343c47..f07ba6403 100644 --- a/src/main/java/com/gooddata/AbstractPollHandler.java +++ b/src/main/java/com/gooddata/AbstractPollHandler.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/AbstractPollHandlerBase.java b/src/main/java/com/gooddata/AbstractPollHandlerBase.java index 086cc8364..61b2f7bff 100644 --- a/src/main/java/com/gooddata/AbstractPollHandlerBase.java +++ b/src/main/java/com/gooddata/AbstractPollHandlerBase.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/AbstractService.java b/src/main/java/com/gooddata/AbstractService.java index 8d728411c..642d42b32 100644 --- a/src/main/java/com/gooddata/AbstractService.java +++ b/src/main/java/com/gooddata/AbstractService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/FutureResult.java b/src/main/java/com/gooddata/FutureResult.java index b5458e810..d35076444 100644 --- a/src/main/java/com/gooddata/FutureResult.java +++ b/src/main/java/com/gooddata/FutureResult.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index bc952736d..fe069ee71 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/GoodDataException.java b/src/main/java/com/gooddata/GoodDataException.java index 0b88ab4cb..c3dd877a5 100644 --- a/src/main/java/com/gooddata/GoodDataException.java +++ b/src/main/java/com/gooddata/GoodDataException.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/GoodDataRestException.java b/src/main/java/com/gooddata/GoodDataRestException.java index 897f2406c..8d5fffdcd 100644 --- a/src/main/java/com/gooddata/GoodDataRestException.java +++ b/src/main/java/com/gooddata/GoodDataRestException.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/GoodDataSettings.java b/src/main/java/com/gooddata/GoodDataSettings.java index 4a385989d..46ccd30ff 100644 --- a/src/main/java/com/gooddata/GoodDataSettings.java +++ b/src/main/java/com/gooddata/GoodDataSettings.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/HeaderSettingRequestInterceptor.java b/src/main/java/com/gooddata/HeaderSettingRequestInterceptor.java index f534a9d77..ab9528204 100644 --- a/src/main/java/com/gooddata/HeaderSettingRequestInterceptor.java +++ b/src/main/java/com/gooddata/HeaderSettingRequestInterceptor.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/PollHandler.java b/src/main/java/com/gooddata/PollHandler.java index b06b2ca8c..a73aff3ec 100644 --- a/src/main/java/com/gooddata/PollHandler.java +++ b/src/main/java/com/gooddata/PollHandler.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/PollResult.java b/src/main/java/com/gooddata/PollResult.java index 9781a9aa4..a3c41c3e6 100644 --- a/src/main/java/com/gooddata/PollResult.java +++ b/src/main/java/com/gooddata/PollResult.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/SimplePollHandler.java b/src/main/java/com/gooddata/SimplePollHandler.java index c6fb41c4c..6285e927a 100644 --- a/src/main/java/com/gooddata/SimplePollHandler.java +++ b/src/main/java/com/gooddata/SimplePollHandler.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/UriPrefixer.java b/src/main/java/com/gooddata/UriPrefixer.java index a3bfe7e95..ed0f74a79 100644 --- a/src/main/java/com/gooddata/UriPrefixer.java +++ b/src/main/java/com/gooddata/UriPrefixer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java b/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java index fdf3f4ba3..e3428cf04 100644 --- a/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java +++ b/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/main/java/com/gooddata/account/Account.java b/src/main/java/com/gooddata/account/Account.java index 0b701cd00..a8fea9ef0 100644 --- a/src/main/java/com/gooddata/account/Account.java +++ b/src/main/java/com/gooddata/account/Account.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.account; diff --git a/src/main/java/com/gooddata/account/AccountNotFoundException.java b/src/main/java/com/gooddata/account/AccountNotFoundException.java index 9006d9b2e..40b3b1482 100644 --- a/src/main/java/com/gooddata/account/AccountNotFoundException.java +++ b/src/main/java/com/gooddata/account/AccountNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.account; diff --git a/src/main/java/com/gooddata/account/AccountService.java b/src/main/java/com/gooddata/account/AccountService.java index 52058a2dd..caa5ef867 100644 --- a/src/main/java/com/gooddata/account/AccountService.java +++ b/src/main/java/com/gooddata/account/AccountService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.account; diff --git a/src/main/java/com/gooddata/collections/Page.java b/src/main/java/com/gooddata/collections/Page.java index e40e72f79..aa0430326 100644 --- a/src/main/java/com/gooddata/collections/Page.java +++ b/src/main/java/com/gooddata/collections/Page.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/main/java/com/gooddata/collections/PageRequest.java b/src/main/java/com/gooddata/collections/PageRequest.java index 8393f392d..b65be4c45 100644 --- a/src/main/java/com/gooddata/collections/PageRequest.java +++ b/src/main/java/com/gooddata/collections/PageRequest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/main/java/com/gooddata/collections/PageableList.java b/src/main/java/com/gooddata/collections/PageableList.java index 18cd669aa..0c53bd6e2 100644 --- a/src/main/java/com/gooddata/collections/PageableList.java +++ b/src/main/java/com/gooddata/collections/PageableList.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/main/java/com/gooddata/collections/PageableListDeserializer.java b/src/main/java/com/gooddata/collections/PageableListDeserializer.java index 3e76f1d04..a4d8e2a03 100644 --- a/src/main/java/com/gooddata/collections/PageableListDeserializer.java +++ b/src/main/java/com/gooddata/collections/PageableListDeserializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/main/java/com/gooddata/collections/PageableListSerializer.java b/src/main/java/com/gooddata/collections/PageableListSerializer.java index e9dffd73b..ec53d3c21 100644 --- a/src/main/java/com/gooddata/collections/PageableListSerializer.java +++ b/src/main/java/com/gooddata/collections/PageableListSerializer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/main/java/com/gooddata/collections/Paging.java b/src/main/java/com/gooddata/collections/Paging.java index 6f56bc75b..be26fdc12 100644 --- a/src/main/java/com/gooddata/collections/Paging.java +++ b/src/main/java/com/gooddata/collections/Paging.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/main/java/com/gooddata/collections/UriPage.java b/src/main/java/com/gooddata/collections/UriPage.java index 3922c0116..c9d41b96b 100644 --- a/src/main/java/com/gooddata/collections/UriPage.java +++ b/src/main/java/com/gooddata/collections/UriPage.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/main/java/com/gooddata/connector/ConnectorException.java b/src/main/java/com/gooddata/connector/ConnectorException.java index f3232f279..cda321d58 100644 --- a/src/main/java/com/gooddata/connector/ConnectorException.java +++ b/src/main/java/com/gooddata/connector/ConnectorException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/ConnectorService.java b/src/main/java/com/gooddata/connector/ConnectorService.java index a60a338a1..86272687b 100644 --- a/src/main/java/com/gooddata/connector/ConnectorService.java +++ b/src/main/java/com/gooddata/connector/ConnectorService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/ConnectorType.java b/src/main/java/com/gooddata/connector/ConnectorType.java index eb018969c..d4db600f2 100644 --- a/src/main/java/com/gooddata/connector/ConnectorType.java +++ b/src/main/java/com/gooddata/connector/ConnectorType.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/Integration.java b/src/main/java/com/gooddata/connector/Integration.java index dc715e3f1..f63321b69 100644 --- a/src/main/java/com/gooddata/connector/Integration.java +++ b/src/main/java/com/gooddata/connector/Integration.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/IntegrationNotFoundException.java b/src/main/java/com/gooddata/connector/IntegrationNotFoundException.java index 6b3253f6c..96c312035 100644 --- a/src/main/java/com/gooddata/connector/IntegrationNotFoundException.java +++ b/src/main/java/com/gooddata/connector/IntegrationNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java index bb325c202..0daf17cb4 100644 --- a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java +++ b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/ProcessExecution.java b/src/main/java/com/gooddata/connector/ProcessExecution.java index 608f87dd0..75a583477 100644 --- a/src/main/java/com/gooddata/connector/ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/ProcessExecution.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/ProcessStatus.java b/src/main/java/com/gooddata/connector/ProcessStatus.java index 7f2ece5a4..29becbf03 100644 --- a/src/main/java/com/gooddata/connector/ProcessStatus.java +++ b/src/main/java/com/gooddata/connector/ProcessStatus.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/Settings.java b/src/main/java/com/gooddata/connector/Settings.java index 93377b5f8..5fe32a69e 100644 --- a/src/main/java/com/gooddata/connector/Settings.java +++ b/src/main/java/com/gooddata/connector/Settings.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/Status.java b/src/main/java/com/gooddata/connector/Status.java index 5ed38d3c6..40fdc54c8 100644 --- a/src/main/java/com/gooddata/connector/Status.java +++ b/src/main/java/com/gooddata/connector/Status.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java index 8fd3e0e3d..41b887346 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/connector/Zendesk4Settings.java b/src/main/java/com/gooddata/connector/Zendesk4Settings.java index cd3b33a40..7b5ea53e1 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4Settings.java +++ b/src/main/java/com/gooddata/connector/Zendesk4Settings.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/main/java/com/gooddata/dataload/processes/AsyncTask.java b/src/main/java/com/gooddata/dataload/processes/AsyncTask.java index a7be6a876..afd76d510 100644 --- a/src/main/java/com/gooddata/dataload/processes/AsyncTask.java +++ b/src/main/java/com/gooddata/dataload/processes/AsyncTask.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index 1a479af72..164debba0 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java index 13dca611c..0a4e92c7d 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java index 036811338..a7a44eb48 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java index 43ecae2d5..c3df37e56 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionException.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionException.java index 62cc3d114..1b9d27aef 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionException.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java index ba9ca1e30..12c895539 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessNotFoundException.java b/src/main/java/com/gooddata/dataload/processes/ProcessNotFoundException.java index 1875082e0..4240e9e6f 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessNotFoundException.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index 83c74b9dd..be1ad91a8 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessType.java b/src/main/java/com/gooddata/dataload/processes/ProcessType.java index cea285927..ca4db3140 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessType.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessType.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index f8c15ead5..5f1dc32d9 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ScheduleNotFoundException.java b/src/main/java/com/gooddata/dataload/processes/ScheduleNotFoundException.java index 72ec80e76..8523eb86f 100644 --- a/src/main/java/com/gooddata/dataload/processes/ScheduleNotFoundException.java +++ b/src/main/java/com/gooddata/dataload/processes/ScheduleNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/ScheduleState.java b/src/main/java/com/gooddata/dataload/processes/ScheduleState.java index de30f1641..3698c09f7 100644 --- a/src/main/java/com/gooddata/dataload/processes/ScheduleState.java +++ b/src/main/java/com/gooddata/dataload/processes/ScheduleState.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/Schedules.java b/src/main/java/com/gooddata/dataload/processes/Schedules.java index ade4d3af9..208aa6575 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedules.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedules.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataload/processes/SchedulesDeserializer.java b/src/main/java/com/gooddata/dataload/processes/SchedulesDeserializer.java index 1d3b6a118..70a1d117b 100644 --- a/src/main/java/com/gooddata/dataload/processes/SchedulesDeserializer.java +++ b/src/main/java/com/gooddata/dataload/processes/SchedulesDeserializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/main/java/com/gooddata/dataset/Dataset.java b/src/main/java/com/gooddata/dataset/Dataset.java index 54288302a..913418958 100644 --- a/src/main/java/com/gooddata/dataset/Dataset.java +++ b/src/main/java/com/gooddata/dataset/Dataset.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/DatasetException.java b/src/main/java/com/gooddata/dataset/DatasetException.java index b217d0cb3..af2dacf25 100644 --- a/src/main/java/com/gooddata/dataset/DatasetException.java +++ b/src/main/java/com/gooddata/dataset/DatasetException.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/DatasetLinks.java b/src/main/java/com/gooddata/dataset/DatasetLinks.java index 0b380de0d..b9b74ed91 100644 --- a/src/main/java/com/gooddata/dataset/DatasetLinks.java +++ b/src/main/java/com/gooddata/dataset/DatasetLinks.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/DatasetManifest.java b/src/main/java/com/gooddata/dataset/DatasetManifest.java index 6455e35f9..30656428e 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifest.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/DatasetManifests.java b/src/main/java/com/gooddata/dataset/DatasetManifests.java index 267cfc816..622c28294 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifests.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifests.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/dataset/DatasetNotFoundException.java b/src/main/java/com/gooddata/dataset/DatasetNotFoundException.java index 034a35bcf..3ee4b1f01 100644 --- a/src/main/java/com/gooddata/dataset/DatasetNotFoundException.java +++ b/src/main/java/com/gooddata/dataset/DatasetNotFoundException.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index c546e7e2c..0c559612c 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/Datasets.java b/src/main/java/com/gooddata/dataset/Datasets.java index e3ec2f65e..eee0f024e 100644 --- a/src/main/java/com/gooddata/dataset/Datasets.java +++ b/src/main/java/com/gooddata/dataset/Datasets.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/EtlMode.java b/src/main/java/com/gooddata/dataset/EtlMode.java index e018e6036..65a0162e5 100644 --- a/src/main/java/com/gooddata/dataset/EtlMode.java +++ b/src/main/java/com/gooddata/dataset/EtlMode.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/EtlModeType.java b/src/main/java/com/gooddata/dataset/EtlModeType.java index c4f643547..ab44dc088 100644 --- a/src/main/java/com/gooddata/dataset/EtlModeType.java +++ b/src/main/java/com/gooddata/dataset/EtlModeType.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/LookupMode.java b/src/main/java/com/gooddata/dataset/LookupMode.java index 03e55a81c..76171bc79 100644 --- a/src/main/java/com/gooddata/dataset/LookupMode.java +++ b/src/main/java/com/gooddata/dataset/LookupMode.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/MaqlDml.java b/src/main/java/com/gooddata/dataset/MaqlDml.java index 28934118d..6228f9bb2 100644 --- a/src/main/java/com/gooddata/dataset/MaqlDml.java +++ b/src/main/java/com/gooddata/dataset/MaqlDml.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.dataset; import com.gooddata.gdc.AbstractMaql; diff --git a/src/main/java/com/gooddata/dataset/Pull.java b/src/main/java/com/gooddata/dataset/Pull.java index bb3629e9f..4d5d98b75 100644 --- a/src/main/java/com/gooddata/dataset/Pull.java +++ b/src/main/java/com/gooddata/dataset/Pull.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/PullTask.java b/src/main/java/com/gooddata/dataset/PullTask.java index b69787f8f..8530a5525 100644 --- a/src/main/java/com/gooddata/dataset/PullTask.java +++ b/src/main/java/com/gooddata/dataset/PullTask.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/TaskState.java b/src/main/java/com/gooddata/dataset/TaskState.java index 02b734850..c73040024 100644 --- a/src/main/java/com/gooddata/dataset/TaskState.java +++ b/src/main/java/com/gooddata/dataset/TaskState.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.dataset; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/dataset/Upload.java b/src/main/java/com/gooddata/dataset/Upload.java index ca9b6b39c..b834e4fe1 100644 --- a/src/main/java/com/gooddata/dataset/Upload.java +++ b/src/main/java/com/gooddata/dataset/Upload.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/UploadMode.java b/src/main/java/com/gooddata/dataset/UploadMode.java index b10b502c4..a07819b09 100644 --- a/src/main/java/com/gooddata/dataset/UploadMode.java +++ b/src/main/java/com/gooddata/dataset/UploadMode.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/UploadStatistics.java b/src/main/java/com/gooddata/dataset/UploadStatistics.java index 80fdfe1a1..478c36698 100644 --- a/src/main/java/com/gooddata/dataset/UploadStatistics.java +++ b/src/main/java/com/gooddata/dataset/UploadStatistics.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/Uploads.java b/src/main/java/com/gooddata/dataset/Uploads.java index 26a0080df..3edf117bd 100644 --- a/src/main/java/com/gooddata/dataset/Uploads.java +++ b/src/main/java/com/gooddata/dataset/Uploads.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/dataset/UploadsInfo.java b/src/main/java/com/gooddata/dataset/UploadsInfo.java index 43fab465a..4b305d2c1 100644 --- a/src/main/java/com/gooddata/dataset/UploadsInfo.java +++ b/src/main/java/com/gooddata/dataset/UploadsInfo.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlag.java b/src/main/java/com/gooddata/featureflag/FeatureFlag.java index 0cdae3566..193645d46 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlag.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java index 415e4a408..af15ea202 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlagService.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlagService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlags.java b/src/main/java/com/gooddata/featureflag/FeatureFlags.java index 4ecce59b3..57ef25a04 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlags.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java index da2661715..af72a6f06 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java index 758778cd3..f3db98dc2 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/main/java/com/gooddata/gdc/AboutLinks.java b/src/main/java/com/gooddata/gdc/AboutLinks.java index cb25c68e0..de90d6726 100644 --- a/src/main/java/com/gooddata/gdc/AboutLinks.java +++ b/src/main/java/com/gooddata/gdc/AboutLinks.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/AbstractMaql.java b/src/main/java/com/gooddata/gdc/AbstractMaql.java index d0bd55318..e73d53ae3 100644 --- a/src/main/java/com/gooddata/gdc/AbstractMaql.java +++ b/src/main/java/com/gooddata/gdc/AbstractMaql.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/AsyncTask.java b/src/main/java/com/gooddata/gdc/AsyncTask.java index 799c7a62e..e17dcb870 100644 --- a/src/main/java/com/gooddata/gdc/AsyncTask.java +++ b/src/main/java/com/gooddata/gdc/AsyncTask.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/DataStoreException.java b/src/main/java/com/gooddata/gdc/DataStoreException.java index 7a3316004..c2cad667a 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreException.java +++ b/src/main/java/com/gooddata/gdc/DataStoreException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index 965620c65..21c431049 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/ErrorStructure.java b/src/main/java/com/gooddata/gdc/ErrorStructure.java index ff7ef3309..1f10f2a77 100644 --- a/src/main/java/com/gooddata/gdc/ErrorStructure.java +++ b/src/main/java/com/gooddata/gdc/ErrorStructure.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/Gdc.java b/src/main/java/com/gooddata/gdc/Gdc.java index 7dad58440..63f53d8de 100644 --- a/src/main/java/com/gooddata/gdc/Gdc.java +++ b/src/main/java/com/gooddata/gdc/Gdc.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/GdcError.java b/src/main/java/com/gooddata/gdc/GdcError.java index 8f81d3a2e..d524ce845 100644 --- a/src/main/java/com/gooddata/gdc/GdcError.java +++ b/src/main/java/com/gooddata/gdc/GdcError.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/GdcSardine.java b/src/main/java/com/gooddata/gdc/GdcSardine.java index 7f1b3d755..03c053b80 100644 --- a/src/main/java/com/gooddata/gdc/GdcSardine.java +++ b/src/main/java/com/gooddata/gdc/GdcSardine.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/GdcService.java b/src/main/java/com/gooddata/gdc/GdcService.java index 2b8100a21..533e27a99 100644 --- a/src/main/java/com/gooddata/gdc/GdcService.java +++ b/src/main/java/com/gooddata/gdc/GdcService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/LinkEntries.java b/src/main/java/com/gooddata/gdc/LinkEntries.java index f56d7ac4d..965e0814c 100644 --- a/src/main/java/com/gooddata/gdc/LinkEntries.java +++ b/src/main/java/com/gooddata/gdc/LinkEntries.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/RootLinks.java b/src/main/java/com/gooddata/gdc/RootLinks.java index 14af65a7d..f52d0f5d9 100644 --- a/src/main/java/com/gooddata/gdc/RootLinks.java +++ b/src/main/java/com/gooddata/gdc/RootLinks.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/TaskStatus.java b/src/main/java/com/gooddata/gdc/TaskStatus.java index dfff658e6..1b5fc5b96 100644 --- a/src/main/java/com/gooddata/gdc/TaskStatus.java +++ b/src/main/java/com/gooddata/gdc/TaskStatus.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/gdc/UriResponse.java b/src/main/java/com/gooddata/gdc/UriResponse.java index 3889baeea..3c91eadf0 100644 --- a/src/main/java/com/gooddata/gdc/UriResponse.java +++ b/src/main/java/com/gooddata/gdc/UriResponse.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/main/java/com/gooddata/md/AbstractObj.java b/src/main/java/com/gooddata/md/AbstractObj.java index 7f383a0d8..a3b753cbe 100644 --- a/src/main/java/com/gooddata/md/AbstractObj.java +++ b/src/main/java/com/gooddata/md/AbstractObj.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Attachment.java b/src/main/java/com/gooddata/md/Attachment.java index 179ef3a2f..a22988efe 100644 --- a/src/main/java/com/gooddata/md/Attachment.java +++ b/src/main/java/com/gooddata/md/Attachment.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Attribute.java b/src/main/java/com/gooddata/md/Attribute.java index 2182bcf23..7d02795c5 100644 --- a/src/main/java/com/gooddata/md/Attribute.java +++ b/src/main/java/com/gooddata/md/Attribute.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/AttributeDisplayForm.java b/src/main/java/com/gooddata/md/AttributeDisplayForm.java index 4e00f3a92..c0cbb6f87 100644 --- a/src/main/java/com/gooddata/md/AttributeDisplayForm.java +++ b/src/main/java/com/gooddata/md/AttributeDisplayForm.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/AttributeElement.java b/src/main/java/com/gooddata/md/AttributeElement.java index 2a2dca5f7..04ec0f850 100644 --- a/src/main/java/com/gooddata/md/AttributeElement.java +++ b/src/main/java/com/gooddata/md/AttributeElement.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/AttributeElements.java b/src/main/java/com/gooddata/md/AttributeElements.java index 866e4342a..84e44314f 100644 --- a/src/main/java/com/gooddata/md/AttributeElements.java +++ b/src/main/java/com/gooddata/md/AttributeElements.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.apache.commons.lang.Validate.notNull; diff --git a/src/main/java/com/gooddata/md/AttributeSort.java b/src/main/java/com/gooddata/md/AttributeSort.java index f21a07714..73fedb906 100644 --- a/src/main/java/com/gooddata/md/AttributeSort.java +++ b/src/main/java/com/gooddata/md/AttributeSort.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/md/Column.java b/src/main/java/com/gooddata/md/Column.java index 892d28c15..9bfeb9e8c 100644 --- a/src/main/java/com/gooddata/md/Column.java +++ b/src/main/java/com/gooddata/md/Column.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/DashboardAttachment.java b/src/main/java/com/gooddata/md/DashboardAttachment.java index ecf13b113..8a541280e 100644 --- a/src/main/java/com/gooddata/md/DashboardAttachment.java +++ b/src/main/java/com/gooddata/md/DashboardAttachment.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/DataLoadingColumn.java b/src/main/java/com/gooddata/md/DataLoadingColumn.java index fcbd6f4ed..fe883011b 100644 --- a/src/main/java/com/gooddata/md/DataLoadingColumn.java +++ b/src/main/java/com/gooddata/md/DataLoadingColumn.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index 8450df70d..1fdaa2ba3 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/gooddata/md/Dimension.java b/src/main/java/com/gooddata/md/Dimension.java index cbbcb2777..8203f5353 100644 --- a/src/main/java/com/gooddata/md/Dimension.java +++ b/src/main/java/com/gooddata/md/Dimension.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/DisplayForm.java b/src/main/java/com/gooddata/md/DisplayForm.java index 750a4e001..2b0d5941a 100644 --- a/src/main/java/com/gooddata/md/DisplayForm.java +++ b/src/main/java/com/gooddata/md/DisplayForm.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 58f19dcab..361baab7f 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Expression.java b/src/main/java/com/gooddata/md/Expression.java index b010b6f28..e6582364c 100644 --- a/src/main/java/com/gooddata/md/Expression.java +++ b/src/main/java/com/gooddata/md/Expression.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Fact.java b/src/main/java/com/gooddata/md/Fact.java index f9c7f2757..06e3c40b1 100644 --- a/src/main/java/com/gooddata/md/Fact.java +++ b/src/main/java/com/gooddata/md/Fact.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/IdentifierAndUri.java b/src/main/java/com/gooddata/md/IdentifierAndUri.java index ef562b1f3..d776940da 100644 --- a/src/main/java/com/gooddata/md/IdentifierAndUri.java +++ b/src/main/java/com/gooddata/md/IdentifierAndUri.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/IdentifierToUri.java b/src/main/java/com/gooddata/md/IdentifierToUri.java index 60acdfa2f..df0018534 100644 --- a/src/main/java/com/gooddata/md/IdentifierToUri.java +++ b/src/main/java/com/gooddata/md/IdentifierToUri.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/IdentifiersAndUris.java b/src/main/java/com/gooddata/md/IdentifiersAndUris.java index 82228b48c..922c191bc 100644 --- a/src/main/java/com/gooddata/md/IdentifiersAndUris.java +++ b/src/main/java/com/gooddata/md/IdentifiersAndUris.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/InUseMany.java b/src/main/java/com/gooddata/md/InUseMany.java index 87edc6e5e..5cf185d03 100644 --- a/src/main/java/com/gooddata/md/InUseMany.java +++ b/src/main/java/com/gooddata/md/InUseMany.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Key.java b/src/main/java/com/gooddata/md/Key.java index 98c64b43a..666f2c39a 100644 --- a/src/main/java/com/gooddata/md/Key.java +++ b/src/main/java/com/gooddata/md/Key.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/MaqlAst.java b/src/main/java/com/gooddata/md/MaqlAst.java index 49462cc55..5f612ab2b 100644 --- a/src/main/java/com/gooddata/md/MaqlAst.java +++ b/src/main/java/com/gooddata/md/MaqlAst.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Meta.java b/src/main/java/com/gooddata/md/Meta.java index 7284b59c3..5354cef71 100644 --- a/src/main/java/com/gooddata/md/Meta.java +++ b/src/main/java/com/gooddata/md/Meta.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index db5f46b39..48b17e9ab 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Metric.java b/src/main/java/com/gooddata/md/Metric.java index 4c5679ec0..3e3062d0d 100644 --- a/src/main/java/com/gooddata/md/Metric.java +++ b/src/main/java/com/gooddata/md/Metric.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index 082ec6b6b..72cbce184 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/NonUniqueObjException.java b/src/main/java/com/gooddata/md/NonUniqueObjException.java index 329baac1a..dd27e0b50 100644 --- a/src/main/java/com/gooddata/md/NonUniqueObjException.java +++ b/src/main/java/com/gooddata/md/NonUniqueObjException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Obj.java b/src/main/java/com/gooddata/md/Obj.java index 1da39a679..2853f4037 100644 --- a/src/main/java/com/gooddata/md/Obj.java +++ b/src/main/java/com/gooddata/md/Obj.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/ObjCreateException.java b/src/main/java/com/gooddata/md/ObjCreateException.java index c72e17528..d2bceec50 100644 --- a/src/main/java/com/gooddata/md/ObjCreateException.java +++ b/src/main/java/com/gooddata/md/ObjCreateException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/ObjNotFoundException.java b/src/main/java/com/gooddata/md/ObjNotFoundException.java index 75df30815..5eb8032ae 100644 --- a/src/main/java/com/gooddata/md/ObjNotFoundException.java +++ b/src/main/java/com/gooddata/md/ObjNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/ObjUpdateException.java b/src/main/java/com/gooddata/md/ObjUpdateException.java index 9af2dba14..9a0abc42a 100644 --- a/src/main/java/com/gooddata/md/ObjUpdateException.java +++ b/src/main/java/com/gooddata/md/ObjUpdateException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/ProjectDashboard.java b/src/main/java/com/gooddata/md/ProjectDashboard.java index 4558cde0a..7fc345144 100644 --- a/src/main/java/com/gooddata/md/ProjectDashboard.java +++ b/src/main/java/com/gooddata/md/ProjectDashboard.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Query.java b/src/main/java/com/gooddata/md/Query.java index 628600b1b..d97217208 100644 --- a/src/main/java/com/gooddata/md/Query.java +++ b/src/main/java/com/gooddata/md/Query.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Queryable.java b/src/main/java/com/gooddata/md/Queryable.java index 03259c5e7..c796080fd 100644 --- a/src/main/java/com/gooddata/md/Queryable.java +++ b/src/main/java/com/gooddata/md/Queryable.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/ReportAttachment.java b/src/main/java/com/gooddata/md/ReportAttachment.java index 6f2af36a8..d66bde961 100644 --- a/src/main/java/com/gooddata/md/ReportAttachment.java +++ b/src/main/java/com/gooddata/md/ReportAttachment.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Restriction.java b/src/main/java/com/gooddata/md/Restriction.java index 6b04fa590..45af7c069 100644 --- a/src/main/java/com/gooddata/md/Restriction.java +++ b/src/main/java/com/gooddata/md/Restriction.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/ScheduledMail.java b/src/main/java/com/gooddata/md/ScheduledMail.java index 76b8093de..8a2725091 100644 --- a/src/main/java/com/gooddata/md/ScheduledMail.java +++ b/src/main/java/com/gooddata/md/ScheduledMail.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/ScheduledMailWhen.java b/src/main/java/com/gooddata/md/ScheduledMailWhen.java index f5a9168f0..a60a09545 100644 --- a/src/main/java/com/gooddata/md/ScheduledMailWhen.java +++ b/src/main/java/com/gooddata/md/ScheduledMailWhen.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Table.java b/src/main/java/com/gooddata/md/Table.java index c0eb80f86..972a668dd 100644 --- a/src/main/java/com/gooddata/md/Table.java +++ b/src/main/java/com/gooddata/md/Table.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/TableDataLoad.java b/src/main/java/com/gooddata/md/TableDataLoad.java index d36d13fdf..3f391bc00 100644 --- a/src/main/java/com/gooddata/md/TableDataLoad.java +++ b/src/main/java/com/gooddata/md/TableDataLoad.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/Updatable.java b/src/main/java/com/gooddata/md/Updatable.java index f3c4f4717..9f409220b 100644 --- a/src/main/java/com/gooddata/md/Updatable.java +++ b/src/main/java/com/gooddata/md/Updatable.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/Usage.java b/src/main/java/com/gooddata/md/Usage.java index f26c9bf9a..6c99cf4a1 100644 --- a/src/main/java/com/gooddata/md/Usage.java +++ b/src/main/java/com/gooddata/md/Usage.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/UseMany.java b/src/main/java/com/gooddata/md/UseMany.java index 14ef0cce3..0a51821a1 100644 --- a/src/main/java/com/gooddata/md/UseMany.java +++ b/src/main/java/com/gooddata/md/UseMany.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/UseManyEntries.java b/src/main/java/com/gooddata/md/UseManyEntries.java index ca8c54681..146a0acc5 100644 --- a/src/main/java/com/gooddata/md/UseManyEntries.java +++ b/src/main/java/com/gooddata/md/UseManyEntries.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/main/java/com/gooddata/md/maintenance/ExportImportException.java b/src/main/java/com/gooddata/md/maintenance/ExportImportException.java index b640e6c03..a0ad6b85c 100644 --- a/src/main/java/com/gooddata/md/maintenance/ExportImportException.java +++ b/src/main/java/com/gooddata/md/maintenance/ExportImportException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.maintenance; diff --git a/src/main/java/com/gooddata/md/maintenance/ExportImportService.java b/src/main/java/com/gooddata/md/maintenance/ExportImportService.java index d3078f155..2e0726f3a 100644 --- a/src/main/java/com/gooddata/md/maintenance/ExportImportService.java +++ b/src/main/java/com/gooddata/md/maintenance/ExportImportService.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.maintenance; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java index ab09d1b61..c30bd877e 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.maintenance; diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java index 338b0ed02..34ebd6f8b 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.maintenance; diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java index e7bea63bb..a18f9f3e9 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.maintenance; diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 635cb9e84..28e903019 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/Filter.java b/src/main/java/com/gooddata/md/report/Filter.java index 4130f64ab..b13551481 100644 --- a/src/main/java/com/gooddata/md/report/Filter.java +++ b/src/main/java/com/gooddata/md/report/Filter.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/Grid.java b/src/main/java/com/gooddata/md/report/Grid.java index 9f921c751..b4982538e 100644 --- a/src/main/java/com/gooddata/md/report/Grid.java +++ b/src/main/java/com/gooddata/md/report/Grid.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/GridElement.java b/src/main/java/com/gooddata/md/report/GridElement.java index db247c5ef..59a8a4d6d 100644 --- a/src/main/java/com/gooddata/md/report/GridElement.java +++ b/src/main/java/com/gooddata/md/report/GridElement.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/GridElementDeserializer.java b/src/main/java/com/gooddata/md/report/GridElementDeserializer.java index 9a2d5335c..3e6ed3574 100644 --- a/src/main/java/com/gooddata/md/report/GridElementDeserializer.java +++ b/src/main/java/com/gooddata/md/report/GridElementDeserializer.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.report; import com.fasterxml.jackson.core.JsonParser; diff --git a/src/main/java/com/gooddata/md/report/GridElementSerializer.java b/src/main/java/com/gooddata/md/report/GridElementSerializer.java index 3e5bcd4ad..4b2e06587 100644 --- a/src/main/java/com/gooddata/md/report/GridElementSerializer.java +++ b/src/main/java/com/gooddata/md/report/GridElementSerializer.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.report; import com.fasterxml.jackson.core.JsonGenerationException; diff --git a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java index b3504dcdf..fb89a9612 100644 --- a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/MetricElement.java b/src/main/java/com/gooddata/md/report/MetricElement.java index ce042aa8f..3895e3421 100644 --- a/src/main/java/com/gooddata/md/report/MetricElement.java +++ b/src/main/java/com/gooddata/md/report/MetricElement.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.report; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/gooddata/md/report/MetricGroup.java b/src/main/java/com/gooddata/md/report/MetricGroup.java index 6cf1f2d1e..511cf7a70 100644 --- a/src/main/java/com/gooddata/md/report/MetricGroup.java +++ b/src/main/java/com/gooddata/md/report/MetricGroup.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.report; /** diff --git a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java index b98278c0f..d7d556ae1 100644 --- a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/Report.java b/src/main/java/com/gooddata/md/report/Report.java index 058224a07..259d6b76c 100644 --- a/src/main/java/com/gooddata/md/report/Report.java +++ b/src/main/java/com/gooddata/md/report/Report.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/ReportDefinition.java b/src/main/java/com/gooddata/md/report/ReportDefinition.java index 2944df08d..0d7fb34f8 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinition.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinition.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java index a828bc034..e967aed80 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/main/java/com/gooddata/md/report/Total.java b/src/main/java/com/gooddata/md/report/Total.java index 8b5d2be1c..f0cbd4839 100644 --- a/src/main/java/com/gooddata/md/report/Total.java +++ b/src/main/java/com/gooddata/md/report/Total.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.report; import org.springframework.util.CollectionUtils; diff --git a/src/main/java/com/gooddata/model/DiffRequest.java b/src/main/java/com/gooddata/model/DiffRequest.java index a4ffc3632..f57e7897a 100644 --- a/src/main/java/com/gooddata/model/DiffRequest.java +++ b/src/main/java/com/gooddata/model/DiffRequest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/main/java/com/gooddata/model/MaqlDdl.java b/src/main/java/com/gooddata/model/MaqlDdl.java index 0e0b19195..4ffd53e4e 100644 --- a/src/main/java/com/gooddata/model/MaqlDdl.java +++ b/src/main/java/com/gooddata/model/MaqlDdl.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/main/java/com/gooddata/model/MaqlDdlLinks.java b/src/main/java/com/gooddata/model/MaqlDdlLinks.java index 6be97e64e..95fa50c62 100644 --- a/src/main/java/com/gooddata/model/MaqlDdlLinks.java +++ b/src/main/java/com/gooddata/model/MaqlDdlLinks.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/main/java/com/gooddata/model/ModelDiff.java b/src/main/java/com/gooddata/model/ModelDiff.java index 009739992..c5d1892e2 100644 --- a/src/main/java/com/gooddata/model/ModelDiff.java +++ b/src/main/java/com/gooddata/model/ModelDiff.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/main/java/com/gooddata/model/ModelException.java b/src/main/java/com/gooddata/model/ModelException.java index 510685922..95e6af677 100644 --- a/src/main/java/com/gooddata/model/ModelException.java +++ b/src/main/java/com/gooddata/model/ModelException.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/main/java/com/gooddata/model/ModelService.java b/src/main/java/com/gooddata/model/ModelService.java index c333bfb88..7a83e5b1b 100644 --- a/src/main/java/com/gooddata/model/ModelService.java +++ b/src/main/java/com/gooddata/model/ModelService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/main/java/com/gooddata/notification/NotificationService.java b/src/main/java/com/gooddata/notification/NotificationService.java index a4333f460..b5155bbf1 100644 --- a/src/main/java/com/gooddata/notification/NotificationService.java +++ b/src/main/java/com/gooddata/notification/NotificationService.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.notification; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/notification/ProjectEvent.java b/src/main/java/com/gooddata/notification/ProjectEvent.java index 1d7e22e88..46f6e58d2 100644 --- a/src/main/java/com/gooddata/notification/ProjectEvent.java +++ b/src/main/java/com/gooddata/notification/ProjectEvent.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.notification; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/project/Environment.java b/src/main/java/com/gooddata/project/Environment.java index 7181e466d..ce6ae5a5c 100644 --- a/src/main/java/com/gooddata/project/Environment.java +++ b/src/main/java/com/gooddata/project/Environment.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index 7d21620a1..445ba4a83 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectDriver.java b/src/main/java/com/gooddata/project/ProjectDriver.java index fb063da68..030ebc0d9 100644 --- a/src/main/java/com/gooddata/project/ProjectDriver.java +++ b/src/main/java/com/gooddata/project/ProjectDriver.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.project; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/main/java/com/gooddata/project/ProjectEnvironment.java b/src/main/java/com/gooddata/project/ProjectEnvironment.java index d9aebfe48..f87c9d595 100644 --- a/src/main/java/com/gooddata/project/ProjectEnvironment.java +++ b/src/main/java/com/gooddata/project/ProjectEnvironment.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectNotFoundException.java b/src/main/java/com/gooddata/project/ProjectNotFoundException.java index 08e1cbd95..519816d41 100644 --- a/src/main/java/com/gooddata/project/ProjectNotFoundException.java +++ b/src/main/java/com/gooddata/project/ProjectNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index 5f38c4896..62177cc40 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectTemplate.java b/src/main/java/com/gooddata/project/ProjectTemplate.java index 06c8eb916..b8747c586 100644 --- a/src/main/java/com/gooddata/project/ProjectTemplate.java +++ b/src/main/java/com/gooddata/project/ProjectTemplate.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectTemplates.java b/src/main/java/com/gooddata/project/ProjectTemplates.java index fec9a875a..809edd263 100644 --- a/src/main/java/com/gooddata/project/ProjectTemplates.java +++ b/src/main/java/com/gooddata/project/ProjectTemplates.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResult.java b/src/main/java/com/gooddata/project/ProjectValidationResult.java index abf2b7f42..a8810d73e 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResult.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResult.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java index 26965d95a..9cd445cad 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultItem.java b/src/main/java/com/gooddata/project/ProjectValidationResultItem.java index c0e37f298..554b74716 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultItem.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultItem.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java index e4a59499c..e258d0163 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultParam.java index 1ed82d9a5..bbc7541c6 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultParam.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java index 7ef574111..948e951ed 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java index 92b374b4b..8e828f5f5 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationResults.java b/src/main/java/com/gooddata/project/ProjectValidationResults.java index 0a35dfbd5..7c08537e1 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResults.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResults.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidationType.java b/src/main/java/com/gooddata/project/ProjectValidationType.java index c9fec0f33..458f11363 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationType.java +++ b/src/main/java/com/gooddata/project/ProjectValidationType.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/ProjectValidations.java b/src/main/java/com/gooddata/project/ProjectValidations.java index ce55281d3..680d5f870 100644 --- a/src/main/java/com/gooddata/project/ProjectValidations.java +++ b/src/main/java/com/gooddata/project/ProjectValidations.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/Projects.java b/src/main/java/com/gooddata/project/Projects.java index a59e28c04..b768694ec 100644 --- a/src/main/java/com/gooddata/project/Projects.java +++ b/src/main/java/com/gooddata/project/Projects.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index b74453927..2ad256603 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/RoleNotFoundException.java b/src/main/java/com/gooddata/project/RoleNotFoundException.java index 74346e12e..fe96603e4 100644 --- a/src/main/java/com/gooddata/project/RoleNotFoundException.java +++ b/src/main/java/com/gooddata/project/RoleNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/Roles.java b/src/main/java/com/gooddata/project/Roles.java index 081624f4f..bf3cf87e1 100644 --- a/src/main/java/com/gooddata/project/Roles.java +++ b/src/main/java/com/gooddata/project/Roles.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/User.java b/src/main/java/com/gooddata/project/User.java index d8a777ee0..5f295a088 100644 --- a/src/main/java/com/gooddata/project/User.java +++ b/src/main/java/com/gooddata/project/User.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/Users.java b/src/main/java/com/gooddata/project/Users.java index 6704d24a4..e89aca3c9 100644 --- a/src/main/java/com/gooddata/project/Users.java +++ b/src/main/java/com/gooddata/project/Users.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/project/UsersDeserializer.java b/src/main/java/com/gooddata/project/UsersDeserializer.java index 0a45e5de4..c740f3192 100644 --- a/src/main/java/com/gooddata/project/UsersDeserializer.java +++ b/src/main/java/com/gooddata/project/UsersDeserializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/main/java/com/gooddata/report/ExecuteDefinition.java b/src/main/java/com/gooddata/report/ExecuteDefinition.java index a354afb85..12e352fba 100644 --- a/src/main/java/com/gooddata/report/ExecuteDefinition.java +++ b/src/main/java/com/gooddata/report/ExecuteDefinition.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/report/ExecuteReport.java b/src/main/java/com/gooddata/report/ExecuteReport.java index d2bdf7c07..d97f9a2fc 100644 --- a/src/main/java/com/gooddata/report/ExecuteReport.java +++ b/src/main/java/com/gooddata/report/ExecuteReport.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/report/NoDataReportException.java b/src/main/java/com/gooddata/report/NoDataReportException.java index 2af3445bf..19f016438 100644 --- a/src/main/java/com/gooddata/report/NoDataReportException.java +++ b/src/main/java/com/gooddata/report/NoDataReportException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/report/ReportException.java b/src/main/java/com/gooddata/report/ReportException.java index 02c1bf25d..2a9efd47a 100644 --- a/src/main/java/com/gooddata/report/ReportException.java +++ b/src/main/java/com/gooddata/report/ReportException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/report/ReportExportFormat.java b/src/main/java/com/gooddata/report/ReportExportFormat.java index c017e3945..e6a857d0e 100644 --- a/src/main/java/com/gooddata/report/ReportExportFormat.java +++ b/src/main/java/com/gooddata/report/ReportExportFormat.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/report/ReportRequest.java b/src/main/java/com/gooddata/report/ReportRequest.java index 2cb422132..e7c1ceff3 100644 --- a/src/main/java/com/gooddata/report/ReportRequest.java +++ b/src/main/java/com/gooddata/report/ReportRequest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/report/ReportService.java b/src/main/java/com/gooddata/report/ReportService.java index 06ef1e607..a312b88bc 100644 --- a/src/main/java/com/gooddata/report/ReportService.java +++ b/src/main/java/com/gooddata/report/ReportService.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/main/java/com/gooddata/util/BooleanDeserializer.java b/src/main/java/com/gooddata/util/BooleanDeserializer.java index 8107e45e2..7b69f6b25 100644 --- a/src/main/java/com/gooddata/util/BooleanDeserializer.java +++ b/src/main/java/com/gooddata/util/BooleanDeserializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java b/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java index 527a99aba..24bf01797 100644 --- a/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java +++ b/src/main/java/com/gooddata/util/BooleanIntegerSerializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/BooleanStringSerializer.java b/src/main/java/com/gooddata/util/BooleanStringSerializer.java index d6d243379..037676ca3 100644 --- a/src/main/java/com/gooddata/util/BooleanStringSerializer.java +++ b/src/main/java/com/gooddata/util/BooleanStringSerializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/GDDateDeserializer.java b/src/main/java/com/gooddata/util/GDDateDeserializer.java index cc3677f4d..b4f7aa912 100644 --- a/src/main/java/com/gooddata/util/GDDateDeserializer.java +++ b/src/main/java/com/gooddata/util/GDDateDeserializer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/GDDateSerializer.java b/src/main/java/com/gooddata/util/GDDateSerializer.java index a1e8dc7c7..4558fe13c 100644 --- a/src/main/java/com/gooddata/util/GDDateSerializer.java +++ b/src/main/java/com/gooddata/util/GDDateSerializer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java b/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java index 26092e82e..a3ed4f898 100644 --- a/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java +++ b/src/main/java/com/gooddata/util/GDDateTimeDeserializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/GDDateTimeSerializer.java b/src/main/java/com/gooddata/util/GDDateTimeSerializer.java index 4a909702c..cd522b11c 100644 --- a/src/main/java/com/gooddata/util/GDDateTimeSerializer.java +++ b/src/main/java/com/gooddata/util/GDDateTimeSerializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java b/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java index a2ac81b8c..0067f99ff 100644 --- a/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java +++ b/src/main/java/com/gooddata/util/ISODateTimeDeserializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/ISODateTimeSerializer.java b/src/main/java/com/gooddata/util/ISODateTimeSerializer.java index fb38942d9..6e8177831 100644 --- a/src/main/java/com/gooddata/util/ISODateTimeSerializer.java +++ b/src/main/java/com/gooddata/util/ISODateTimeSerializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/ResponseErrorHandler.java b/src/main/java/com/gooddata/util/ResponseErrorHandler.java index 6415b3a5e..ca64aa79a 100644 --- a/src/main/java/com/gooddata/util/ResponseErrorHandler.java +++ b/src/main/java/com/gooddata/util/ResponseErrorHandler.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/TagsDeserializer.java b/src/main/java/com/gooddata/util/TagsDeserializer.java index 98127c613..3b8bd509e 100644 --- a/src/main/java/com/gooddata/util/TagsDeserializer.java +++ b/src/main/java/com/gooddata/util/TagsDeserializer.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/TagsSerializer.java b/src/main/java/com/gooddata/util/TagsSerializer.java index dd539bc41..06e76f7a3 100644 --- a/src/main/java/com/gooddata/util/TagsSerializer.java +++ b/src/main/java/com/gooddata/util/TagsSerializer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/Validate.java b/src/main/java/com/gooddata/util/Validate.java index 16cb0ec3f..dfa46431a 100644 --- a/src/main/java/com/gooddata/util/Validate.java +++ b/src/main/java/com/gooddata/util/Validate.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/util/ZipHelper.java b/src/main/java/com/gooddata/util/ZipHelper.java index 5c793034f..397bab6d2 100644 --- a/src/main/java/com/gooddata/util/ZipHelper.java +++ b/src/main/java/com/gooddata/util/ZipHelper.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index 1298be7a9..6ad9f83e9 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseNotFoundException.java b/src/main/java/com/gooddata/warehouse/WarehouseNotFoundException.java index 4b3010397..330bea2dd 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseNotFoundException.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index 7edac4b7b..461a9d6e5 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseTask.java b/src/main/java/com/gooddata/warehouse/WarehouseTask.java index 1ba9dd875..b06e89ad7 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseTask.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseTask.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUser.java b/src/main/java/com/gooddata/warehouse/WarehouseUser.java index d71a5136c..9369b3ce9 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUser.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUser.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java b/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java index b7aadb017..6a8ae8feb 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUserNotFoundException.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUsers.java b/src/main/java/com/gooddata/warehouse/WarehouseUsers.java index 434e7dec1..735a16e58 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUsers.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUsers.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUsersDeserializer.java b/src/main/java/com/gooddata/warehouse/WarehouseUsersDeserializer.java index 54526e9f9..9db9c18be 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUsersDeserializer.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUsersDeserializer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUsersSerializer.java b/src/main/java/com/gooddata/warehouse/WarehouseUsersSerializer.java index 93968d55a..5a7bead6a 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUsersSerializer.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUsersSerializer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/Warehouses.java b/src/main/java/com/gooddata/warehouse/Warehouses.java index 4ece0b196..96cd30754 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouses.java +++ b/src/main/java/com/gooddata/warehouse/Warehouses.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehousesDeserializer.java b/src/main/java/com/gooddata/warehouse/WarehousesDeserializer.java index 0ac12c6d1..b69dfc100 100644 --- a/src/main/java/com/gooddata/warehouse/WarehousesDeserializer.java +++ b/src/main/java/com/gooddata/warehouse/WarehousesDeserializer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/main/java/com/gooddata/warehouse/WarehousesSerializer.java b/src/main/java/com/gooddata/warehouse/WarehousesSerializer.java index bd8788f5a..bd4d9dd44 100644 --- a/src/main/java/com/gooddata/warehouse/WarehousesSerializer.java +++ b/src/main/java/com/gooddata/warehouse/WarehousesSerializer.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/test/java/com/gooddata/AbstractGoodDataAT.java b/src/test/java/com/gooddata/AbstractGoodDataAT.java index 8f9552a0d..852626df4 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataAT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/test/java/com/gooddata/AbstractGoodDataIT.java b/src/test/java/com/gooddata/AbstractGoodDataIT.java index c4445703d..ab12a237d 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataIT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataIT.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/test/java/com/gooddata/AbstractServiceTest.java b/src/test/java/com/gooddata/AbstractServiceTest.java index 3f797c34d..c91c8d258 100644 --- a/src/test/java/com/gooddata/AbstractServiceTest.java +++ b/src/test/java/com/gooddata/AbstractServiceTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/test/java/com/gooddata/Example.java b/src/test/java/com/gooddata/Example.java index 775573849..f31da2f74 100644 --- a/src/test/java/com/gooddata/Example.java +++ b/src/test/java/com/gooddata/Example.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java index f400bb378..fe35ba5ac 100644 --- a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java +++ b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/test/java/com/gooddata/GoodDataSettingsTest.java b/src/test/java/com/gooddata/GoodDataSettingsTest.java index 5c92d912d..42bffade7 100644 --- a/src/test/java/com/gooddata/GoodDataSettingsTest.java +++ b/src/test/java/com/gooddata/GoodDataSettingsTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/test/java/com/gooddata/JsonMatchers.java b/src/test/java/com/gooddata/JsonMatchers.java index 2acb95c9a..f05c8c814 100644 --- a/src/test/java/com/gooddata/JsonMatchers.java +++ b/src/test/java/com/gooddata/JsonMatchers.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/test/java/com/gooddata/UriPrefixerTest.java b/src/test/java/com/gooddata/UriPrefixerTest.java index 8f02c9ab2..719b4e646 100644 --- a/src/test/java/com/gooddata/UriPrefixerTest.java +++ b/src/test/java/com/gooddata/UriPrefixerTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; diff --git a/src/test/java/com/gooddata/account/AccountServiceAT.java b/src/test/java/com/gooddata/account/AccountServiceAT.java index 80abd1a46..864a930ef 100644 --- a/src/test/java/com/gooddata/account/AccountServiceAT.java +++ b/src/test/java/com/gooddata/account/AccountServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.account; diff --git a/src/test/java/com/gooddata/account/AccountServiceIT.java b/src/test/java/com/gooddata/account/AccountServiceIT.java index f4ebebf5a..af2912354 100644 --- a/src/test/java/com/gooddata/account/AccountServiceIT.java +++ b/src/test/java/com/gooddata/account/AccountServiceIT.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.account; diff --git a/src/test/java/com/gooddata/account/AccountTest.java b/src/test/java/com/gooddata/account/AccountTest.java index daa873f14..8e5827f92 100644 --- a/src/test/java/com/gooddata/account/AccountTest.java +++ b/src/test/java/com/gooddata/account/AccountTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.account; diff --git a/src/test/java/com/gooddata/collections/PageRequestTest.java b/src/test/java/com/gooddata/collections/PageRequestTest.java index 6424a6426..eabd27a9e 100644 --- a/src/test/java/com/gooddata/collections/PageRequestTest.java +++ b/src/test/java/com/gooddata/collections/PageRequestTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/test/java/com/gooddata/collections/PageableListTest.java b/src/test/java/com/gooddata/collections/PageableListTest.java index 86debeb89..3948e6eb1 100644 --- a/src/test/java/com/gooddata/collections/PageableListTest.java +++ b/src/test/java/com/gooddata/collections/PageableListTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/test/java/com/gooddata/collections/PagingTest.java b/src/test/java/com/gooddata/collections/PagingTest.java index e59bac7f2..67bf1f0fd 100644 --- a/src/test/java/com/gooddata/collections/PagingTest.java +++ b/src/test/java/com/gooddata/collections/PagingTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/test/java/com/gooddata/collections/UriPageTest.java b/src/test/java/com/gooddata/collections/UriPageTest.java index 5259d67a9..42159516a 100644 --- a/src/test/java/com/gooddata/collections/UriPageTest.java +++ b/src/test/java/com/gooddata/collections/UriPageTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.collections; diff --git a/src/test/java/com/gooddata/connector/ConnectorServiceIT.java b/src/test/java/com/gooddata/connector/ConnectorServiceIT.java index 98e35a21e..117f75e33 100644 --- a/src/test/java/com/gooddata/connector/ConnectorServiceIT.java +++ b/src/test/java/com/gooddata/connector/ConnectorServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java index cfccf9f29..33ddb7439 100644 --- a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/test/java/com/gooddata/connector/IntegrationTest.java b/src/test/java/com/gooddata/connector/IntegrationTest.java index 23b3ca595..00e0dccb2 100644 --- a/src/test/java/com/gooddata/connector/IntegrationTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/test/java/com/gooddata/connector/ProcessExecutionTest.java b/src/test/java/com/gooddata/connector/ProcessExecutionTest.java index 6e87b8cb6..776644b45 100644 --- a/src/test/java/com/gooddata/connector/ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/connector/ProcessExecutionTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/test/java/com/gooddata/connector/ProcessStatusTest.java b/src/test/java/com/gooddata/connector/ProcessStatusTest.java index 1808436ac..861d5495e 100644 --- a/src/test/java/com/gooddata/connector/ProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/ProcessStatusTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/test/java/com/gooddata/connector/StatusTest.java b/src/test/java/com/gooddata/connector/StatusTest.java index 22a8ae191..d8fa6d8b5 100644 --- a/src/test/java/com/gooddata/connector/StatusTest.java +++ b/src/test/java/com/gooddata/connector/StatusTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java b/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java index af8e996aa..320af8ddb 100644 --- a/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java b/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java index 45a0ac655..c47c57315 100644 --- a/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java +++ b/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.connector; diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java index 76a54d773..c69796763 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java index 010642fc8..cf77010ef 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java index 067dc67a8..823d68cdc 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java index 6134d18fd..9f4a38576 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java index 133f069f2..98e698021 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java b/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java index 7a396511d..737a723e4 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index a91520643..6b16e481b 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java index 02f763261..2cc29cb42 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java index 5a44c6712..5a8ab2b54 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index 101128017..2efa787e4 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java b/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java index 60b6054dc..376973542 100644 --- a/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java +++ b/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataload.processes; diff --git a/src/test/java/com/gooddata/dataset/DatasetLinksTest.java b/src/test/java/com/gooddata/dataset/DatasetLinksTest.java index 5fef2ac3d..a7124ee1b 100644 --- a/src/test/java/com/gooddata/dataset/DatasetLinksTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetLinksTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/DatasetManifestTest.java b/src/test/java/com/gooddata/dataset/DatasetManifestTest.java index c99ee88ed..4a432d513 100644 --- a/src/test/java/com/gooddata/dataset/DatasetManifestTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetManifestTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java index f6103fc9f..6bb89ffdb 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index 194208309..d00d95847 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java index 790ce1e8d..d15a35312 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/DatasetTest.java b/src/test/java/com/gooddata/dataset/DatasetTest.java index cc6ea375e..90aa076ea 100644 --- a/src/test/java/com/gooddata/dataset/DatasetTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/DatasetsTest.java b/src/test/java/com/gooddata/dataset/DatasetsTest.java index 081c7aecc..1e5a916f4 100644 --- a/src/test/java/com/gooddata/dataset/DatasetsTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetsTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/MaqlDmlTest.java b/src/test/java/com/gooddata/dataset/MaqlDmlTest.java index 6b21c9442..b9a2c1f10 100644 --- a/src/test/java/com/gooddata/dataset/MaqlDmlTest.java +++ b/src/test/java/com/gooddata/dataset/MaqlDmlTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/PullTaskTest.java b/src/test/java/com/gooddata/dataset/PullTaskTest.java index 32d97ab25..7412daf9a 100644 --- a/src/test/java/com/gooddata/dataset/PullTaskTest.java +++ b/src/test/java/com/gooddata/dataset/PullTaskTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/PullTest.java b/src/test/java/com/gooddata/dataset/PullTest.java index 35df78883..b99051912 100644 --- a/src/test/java/com/gooddata/dataset/PullTest.java +++ b/src/test/java/com/gooddata/dataset/PullTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/TaskStateTest.java b/src/test/java/com/gooddata/dataset/TaskStateTest.java index c581c0eb0..593e62845 100644 --- a/src/test/java/com/gooddata/dataset/TaskStateTest.java +++ b/src/test/java/com/gooddata/dataset/TaskStateTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.dataset; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java index ecd7b491d..c32cc7de3 100644 --- a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/UploadTest.java b/src/test/java/com/gooddata/dataset/UploadTest.java index 0e1a53e33..56b7727e8 100644 --- a/src/test/java/com/gooddata/dataset/UploadTest.java +++ b/src/test/java/com/gooddata/dataset/UploadTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java index fbccc47b5..939e1dd12 100644 --- a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/dataset/UploadsTest.java b/src/test/java/com/gooddata/dataset/UploadsTest.java index 12f9cf29a..929411798 100644 --- a/src/test/java/com/gooddata/dataset/UploadsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.dataset; diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java index 989d7e8d2..6e53fde7c 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceAT.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.featureflag; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java index 9e466e600..4574f943b 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java index 62b2feec6..e4444263e 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java index 18a65c246..31a311adb 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java index e20fd6cbe..187af80d2 100644 --- a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java +++ b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java index 663e6e210..1b5b769df 100644 --- a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java +++ b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagsTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.featureflag; diff --git a/src/test/java/com/gooddata/gdc/AboutLinksTest.java b/src/test/java/com/gooddata/gdc/AboutLinksTest.java index 15d6458cb..efe9a0955 100644 --- a/src/test/java/com/gooddata/gdc/AboutLinksTest.java +++ b/src/test/java/com/gooddata/gdc/AboutLinksTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/AsyncTaskTest.java b/src/test/java/com/gooddata/gdc/AsyncTaskTest.java index 495e4e6ed..2e6275357 100644 --- a/src/test/java/com/gooddata/gdc/AsyncTaskTest.java +++ b/src/test/java/com/gooddata/gdc/AsyncTaskTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java b/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java index 52f6301a6..dbd201c4c 100644 --- a/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java +++ b/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java index b3c8cfbd2..6ddb64af2 100644 --- a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java +++ b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/ErrorStructureTest.java b/src/test/java/com/gooddata/gdc/ErrorStructureTest.java index 29c71a7c6..857b6c607 100644 --- a/src/test/java/com/gooddata/gdc/ErrorStructureTest.java +++ b/src/test/java/com/gooddata/gdc/ErrorStructureTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/GdcErrorTest.java b/src/test/java/com/gooddata/gdc/GdcErrorTest.java index ceecf239a..fed25c0e4 100644 --- a/src/test/java/com/gooddata/gdc/GdcErrorTest.java +++ b/src/test/java/com/gooddata/gdc/GdcErrorTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/GdcServiceIT.java b/src/test/java/com/gooddata/gdc/GdcServiceIT.java index b67b8421f..98f503208 100644 --- a/src/test/java/com/gooddata/gdc/GdcServiceIT.java +++ b/src/test/java/com/gooddata/gdc/GdcServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/GdcTest.java b/src/test/java/com/gooddata/gdc/GdcTest.java index 8433d0dab..27283571e 100644 --- a/src/test/java/com/gooddata/gdc/GdcTest.java +++ b/src/test/java/com/gooddata/gdc/GdcTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java index 7bdf95b53..0f7390453 100644 --- a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java +++ b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/RootLinksTest.java b/src/test/java/com/gooddata/gdc/RootLinksTest.java index 5caa6c1a2..0e26fb683 100644 --- a/src/test/java/com/gooddata/gdc/RootLinksTest.java +++ b/src/test/java/com/gooddata/gdc/RootLinksTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/TaskStatusTest.java b/src/test/java/com/gooddata/gdc/TaskStatusTest.java index a71edff77..e2d1da35e 100644 --- a/src/test/java/com/gooddata/gdc/TaskStatusTest.java +++ b/src/test/java/com/gooddata/gdc/TaskStatusTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/gdc/UriResponseTest.java b/src/test/java/com/gooddata/gdc/UriResponseTest.java index bbe38e214..4743ead86 100644 --- a/src/test/java/com/gooddata/gdc/UriResponseTest.java +++ b/src/test/java/com/gooddata/gdc/UriResponseTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.gdc; diff --git a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java index 47ed6b601..9b8b54455 100644 --- a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java +++ b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/AttributeElementTest.java b/src/test/java/com/gooddata/md/AttributeElementTest.java index ff89a556d..adda94868 100644 --- a/src/test/java/com/gooddata/md/AttributeElementTest.java +++ b/src/test/java/com/gooddata/md/AttributeElementTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/md/AttributeElementsTest.java b/src/test/java/com/gooddata/md/AttributeElementsTest.java index 2375e3c4d..a725b9fb3 100644 --- a/src/test/java/com/gooddata/md/AttributeElementsTest.java +++ b/src/test/java/com/gooddata/md/AttributeElementsTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/md/AttributeSortTest.java b/src/test/java/com/gooddata/md/AttributeSortTest.java index 4f2fbfc80..56e0bd309 100644 --- a/src/test/java/com/gooddata/md/AttributeSortTest.java +++ b/src/test/java/com/gooddata/md/AttributeSortTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/md/AttributeTest.java b/src/test/java/com/gooddata/md/AttributeTest.java index ae7bf8dce..9689fed34 100644 --- a/src/test/java/com/gooddata/md/AttributeTest.java +++ b/src/test/java/com/gooddata/md/AttributeTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/ColumnTest.java b/src/test/java/com/gooddata/md/ColumnTest.java index a30c234ab..0d85a3352 100644 --- a/src/test/java/com/gooddata/md/ColumnTest.java +++ b/src/test/java/com/gooddata/md/ColumnTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java index 0b8951ed1..6defc2e50 100644 --- a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java +++ b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/md/DatasetTest.java b/src/test/java/com/gooddata/md/DatasetTest.java index e8a9b8aff..114e37c73 100644 --- a/src/test/java/com/gooddata/md/DatasetTest.java +++ b/src/test/java/com/gooddata/md/DatasetTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/md/DimensionTest.java b/src/test/java/com/gooddata/md/DimensionTest.java index 2adc3853e..a4b2047f4 100644 --- a/src/test/java/com/gooddata/md/DimensionTest.java +++ b/src/test/java/com/gooddata/md/DimensionTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/DisplayFormTest.java b/src/test/java/com/gooddata/md/DisplayFormTest.java index 78b96c0a1..81e15b09f 100644 --- a/src/test/java/com/gooddata/md/DisplayFormTest.java +++ b/src/test/java/com/gooddata/md/DisplayFormTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/EntryTest.java b/src/test/java/com/gooddata/md/EntryTest.java index 15483c500..1feb3453a 100644 --- a/src/test/java/com/gooddata/md/EntryTest.java +++ b/src/test/java/com/gooddata/md/EntryTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/ExportImportServiceAT.java b/src/test/java/com/gooddata/md/ExportImportServiceAT.java index 751a57d3f..a09bad008 100644 --- a/src/test/java/com/gooddata/md/ExportImportServiceAT.java +++ b/src/test/java/com/gooddata/md/ExportImportServiceAT.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/md/ExpressionTest.java b/src/test/java/com/gooddata/md/ExpressionTest.java index a058d0c33..d7db2b6ac 100644 --- a/src/test/java/com/gooddata/md/ExpressionTest.java +++ b/src/test/java/com/gooddata/md/ExpressionTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/FactTest.java b/src/test/java/com/gooddata/md/FactTest.java index a8c2fdf58..40b09636a 100644 --- a/src/test/java/com/gooddata/md/FactTest.java +++ b/src/test/java/com/gooddata/md/FactTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/KeyTest.java b/src/test/java/com/gooddata/md/KeyTest.java index c1149e812..aaec5d682 100644 --- a/src/test/java/com/gooddata/md/KeyTest.java +++ b/src/test/java/com/gooddata/md/KeyTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/MetaTest.java b/src/test/java/com/gooddata/md/MetaTest.java index 08192eb8d..1ef3d2916 100644 --- a/src/test/java/com/gooddata/md/MetaTest.java +++ b/src/test/java/com/gooddata/md/MetaTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/MetadataServiceAT.java b/src/test/java/com/gooddata/md/MetadataServiceAT.java index 2e0ed8c25..2aa6ff219 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceAT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/MetadataServiceIT.java b/src/test/java/com/gooddata/md/MetadataServiceIT.java index 0104f95b2..d8997218d 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceIT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceIT.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/MetadataServiceTest.java b/src/test/java/com/gooddata/md/MetadataServiceTest.java index b1bc9fc9d..a2c6de9b2 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceTest.java +++ b/src/test/java/com/gooddata/md/MetadataServiceTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/MetricTest.java b/src/test/java/com/gooddata/md/MetricTest.java index 271b82f56..a3ce4160a 100644 --- a/src/test/java/com/gooddata/md/MetricTest.java +++ b/src/test/java/com/gooddata/md/MetricTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/NestedAttributeTest.java b/src/test/java/com/gooddata/md/NestedAttributeTest.java index a2358062f..9098a0218 100644 --- a/src/test/java/com/gooddata/md/NestedAttributeTest.java +++ b/src/test/java/com/gooddata/md/NestedAttributeTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/ObjTest.java b/src/test/java/com/gooddata/md/ObjTest.java index 95edc1cb1..7cbccf448 100644 --- a/src/test/java/com/gooddata/md/ObjTest.java +++ b/src/test/java/com/gooddata/md/ObjTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/ProjectDashboardTest.java b/src/test/java/com/gooddata/md/ProjectDashboardTest.java index fb43e91d0..f83300d39 100644 --- a/src/test/java/com/gooddata/md/ProjectDashboardTest.java +++ b/src/test/java/com/gooddata/md/ProjectDashboardTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/QueryTest.java b/src/test/java/com/gooddata/md/QueryTest.java index 6ad9aec4d..4b29b6dfa 100644 --- a/src/test/java/com/gooddata/md/QueryTest.java +++ b/src/test/java/com/gooddata/md/QueryTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/RestrictionTest.java b/src/test/java/com/gooddata/md/RestrictionTest.java index 5a993b7e6..da0ad4acf 100644 --- a/src/test/java/com/gooddata/md/RestrictionTest.java +++ b/src/test/java/com/gooddata/md/RestrictionTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/ScheduledMailTest.java b/src/test/java/com/gooddata/md/ScheduledMailTest.java index 985ed6be5..668682810 100644 --- a/src/test/java/com/gooddata/md/ScheduledMailTest.java +++ b/src/test/java/com/gooddata/md/ScheduledMailTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md; diff --git a/src/test/java/com/gooddata/md/TableDataLoadTest.java b/src/test/java/com/gooddata/md/TableDataLoadTest.java index 9a3045d3d..e73196f97 100644 --- a/src/test/java/com/gooddata/md/TableDataLoadTest.java +++ b/src/test/java/com/gooddata/md/TableDataLoadTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.hamcrest.CoreMatchers.is; diff --git a/src/test/java/com/gooddata/md/TableTest.java b/src/test/java/com/gooddata/md/TableTest.java index 6760a2e16..adfe2a93c 100644 --- a/src/test/java/com/gooddata/md/TableTest.java +++ b/src/test/java/com/gooddata/md/TableTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md; import static org.hamcrest.CoreMatchers.hasItems; diff --git a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java index 285dc58b0..03bd15331 100644 --- a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java +++ b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.maintenance; import static com.gooddata.util.ResourceUtils.readFromResource; diff --git a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java index bd3dc829b..71dfe8d7d 100644 --- a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java +++ b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.maintenance; import static org.mockito.Matchers.any; diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java index e21a7f645..8eae923a2 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.maintenance; diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java index e0179c54e..308b66bcd 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.maintenance; diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java index dce9b5fba..f31b7957f 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.maintenance; diff --git a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java index f29f60846..4c6b0769c 100644 --- a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java +++ b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java b/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java index d97fc7a1f..bd0b27ddd 100644 --- a/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java +++ b/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.report; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/com/gooddata/md/report/GridElementSerializerTest.java b/src/test/java/com/gooddata/md/report/GridElementSerializerTest.java index c791d304b..481dcced0 100644 --- a/src/test/java/com/gooddata/md/report/GridElementSerializerTest.java +++ b/src/test/java/com/gooddata/md/report/GridElementSerializerTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.report; import com.fasterxml.jackson.databind.annotation.JsonSerialize; diff --git a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java index 5e75c4727..2705728bf 100644 --- a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index befc64ecc..b84b5ac29 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/MetricElementTest.java b/src/test/java/com/gooddata/md/report/MetricElementTest.java index a54d83a12..dc5aa71af 100644 --- a/src/test/java/com/gooddata/md/report/MetricElementTest.java +++ b/src/test/java/com/gooddata/md/report/MetricElementTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java index dd0337bf2..754d8e3cf 100644 --- a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java index d6469a1dd..cda4f3118 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java index e5fdb8a6c..c3e85777b 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/ReportServiceAT.java b/src/test/java/com/gooddata/md/report/ReportServiceAT.java index b215634b1..d71ee55c4 100644 --- a/src/test/java/com/gooddata/md/report/ReportServiceAT.java +++ b/src/test/java/com/gooddata/md/report/ReportServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/ReportTest.java b/src/test/java/com/gooddata/md/report/ReportTest.java index 356beb04d..148429f82 100644 --- a/src/test/java/com/gooddata/md/report/ReportTest.java +++ b/src/test/java/com/gooddata/md/report/ReportTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.md.report; diff --git a/src/test/java/com/gooddata/md/report/TotalTest.java b/src/test/java/com/gooddata/md/report/TotalTest.java index 443e4362d..cd404240b 100644 --- a/src/test/java/com/gooddata/md/report/TotalTest.java +++ b/src/test/java/com/gooddata/md/report/TotalTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.md.report; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/model/DiffRequestTest.java b/src/test/java/com/gooddata/model/DiffRequestTest.java index 66bd76090..6d15c45c0 100644 --- a/src/test/java/com/gooddata/model/DiffRequestTest.java +++ b/src/test/java/com/gooddata/model/DiffRequestTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java index e30f757d9..d9687eaa1 100644 --- a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java +++ b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/test/java/com/gooddata/model/MaqlDdlTest.java b/src/test/java/com/gooddata/model/MaqlDdlTest.java index 483c3ce1b..59c368991 100644 --- a/src/test/java/com/gooddata/model/MaqlDdlTest.java +++ b/src/test/java/com/gooddata/model/MaqlDdlTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/test/java/com/gooddata/model/ModelDiffTest.java b/src/test/java/com/gooddata/model/ModelDiffTest.java index 626dd79a0..9e617ed59 100644 --- a/src/test/java/com/gooddata/model/ModelDiffTest.java +++ b/src/test/java/com/gooddata/model/ModelDiffTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/test/java/com/gooddata/model/ModelServiceAT.java b/src/test/java/com/gooddata/model/ModelServiceAT.java index 9e6f29729..5889b3a4e 100644 --- a/src/test/java/com/gooddata/model/ModelServiceAT.java +++ b/src/test/java/com/gooddata/model/ModelServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/test/java/com/gooddata/model/ModelServiceIT.java b/src/test/java/com/gooddata/model/ModelServiceIT.java index 874bce75d..9356160a1 100644 --- a/src/test/java/com/gooddata/model/ModelServiceIT.java +++ b/src/test/java/com/gooddata/model/ModelServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.model; diff --git a/src/test/java/com/gooddata/notification/NotificationServiceAT.java b/src/test/java/com/gooddata/notification/NotificationServiceAT.java index f147666b4..bd3a4bae9 100644 --- a/src/test/java/com/gooddata/notification/NotificationServiceAT.java +++ b/src/test/java/com/gooddata/notification/NotificationServiceAT.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.notification; import static java.util.Collections.singletonMap; diff --git a/src/test/java/com/gooddata/notification/NotificationServiceIT.java b/src/test/java/com/gooddata/notification/NotificationServiceIT.java index de2a20336..b79a4ab4a 100644 --- a/src/test/java/com/gooddata/notification/NotificationServiceIT.java +++ b/src/test/java/com/gooddata/notification/NotificationServiceIT.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.notification; import static com.gooddata.util.ResourceUtils.readFromResource; diff --git a/src/test/java/com/gooddata/notification/NotificationServiceTest.java b/src/test/java/com/gooddata/notification/NotificationServiceTest.java index 053cbff4d..04d278572 100644 --- a/src/test/java/com/gooddata/notification/NotificationServiceTest.java +++ b/src/test/java/com/gooddata/notification/NotificationServiceTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.notification; import static java.util.Collections.singletonMap; diff --git a/src/test/java/com/gooddata/notification/ProjectEventTest.java b/src/test/java/com/gooddata/notification/ProjectEventTest.java index 7e7da6d11..fc6601808 100644 --- a/src/test/java/com/gooddata/notification/ProjectEventTest.java +++ b/src/test/java/com/gooddata/notification/ProjectEventTest.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.notification; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/project/ProjectIdMatcher.java b/src/test/java/com/gooddata/project/ProjectIdMatcher.java index 72adc82aa..23c2f4625 100644 --- a/src/test/java/com/gooddata/project/ProjectIdMatcher.java +++ b/src/test/java/com/gooddata/project/ProjectIdMatcher.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectServiceAT.java b/src/test/java/com/gooddata/project/ProjectServiceAT.java index aa2232338..e9134180e 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceAT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectServiceIT.java b/src/test/java/com/gooddata/project/ProjectServiceIT.java index d6017797f..86fad2eee 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceIT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectServiceTest.java b/src/test/java/com/gooddata/project/ProjectServiceTest.java index b04dab0ae..3adab14e7 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceTest.java +++ b/src/test/java/com/gooddata/project/ProjectServiceTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectTemplateTest.java b/src/test/java/com/gooddata/project/ProjectTemplateTest.java index 38bfe8f0f..1ba53c021 100644 --- a/src/test/java/com/gooddata/project/ProjectTemplateTest.java +++ b/src/test/java/com/gooddata/project/ProjectTemplateTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectTemplatesTest.java b/src/test/java/com/gooddata/project/ProjectTemplatesTest.java index 3f54ce4a1..abd90ea41 100644 --- a/src/test/java/com/gooddata/project/ProjectTemplatesTest.java +++ b/src/test/java/com/gooddata/project/ProjectTemplatesTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectTest.java b/src/test/java/com/gooddata/project/ProjectTest.java index 2d2655d40..cdb0e39b5 100644 --- a/src/test/java/com/gooddata/project/ProjectTest.java +++ b/src/test/java/com/gooddata/project/ProjectTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java index eee2d5fbe..f260c4c2a 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java index 42861df47..0a2480896 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java index f52c7de27..9e0174045 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultSliElParamTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java index 35c857e54..b2f7dd1d1 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java index 7287a1d97..44b3c0971 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java b/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java index f91b6f018..1489a1fc8 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/ProjectValidationsTest.java b/src/test/java/com/gooddata/project/ProjectValidationsTest.java index cc05c8d28..b30c09211 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationsTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationsTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/RoleTest.java b/src/test/java/com/gooddata/project/RoleTest.java index 434c7572a..727ea63d8 100644 --- a/src/test/java/com/gooddata/project/RoleTest.java +++ b/src/test/java/com/gooddata/project/RoleTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/RolesTest.java b/src/test/java/com/gooddata/project/RolesTest.java index f85d11893..b93225cbc 100644 --- a/src/test/java/com/gooddata/project/RolesTest.java +++ b/src/test/java/com/gooddata/project/RolesTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/UserTest.java b/src/test/java/com/gooddata/project/UserTest.java index 70b1a7c17..e23d65459 100644 --- a/src/test/java/com/gooddata/project/UserTest.java +++ b/src/test/java/com/gooddata/project/UserTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/project/UsersTest.java b/src/test/java/com/gooddata/project/UsersTest.java index 5f7a6924e..fbd820df8 100644 --- a/src/test/java/com/gooddata/project/UsersTest.java +++ b/src/test/java/com/gooddata/project/UsersTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.project; diff --git a/src/test/java/com/gooddata/report/ExecuteDefinitionTest.java b/src/test/java/com/gooddata/report/ExecuteDefinitionTest.java index 804bf922c..2d3e6e5f4 100644 --- a/src/test/java/com/gooddata/report/ExecuteDefinitionTest.java +++ b/src/test/java/com/gooddata/report/ExecuteDefinitionTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/test/java/com/gooddata/report/ExecuteReportTest.java b/src/test/java/com/gooddata/report/ExecuteReportTest.java index ed723afdd..493a4b667 100644 --- a/src/test/java/com/gooddata/report/ExecuteReportTest.java +++ b/src/test/java/com/gooddata/report/ExecuteReportTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/test/java/com/gooddata/report/ReportServiceIT.java b/src/test/java/com/gooddata/report/ReportServiceIT.java index 4bc5bc5b9..1498176c0 100644 --- a/src/test/java/com/gooddata/report/ReportServiceIT.java +++ b/src/test/java/com/gooddata/report/ReportServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.report; diff --git a/src/test/java/com/gooddata/util/BooleanDeserializerTest.java b/src/test/java/com/gooddata/util/BooleanDeserializerTest.java index f03a0b757..f723e2345 100644 --- a/src/test/java/com/gooddata/util/BooleanDeserializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanDeserializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/BooleanIntegerClass.java b/src/test/java/com/gooddata/util/BooleanIntegerClass.java index e54b87da7..507817d9c 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerClass.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerClass.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java b/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java index 97576577a..7db295878 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/BooleanStringClass.java b/src/test/java/com/gooddata/util/BooleanStringClass.java index ba8085fb2..f8659c43e 100644 --- a/src/test/java/com/gooddata/util/BooleanStringClass.java +++ b/src/test/java/com/gooddata/util/BooleanStringClass.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java b/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java index 7fac2055d..c4a2ce598 100644 --- a/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/GDDateClass.java b/src/test/java/com/gooddata/util/GDDateClass.java index 983b94f49..c1829de8e 100644 --- a/src/test/java/com/gooddata/util/GDDateClass.java +++ b/src/test/java/com/gooddata/util/GDDateClass.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java index 919565890..0cac3698b 100644 --- a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/GDDateSerializerTest.java b/src/test/java/com/gooddata/util/GDDateSerializerTest.java index 1667c61cf..5aa2e1537 100644 --- a/src/test/java/com/gooddata/util/GDDateSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateSerializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/GDDateTimeClass.java b/src/test/java/com/gooddata/util/GDDateTimeClass.java index 80dc20bbc..b3b5de704 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeClass.java +++ b/src/test/java/com/gooddata/util/GDDateTimeClass.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java index ce30473c5..4f57321e0 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java b/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java index 9b87bb730..6321c0689 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/ISODateClass.java b/src/test/java/com/gooddata/util/ISODateClass.java index e9c6eb1f4..c6be9f531 100644 --- a/src/test/java/com/gooddata/util/ISODateClass.java +++ b/src/test/java/com/gooddata/util/ISODateClass.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java b/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java index 21f4e24d7..34af7035b 100644 --- a/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java +++ b/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java b/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java index c73593291..eb6ef0c72 100644 --- a/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java +++ b/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/ResourceUtils.java b/src/test/java/com/gooddata/util/ResourceUtils.java index 287766864..a5b96cdbe 100644 --- a/src/test/java/com/gooddata/util/ResourceUtils.java +++ b/src/test/java/com/gooddata/util/ResourceUtils.java @@ -1,7 +1,8 @@ -/* - * Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ - package com.gooddata.util; import static com.gooddata.util.Validate.notEmpty; diff --git a/src/test/java/com/gooddata/util/TagsDeserializerTest.java b/src/test/java/com/gooddata/util/TagsDeserializerTest.java index a801bad2f..b18b4e78c 100644 --- a/src/test/java/com/gooddata/util/TagsDeserializerTest.java +++ b/src/test/java/com/gooddata/util/TagsDeserializerTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/TagsSerializerTest.java b/src/test/java/com/gooddata/util/TagsSerializerTest.java index d0cb5d651..2541fbabb 100644 --- a/src/test/java/com/gooddata/util/TagsSerializerTest.java +++ b/src/test/java/com/gooddata/util/TagsSerializerTest.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/TagsTestClass.java b/src/test/java/com/gooddata/util/TagsTestClass.java index 1f74a7b1c..64774dfda 100644 --- a/src/test/java/com/gooddata/util/TagsTestClass.java +++ b/src/test/java/com/gooddata/util/TagsTestClass.java @@ -1,5 +1,7 @@ -/* - * Copyright (C) 2007-2016, GoodData(R) Corporation. All rights reserved. +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/util/ZipHelperTest.java b/src/test/java/com/gooddata/util/ZipHelperTest.java index 3cf1e8441..45efdd04e 100644 --- a/src/test/java/com/gooddata/util/ZipHelperTest.java +++ b/src/test/java/com/gooddata/util/ZipHelperTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseIdMatcher.java b/src/test/java/com/gooddata/warehouse/WarehouseIdMatcher.java index 7c5e17d51..65b490be0 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseIdMatcher.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseIdMatcher.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java index b1e13c4b0..315c056a5 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java index c3df7a56e..ee670dde7 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java index f23372040..5bdfdf3b4 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTest.java index 065512b39..bd77c543a 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java index 1bcf5be0f..396397d60 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java index 3c2d9bab6..64c2498fe 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; diff --git a/src/test/java/com/gooddata/warehouse/WarehousesTest.java b/src/test/java/com/gooddata/warehouse/WarehousesTest.java index b18c5244c..f51775667 100644 --- a/src/test/java/com/gooddata/warehouse/WarehousesTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehousesTest.java @@ -1,5 +1,7 @@ /** * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.warehouse; From 2746191dc5cad5fe3f63cd3953d495dfb3977b45 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Fri, 16 Sep 2016 07:42:22 +0200 Subject: [PATCH 163/934] make FeatureFlags serializable --- .../gooddata/featureflag/FeatureFlags.java | 43 +++++++++++++++---- .../featureflag/FeatureFlagsTest.java | 21 +++++++++ 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlags.java b/src/main/java/com/gooddata/featureflag/FeatureFlags.java index 57ef25a04..6b1331ff9 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlags.java @@ -5,6 +5,7 @@ */ package com.gooddata.featureflag; +import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -14,8 +15,12 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; import static com.gooddata.util.Validate.notEmpty; +import static java.util.stream.Collectors.toMap; import static org.springframework.util.Assert.notNull; @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @@ -28,13 +33,36 @@ public class FeatureFlags implements Iterable { private final List featureFlags = new LinkedList<>(); - /* protected helper method for JSON deserialization */ + /** + * Adds the feature flag of given name and given value. + * + * @param name feature flag name + * @param enabled feature flag value (enabled / disabled) + */ @JsonAnySetter - protected void addFlag(final String name, final boolean enabled) { + public void addFlag(final String name, final boolean enabled) { notNull(name); featureFlags.add(new FeatureFlag(name, enabled)); } + /** + * Removes flag of given name. + * + * @param flagName name of the flag to remove + */ + public void removeFlag(final String flagName) { + findFlag(flagName).ifPresent(featureFlags::remove); + } + + /** + * Converts feature flags to map where flags' names are the keys and values are flags' enabled property + * @return feature flags as map + */ + @JsonAnyGetter + private Map asMap() { + return featureFlags.stream().collect(toMap(FeatureFlag::getName, FeatureFlag::isEnabled)); + } + @Override public Iterator iterator() { return featureFlags.iterator(); @@ -48,12 +76,11 @@ public Iterator iterator() { */ public boolean isEnabled(final String flagName) { notEmpty(flagName, "flagName"); - for (final FeatureFlag flag : featureFlags) { - if (flagName.equalsIgnoreCase(flag.getName())) { - return flag.isEnabled(); - } - } - return false; + return findFlag(flagName).map(FeatureFlag::isEnabled).orElse(false); + } + + private Optional findFlag(final String flagName) { + return featureFlags.stream().filter(f -> flagName.equalsIgnoreCase(f.getName())).findAny(); } @Override diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java index 31a311adb..9f035fc9f 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java @@ -5,6 +5,7 @@ */ package com.gooddata.featureflag; +import com.gooddata.JsonMatchers; import org.testng.annotations.Test; import static com.gooddata.util.ResourceUtils.readObjectFromResource; @@ -12,6 +13,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.isOneOf; +import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; public class FeatureFlagsTest { @@ -26,6 +28,15 @@ public void testDeserialize() { new FeatureFlag("testFeature2", false))); } + @Test + public void testSerialize() { + final FeatureFlags flags = new FeatureFlags(); + flags.addFlag("testFeature", true); + flags.addFlag("testFeature2", false); + + assertThat(flags, JsonMatchers.serializesToJson("/featureflag/featureFlags.json")); + } + @Test public void shouldIterateThroughFlagsInForeach() throws Exception { final FeatureFlags flags = readObjectFromResource(getClass(), "/featureflag/featureFlags.json", FeatureFlags.class); @@ -53,4 +64,14 @@ public void whenNullNameThenIsEnabledShouldThrow() throws Exception { flags.isEnabled(null); } + @Test + public void testRemoveFlag() throws Exception { + final FeatureFlags flags = new FeatureFlags(); + flags.addFlag("enabledFlag", true); + + flags.removeFlag("enabledFlag"); + + assertFalse(flags.isEnabled("enabledFlag")); + assertFalse(flags.iterator().hasNext()); + } } From 5073d431f3d14fe5ddfa0ab0fb3e207096aba003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C5=A0tumpf?= Date: Thu, 15 Sep 2016 10:49:13 +0200 Subject: [PATCH 164/934] make Page implementations idempotent --- .../com/gooddata/collections/PageRequest.java | 4 ++-- .../java/com/gooddata/collections/UriPage.java | 2 +- .../gooddata/collections/PageRequestTest.java | 10 ++++++++++ .../com/gooddata/collections/UriPageTest.java | 16 ++++++++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gooddata/collections/PageRequest.java b/src/main/java/com/gooddata/collections/PageRequest.java index b65be4c45..474408f13 100644 --- a/src/main/java/com/gooddata/collections/PageRequest.java +++ b/src/main/java/com/gooddata/collections/PageRequest.java @@ -58,9 +58,9 @@ public URI getPageUri(final UriComponentsBuilder uriBuilder) { @Override public UriComponentsBuilder updateWithPageParams(final UriComponentsBuilder uriBuilder) { if (offset != null) { - uriBuilder.queryParam("offset", offset); + uriBuilder.replaceQueryParam("offset", offset); } - uriBuilder.queryParam("limit", limit); + uriBuilder.replaceQueryParam("limit", limit); return uriBuilder; } diff --git a/src/main/java/com/gooddata/collections/UriPage.java b/src/main/java/com/gooddata/collections/UriPage.java index c9d41b96b..139b75bbd 100644 --- a/src/main/java/com/gooddata/collections/UriPage.java +++ b/src/main/java/com/gooddata/collections/UriPage.java @@ -52,7 +52,7 @@ public URI getPageUri(final UriComponentsBuilder uriBuilder) { public UriComponentsBuilder updateWithPageParams(final UriComponentsBuilder uriBuilder) { notNull(uriBuilder, "uriBuilder"); for (Entry> entry : pageUri.getQueryParams().entrySet()) { - uriBuilder.queryParam(entry.getKey(), entry.getValue().toArray()); + uriBuilder.replaceQueryParam(entry.getKey(), entry.getValue().toArray()); } return uriBuilder; } diff --git a/src/test/java/com/gooddata/collections/PageRequestTest.java b/src/test/java/com/gooddata/collections/PageRequestTest.java index eabd27a9e..8667fe972 100644 --- a/src/test/java/com/gooddata/collections/PageRequestTest.java +++ b/src/test/java/com/gooddata/collections/PageRequestTest.java @@ -49,4 +49,14 @@ public void testUpdateWithPageParamsWithStringOffset() throws Exception { final String pageUri = pageRequest.updateWithPageParams(uriBuilder).build().toUriString(); assertThat(pageUri, is("test_uri/{test}?offset=17&limit=10")); } + + @Test + public void testUpdateWithPageParamsIdempotency() throws Exception { + final PageRequest pageRequest = new PageRequest(12, 10); + final UriComponentsBuilder uriBuilder1 = UriComponentsBuilder.fromUriString("test_uri/{test}"); + final UriComponentsBuilder uriBuilder2 = pageRequest.updateWithPageParams(uriBuilder1); + final UriComponentsBuilder uriBuilder3 = pageRequest.updateWithPageParams(uriBuilder2); + final String pageUri = uriBuilder3.build().toUriString(); + assertThat(pageUri, is("test_uri/{test}?offset=12&limit=10")); + } } diff --git a/src/test/java/com/gooddata/collections/UriPageTest.java b/src/test/java/com/gooddata/collections/UriPageTest.java index 42159516a..b0080510a 100644 --- a/src/test/java/com/gooddata/collections/UriPageTest.java +++ b/src/test/java/com/gooddata/collections/UriPageTest.java @@ -47,4 +47,20 @@ public void test() throws Exception { assertThat(components.getQueryParams(), hasEntry("limit", singletonList("10"))); } + @Test + public void testIdempotency() throws Exception { + final UriPage uri = new UriPage("uri?offset=god&limit=10"); + final UriComponentsBuilder builder = fromUriString("/this/is/{template}").query("other=false"); + + uri.updateWithPageParams(builder); + uri.updateWithPageParams(builder); + uri.updateWithPageParams(builder); + + final UriComponents components = builder.build(); + assertThat(components, is(notNullValue())); + assertThat(components.getPath(), is("/this/is/{template}")); + assertThat(components.getQueryParams(), hasEntry("other", singletonList("false"))); + assertThat(components.getQueryParams(), hasEntry("offset", singletonList("god"))); + assertThat(components.getQueryParams(), hasEntry("limit", singletonList("10"))); + } } From 7a021c9ea878730e68dd2f5d28d71c429be3c9c1 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 22 Sep 2016 14:23:47 +0200 Subject: [PATCH 165/934] [maven-release-plugin] prepare release gooddata-java-2.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d3bf82b7c..4649e57ab 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.0.0-SNAPSHOT + 2.0.0 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 4e9a05fb46f5bd72508c2507c8516340cd46e760 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 22 Sep 2016 14:23:48 +0200 Subject: [PATCH 166/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4649e57ab..662c317ec 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.0.0 + 2.0.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 19f384ed974716feb1bf8501009f0802bae1e804 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 22 Sep 2016 14:37:42 +0200 Subject: [PATCH 167/934] fix readme for version 2.0 --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 662385eb8..e49b65e82 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ The *GoodData Java SDK* encapsulates the REST API provided by the [GoodData](http://www.gooddata.com) platform. The first version was implemented during the [All Data Hackathon](http://hackathon.gooddata.com) April 10 - 11 2014 and currently the SDK is transitioned to be an official GoodData project. +GoodData Corporation provides this software "as-is" under conditions +specified in the [license](LICENSE.txt). ## Usage @@ -28,9 +30,9 @@ See [releases page](https://github.com/martiner/gooddata-java/releases) for info The *GoodData Java SDK* uses: * the [GoodData HTTP client](https://github.com/gooddata/gooddata-http-client) version 0.9.3 or later * the *Apache HTTP Client* version 4.3 or later (for white-labeled domains at least version 4.3.2 is required) -* the *Spring Framework* version 3.x -* the *Jackson JSON Processor* version 2.7.0 (*GoodData Java SDK* version 0.x requires version 1.9) -* the *Java Development Kit (JDK)* version 7 or later +* the *Spring Framework* version 4.3.* +* the *Jackson JSON Processor* version 2.8.* +* the *Java Development Kit (JDK)* version 8 or later ## License The *GoodData Java SDK* is free and open-source software under [BSD License](LICENSE.txt). From fdac948bad3b065f37c0f37d631c044203abedd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 22 Sep 2016 13:33:29 +0200 Subject: [PATCH 168/934] Add reschedule parameter to schedules --- .../gooddata/dataload/processes/Schedule.java | 30 ++++++++++ .../dataload/processes/ProcessServiceAT.java | 58 ++++++++++++++----- .../dataload/processes/ScheduleTest.java | 29 ++++++++++ .../processes/schedule-input-all-fields.json | 12 ++++ .../dataload/processes/schedule.json | 1 + 5 files changed, 114 insertions(+), 16 deletions(-) create mode 100644 src/test/resources/dataload/processes/schedule-input-all-fields.json diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index 5f1dc32d9..db47aaeb3 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -16,6 +16,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; +import org.joda.time.Duration; import org.springframework.web.util.UriTemplate; import java.util.Collections; @@ -47,6 +48,7 @@ public class Schedule { private String state; private String cron; private String timezone; + private Integer reschedule; private final DateTime nextExecutionTime; private final int consecutiveFailedExecutionCount; private final Map params; @@ -75,6 +77,7 @@ private Schedule(@JsonProperty("type") final String type, @JsonProperty("nextExecutionTime") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime nextExecutionTime, @JsonProperty("consecutiveFailedExecutionCount") final int consecutiveFailedExecutionCount, @JsonProperty("params") final Map params, + @JsonProperty("reschedule") final Integer reschedule, @JsonProperty("links") final Map links) { this.type = type; this.state = state; @@ -83,6 +86,7 @@ private Schedule(@JsonProperty("type") final String type, this.nextExecutionTime = nextExecutionTime; this.consecutiveFailedExecutionCount = consecutiveFailedExecutionCount; this.params = params; + this.reschedule = reschedule; this.links = links; } @@ -160,6 +164,32 @@ public void setTimezone(final String timezone) { this.timezone = timezone; } + /** + * Duration after a failed execution of the schedule is executed again + * @return reschedule duration in minutes + */ + @JsonProperty("reschedule") + public Integer getRescheduleInMinutes() { + return reschedule; + } + + /** + * Duration after a failed execution of the schedule is executed again + * @return reschedule duration in minutes + */ + @JsonIgnore + public Duration getReschedule() { + return reschedule != null ? Duration.standardMinutes(getRescheduleInMinutes()) : null; + } + + /** + * Duration after a failed execution of the schedule is executed again + * @param reschedule this duration should not be too low, because it can be rejected by REST API (e.g. 15 minutes or more) + */ + public void setReschedule(Duration reschedule) { + this.reschedule = notNull(reschedule, "reschedule").toStandardMinutes().getMinutes(); + } + @JsonIgnore public void setTimezone(final DateTimeZone timezone) { this.timezone = notNull(timezone, "timezone").getID(); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index 6b16e481b..c0ba9f86f 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -9,6 +9,7 @@ import com.gooddata.collections.PageableList; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; +import org.joda.time.Duration; import org.springframework.core.io.ClassPathResource; import org.testng.annotations.Test; @@ -18,7 +19,8 @@ import java.io.IOException; import java.util.Collection; -import static com.gooddata.dataload.processes.ProcessIdMatcher.hasSameIdAs; +import static com.gooddata.dataload.processes.ProcessIdMatcher.hasSameProcessIdAs; +import static com.gooddata.dataload.processes.ScheduleIdMatcher.hasSameScheduleIdAs; import static java.nio.file.Files.createTempDirectory; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.allOf; @@ -39,6 +41,7 @@ public class ProcessServiceAT extends AbstractGoodDataAT { private DataloadProcess process; private DataloadProcess processAppstore; + private Schedule schedule; @Test(groups = "process", dependsOnGroups = "project") public void createProcess() throws Exception { @@ -48,23 +51,39 @@ public void createProcess() throws Exception { copy("invalid.grf", dir); copy("workspace.prm", dir); process = gd.getProcessService().createProcess(project, new DataloadProcess(title, ProcessType.GRAPH), dir); - final Schedule schedule = gd.getProcessService().createSchedule(project, new Schedule(process, "sdktest.grf", "0 0 * * *")); + } finally { + FileUtils.deleteDirectory(dir); + } + } - assertThat(schedule, notNullValue()); - assertThat(schedule.getExecutable(), is("sdktest.grf")); + @Test(groups = "process", dependsOnMethods = "createProcess") + public void createSchedule() { + schedule = gd.getProcessService().createSchedule(project, new Schedule(process, "sdktest.grf", "0 0 * * *")); + schedule.setReschedule(Duration.standardMinutes(15)); - final PageableList collection = gd.getProcessService().listSchedules(project); - assertThat(collection, notNullValue()); - assertThat(collection, hasSize(1)); - assertThat(collection.getNextPage(), nullValue()); + assertThat(schedule, notNullValue()); + assertThat(schedule.getExecutable(), is("sdktest.grf")); + assertThat(schedule.getRescheduleInMinutes(), is(15)); + } - schedule.setState(ScheduleState.DISABLED); - assertThat(gd.getProcessService().updateSchedule(project, schedule).isEnabled(), is(false)); + @Test(groups = "process", dependsOnMethods = "createSchedule") + public void listSchedules() { + final PageableList collection = gd.getProcessService().listSchedules(project); - gd.getProcessService().removeSchedule(schedule); - } finally { - FileUtils.deleteDirectory(dir); - } + assertThat(collection, notNullValue()); + assertThat(collection, hasSize(1)); + assertThat(collection.getNextPage(), nullValue()); + } + + @Test(groups = "process", dependsOnMethods = "createSchedule") + public void updateSchedule() { + schedule.setState(ScheduleState.DISABLED); + schedule.setReschedule(Duration.standardMinutes(26)); + + schedule = gd.getProcessService().updateSchedule(project, schedule); + + assertThat(schedule.isEnabled(), is(false)); + assertThat(gd.getProcessService().updateSchedule(project, schedule).getRescheduleInMinutes(), is(26)); } @Test(groups = "process", dependsOnGroups = "project") @@ -94,7 +113,7 @@ public void copy(final String file, final File dir) throws IOException { @Test(groups = "process", dependsOnMethods = "createProcess") public void processes() { final Collection processes = gd.getProcessService().listProcesses(project); - assertThat(processes, hasItem(hasSameIdAs(process))); + assertThat(processes, hasItem(hasSameProcessIdAs(process))); } @Test(groups = "process", dependsOnMethods = "createProcess") @@ -119,7 +138,14 @@ public void removeProcess() throws Exception { gd.getProcessService().removeProcess(process); gd.getProcessService().removeProcess(processAppstore); final Collection processes = gd.getProcessService().listProcesses(project); - assertThat(processes, not(hasItems(hasSameIdAs(process), hasSameIdAs(processAppstore)))); + assertThat(processes, not(hasItems(hasSameProcessIdAs(process), hasSameProcessIdAs(processAppstore)))); + } + + @Test(dependsOnGroups = "process") + public void removeSchedule() { + gd.getProcessService().removeSchedule(schedule); + final Collection schedules = gd.getProcessService().listSchedules(project); + assertThat(schedules, not(hasItems(hasSameScheduleIdAs(schedule)))); } } diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index 2efa787e4..41d047eb2 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; +import org.joda.time.Duration; import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -19,6 +20,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.notNullValue; @@ -56,6 +58,7 @@ public void testDeserialization() throws Exception { assertThat(schedule.isEnabled(), is(true)); assertThat(schedule.getCron(), is("0 0 * * *")); assertThat(schedule.getTimezone(), is("UTC")); + assertThat(schedule.getRescheduleInMinutes(), is(26)); assertThat(schedule.getConsecutiveFailedExecutionCount(), is(0)); assertThat(schedule.getProcessId(), is("process_id")); assertThat(schedule.getExecutable(), is(EXECUTABLE)); @@ -69,6 +72,14 @@ public void testSerialization() { assertThat(schedule, serializesToJson("/dataload/processes/schedule-input.json")); } + @Test + public void testSerializationWithAllFields() { + final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); + schedule.setReschedule(Duration.standardMinutes(26)); + + assertThat(schedule, serializesToJson("/dataload/processes/schedule-input-all-fields.json")); + } + @DataProvider(name = "scheduleParams") public Object[][] scheduleParams() { return new Object[][] { @@ -147,4 +158,22 @@ public void testCustomParams() { assertThat(schedule.getParams().size(), is(originalParamsSize)); } + @Test + public void testReschedule() { + final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); + final Duration duration = Duration.standardMinutes(26); + schedule.setReschedule(duration); + + assertThat(schedule.getRescheduleInMinutes(), is(equalTo(26))); + assertThat(schedule.getReschedule(), is(equalTo(duration))); + } + + @Test + public void testRescheduleTooLowDuration() { + final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); + schedule.setReschedule(Duration.standardSeconds(26)); + + assertThat(schedule.getRescheduleInMinutes(), is(equalTo(0))); + assertThat(schedule.getReschedule(), is(equalTo(Duration.ZERO))); + } } \ No newline at end of file diff --git a/src/test/resources/dataload/processes/schedule-input-all-fields.json b/src/test/resources/dataload/processes/schedule-input-all-fields.json new file mode 100644 index 000000000..b93a64f79 --- /dev/null +++ b/src/test/resources/dataload/processes/schedule-input-all-fields.json @@ -0,0 +1,12 @@ +{ + "schedule": { + "type": "MSETL", + "state": "ENABLED", + "reschedule" : 26, + "params": { + "PROCESS_ID": "process_id", + "EXECUTABLE": "Twitter/graph/twitter.grf" + }, + "cron": "0 0 * * *" + } +} \ No newline at end of file diff --git a/src/test/resources/dataload/processes/schedule.json b/src/test/resources/dataload/processes/schedule.json index f26f971f9..ff4f817fb 100644 --- a/src/test/resources/dataload/processes/schedule.json +++ b/src/test/resources/dataload/processes/schedule.json @@ -8,6 +8,7 @@ }, "cron": "0 0 * * *", "timezone": "UTC", + "reschedule" : 26, "nextExecutionTime": "2013-11-16T00:00:00.000Z", "lastSuccessful": { "execution": { From ba4e6992566026dbbdffa2df0ddb4a13c56d89e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 22 Sep 2016 16:20:39 +0200 Subject: [PATCH 169/934] Separate schedule tests in ProcessServiceAT --- .../dataload/processes/ScheduleIdMatcher.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/test/java/com/gooddata/dataload/processes/ScheduleIdMatcher.java diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleIdMatcher.java b/src/test/java/com/gooddata/dataload/processes/ScheduleIdMatcher.java new file mode 100644 index 000000000..ab1d04d77 --- /dev/null +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleIdMatcher.java @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload.processes; + +import org.hamcrest.Description; +import org.hamcrest.TypeSafeMatcher; + +class ScheduleIdMatcher extends TypeSafeMatcher { + private final Schedule schedule; + + public ScheduleIdMatcher(final Schedule schedule) { + this.schedule = schedule; + } + + @Override + public void describeTo(final Description description) { + description.appendText("Schedule id " + schedule.getId()); + } + + public static ScheduleIdMatcher hasSameScheduleIdAs(final Schedule schedule) { + return new ScheduleIdMatcher(schedule); + } + + @Override + protected boolean matchesSafely(Schedule item) { + return schedule.getId().equals(item.getId()); + } +} \ No newline at end of file From 4629e7721916e366964483a8c33d9b45c1947cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 22 Sep 2016 17:23:06 +0200 Subject: [PATCH 170/934] Renamed hasSameIdAs in ProcessIdMatcher to hasSameProcessIdAs --- .../java/com/gooddata/dataload/processes/ProcessIdMatcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java b/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java index 737a723e4..d4210acf7 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessIdMatcher.java @@ -21,7 +21,7 @@ public void describeTo(final Description description) { description.appendText("Process id " + process.getId()); } - public static ProcessIdMatcher hasSameIdAs(final DataloadProcess process) { + public static ProcessIdMatcher hasSameProcessIdAs(final DataloadProcess process) { return new ProcessIdMatcher(process); } From 437a6820a28e220f4ff42ab089154b7015b8d8fc Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 27 Sep 2016 22:41:34 +0200 Subject: [PATCH 171/934] chg: change wording in readme --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index e49b65e82..bca8c0543 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,9 @@ The *GoodData Java SDK* encapsulates the REST API provided by the [GoodData](http://www.gooddata.com) platform. The first version was implemented during the [All Data Hackathon](http://hackathon.gooddata.com) April 10 - 11 2014 and currently the SDK is transitioned to be an official GoodData project. -GoodData Corporation provides this software "as-is" under conditions -specified in the [license](LICENSE.txt). ## Usage -See [Wiki](https://github.com/martiner/gooddata-java/wiki) for -[Upgrading Guide](https://github.com/martiner/gooddata-java/wiki/Upgrading-GoodData-Java-SDK), -[Code Examples](https://github.com/martiner/gooddata-java/wiki/Code-Examples) -and [Extensibility How-To](https://github.com/martiner/gooddata-java/wiki/Extending-GoodData-Java-SDK). - The *GoodData Java SDK* is available in Maven Central Repository, to use it from Maven add to `pom.xml`: ```xml @@ -22,8 +15,13 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from 2.0.0 ``` +See [releases page](https://github.com/martiner/gooddata-java/releases) for information about versions and notable changes, +the [Upgrading Guide](https://github.com/martiner/gooddata-java/wiki/Upgrading-GoodData-Java-SDK) will navigate you +through changes between major versions. -See [releases page](https://github.com/martiner/gooddata-java/releases) for information about versions and notable changes. +See [Wiki](https://github.com/martiner/gooddata-java/wiki) for +[Code Examples](https://github.com/martiner/gooddata-java/wiki/Code-Examples) +and [Extensibility How-To](https://github.com/martiner/gooddata-java/wiki/Extending-GoodData-Java-SDK). ### Dependencies @@ -34,9 +32,11 @@ The *GoodData Java SDK* uses: * the *Jackson JSON Processor* version 2.8.* * the *Java Development Kit (JDK)* version 8 or later -## License -The *GoodData Java SDK* is free and open-source software under [BSD License](LICENSE.txt). +## License and conditions + +The *GoodData Java SDK* is free and open-source software provided by GoodData Corporation "as-is" under [BSD License](LICENSE.txt). + +## Contribute -##Contribute -Missing functionality? Found a BUG? Please create an [issue](https://github.com/martiner/gooddata-java/issues) -or simply [contribute your code](CONTRIBUTING.md). +Found a bug? Please create an [issue](https://github.com/martiner/gooddata-java/issues). Missing functionality? +[Contribute your code](CONTRIBUTING.md). From 98a5d9cdb1fa2c8119b8512e8c85cae53e6a819a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Sat, 24 Sep 2016 21:52:26 +0200 Subject: [PATCH 172/934] Add creating schedules triggered by different schedules --- .../gooddata/dataload/processes/Schedule.java | 28 ++++++++++++++- .../dataload/processes/ProcessServiceAT.java | 15 ++++++-- .../dataload/processes/ScheduleTest.java | 35 +++++++++++++++++++ .../processes/schedule-triggered-input.json | 11 ++++++ .../processes/schedule-triggered.json | 18 ++++++++++ 5 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 src/test/resources/dataload/processes/schedule-triggered-input.json create mode 100644 src/test/resources/dataload/processes/schedule-triggered.json diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index db47aaeb3..e83bf454e 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -49,17 +49,33 @@ public class Schedule { private String cron; private String timezone; private Integer reschedule; + private String triggerScheduleId; private final DateTime nextExecutionTime; private final int consecutiveFailedExecutionCount; private final Map params; private final Map links; public Schedule(final DataloadProcess process, final String executable, final String cron) { + this(process, executable); + this.cron = notEmpty(cron, "cron"); + } + + /** + * Creates schedule, which is triggered by execution of different schedule + * @param process process to create schedule for + * @param executable executable to be scheduled for execution + * @param triggerSchedule schedule, which will trigger created schedule + */ + public Schedule(final DataloadProcess process, final String executable, final Schedule triggerSchedule) { + this(process, executable); + this.triggerScheduleId = notEmpty(notNull(triggerSchedule, "triggerSchedule").getId(), "triggerSchedule ID"); + } + + private Schedule(final DataloadProcess process, final String executable) { notNull(process, "process"); this.type = MSETL_TYPE; this.state = ScheduleState.ENABLED.name(); - this.cron = notEmpty(cron, "cron"); this.params = new HashMap<>(); this.params.put(PROCESS_ID, process.getId()); process.validateExecutable(executable); @@ -78,6 +94,7 @@ private Schedule(@JsonProperty("type") final String type, @JsonProperty("consecutiveFailedExecutionCount") final int consecutiveFailedExecutionCount, @JsonProperty("params") final Map params, @JsonProperty("reschedule") final Integer reschedule, + @JsonProperty("triggerScheduleId") final String triggerScheduleId, @JsonProperty("links") final Map links) { this.type = type; this.state = state; @@ -87,6 +104,7 @@ private Schedule(@JsonProperty("type") final String type, this.consecutiveFailedExecutionCount = consecutiveFailedExecutionCount; this.params = params; this.reschedule = reschedule; + this.triggerScheduleId = triggerScheduleId; this.links = links; } @@ -190,6 +208,14 @@ public void setReschedule(Duration reschedule) { this.reschedule = notNull(reschedule, "reschedule").toStandardMinutes().getMinutes(); } + public String getTriggerScheduleId() { + return triggerScheduleId; + } + + public void setTriggerScheduleId(final String triggerScheduleId) { + this.triggerScheduleId = triggerScheduleId; + } + @JsonIgnore public void setTimezone(final DateTimeZone timezone) { this.timezone = notNull(timezone, "timezone").getID(); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index c0ba9f86f..4fbe7322f 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -42,6 +42,7 @@ public class ProcessServiceAT extends AbstractGoodDataAT { private DataloadProcess process; private DataloadProcess processAppstore; private Schedule schedule; + private Schedule triggeredSchedule; @Test(groups = "process", dependsOnGroups = "project") public void createProcess() throws Exception { @@ -67,11 +68,20 @@ public void createSchedule() { } @Test(groups = "process", dependsOnMethods = "createSchedule") + public void createTriggeredSchedule() { + triggeredSchedule = gd.getProcessService().createSchedule(project, new Schedule(process, "sdktest.grf", schedule)); + + assertThat(triggeredSchedule, notNullValue()); + assertThat(triggeredSchedule.getExecutable(), is("sdktest.grf")); + assertThat(triggeredSchedule.getTriggerScheduleId(), is(schedule.getId())); + } + + @Test(groups = "process", dependsOnMethods = {"createSchedule", "createTriggeredSchedule"}) public void listSchedules() { final PageableList collection = gd.getProcessService().listSchedules(project); assertThat(collection, notNullValue()); - assertThat(collection, hasSize(1)); + assertThat(collection, hasSize(2)); assertThat(collection.getNextPage(), nullValue()); } @@ -144,8 +154,9 @@ public void removeProcess() throws Exception { @Test(dependsOnGroups = "process") public void removeSchedule() { gd.getProcessService().removeSchedule(schedule); + gd.getProcessService().removeSchedule(triggeredSchedule); final Collection schedules = gd.getProcessService().listSchedules(project); - assertThat(schedules, not(hasItems(hasSameScheduleIdAs(schedule)))); + assertThat(schedules, not(hasItems(hasSameScheduleIdAs(schedule), hasSameScheduleIdAs(triggeredSchedule)))); } } diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index 41d047eb2..0100fb469 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -37,12 +37,16 @@ public class ScheduleTest { @Mock private DataloadProcess process; + @Mock + private Schedule triggerSchedule; + @BeforeMethod public void setUp() throws Exception { MockitoAnnotations.initMocks(this); when(process.getExecutables()).thenReturn(Collections.singleton(EXECUTABLE)); when(process.getId()).thenReturn("process_id"); + when(triggerSchedule.getId()).thenReturn("schedule_id"); doThrow(new IllegalArgumentException("wrong executable")).when(process).validateExecutable(Matchers.argThat(not(is(EXECUTABLE)))); } @@ -66,12 +70,37 @@ public void testDeserialization() throws Exception { assertThat(schedule.getUri(), is("/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID")); } + @Test + public void testTriggeredScheduleDeserialization() throws Exception { + final Schedule schedule = new ObjectMapper() + .readValue(getClass().getResourceAsStream("/dataload/processes/schedule-triggered.json"), Schedule.class); + + assertThat(schedule, is(notNullValue())); + assertThat(schedule.getId(), is("SCHEDULE_ID")); + assertThat(schedule.getType(), is("MSETL")); + assertThat(schedule.getState(), is("DISABLED")); + assertThat(schedule.isEnabled(), is(false)); + assertThat(schedule.getTimezone(), is("UTC")); + assertThat(schedule.getConsecutiveFailedExecutionCount(), is(0)); + assertThat(schedule.getProcessId(), is("process_id")); + assertThat(schedule.getExecutable(), is(EXECUTABLE)); + assertThat(schedule.getNextExecutionTime(), is(DateTime.parse("2013-11-16T00:00:00.000Z"))); + assertThat(schedule.getUri(), is("/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID")); + assertThat(schedule.getTriggerScheduleId(), is("trigger_schedule_id")); + } + @Test public void testSerialization() { final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); assertThat(schedule, serializesToJson("/dataload/processes/schedule-input.json")); } + @Test + public void testTriggeredScheduleSerialization() { + final Schedule schedule = new Schedule(process, EXECUTABLE, triggerSchedule); + assertThat(schedule, serializesToJson("/dataload/processes/schedule-triggered-input.json")); + } + @Test public void testSerializationWithAllFields() { final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); @@ -176,4 +205,10 @@ public void testRescheduleTooLowDuration() { assertThat(schedule.getRescheduleInMinutes(), is(equalTo(0))); assertThat(schedule.getReschedule(), is(equalTo(Duration.ZERO))); } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testCreateTriggeredScheduleWithNotCreatedSchedule() { + final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); + new Schedule(process, EXECUTABLE, schedule); + } } \ No newline at end of file diff --git a/src/test/resources/dataload/processes/schedule-triggered-input.json b/src/test/resources/dataload/processes/schedule-triggered-input.json new file mode 100644 index 000000000..fed9c9396 --- /dev/null +++ b/src/test/resources/dataload/processes/schedule-triggered-input.json @@ -0,0 +1,11 @@ +{ + "schedule": { + "type": "MSETL", + "state": "ENABLED", + "params": { + "PROCESS_ID": "process_id", + "EXECUTABLE": "Twitter/graph/twitter.grf" + }, + "triggerScheduleId": "schedule_id" + } +} \ No newline at end of file diff --git a/src/test/resources/dataload/processes/schedule-triggered.json b/src/test/resources/dataload/processes/schedule-triggered.json new file mode 100644 index 000000000..819e007b6 --- /dev/null +++ b/src/test/resources/dataload/processes/schedule-triggered.json @@ -0,0 +1,18 @@ +{ + "schedule": { + "type": "MSETL", + "state": "DISABLED", + "params": { + "PROCESS_ID": "process_id", + "EXECUTABLE": "Twitter/graph/twitter.grf" + }, + "triggerScheduleId": "trigger_schedule_id", + "timezone": "UTC", + "nextExecutionTime": "2013-11-16T00:00:00.000Z", + "consecutiveFailedExecutionCount": 0, + "links": { + "self": "/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID", + "executions": "/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID/executions" + } + } +} \ No newline at end of file From be73915cd82d9344cef266c0cec9bf6ffb7d15c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Sat, 24 Sep 2016 22:04:26 +0200 Subject: [PATCH 173/934] Add names for schedules --- .../com/gooddata/dataload/processes/Schedule.java | 11 +++++++++++ .../gooddata/dataload/processes/ProcessServiceAT.java | 1 + .../com/gooddata/dataload/processes/ScheduleTest.java | 2 ++ .../dataload/processes/schedule-input-all-fields.json | 1 + src/test/resources/dataload/processes/schedule.json | 1 + 5 files changed, 16 insertions(+) diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index e83bf454e..7552f02f3 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -50,6 +50,7 @@ public class Schedule { private String timezone; private Integer reschedule; private String triggerScheduleId; + private String name; private final DateTime nextExecutionTime; private final int consecutiveFailedExecutionCount; private final Map params; @@ -95,6 +96,7 @@ private Schedule(@JsonProperty("type") final String type, @JsonProperty("params") final Map params, @JsonProperty("reschedule") final Integer reschedule, @JsonProperty("triggerScheduleId") final String triggerScheduleId, + @JsonProperty("name") final String name, @JsonProperty("links") final Map links) { this.type = type; this.state = state; @@ -105,6 +107,7 @@ private Schedule(@JsonProperty("type") final String type, this.params = params; this.reschedule = reschedule; this.triggerScheduleId = triggerScheduleId; + this.name = name; this.links = links; } @@ -216,6 +219,14 @@ public void setTriggerScheduleId(final String triggerScheduleId) { this.triggerScheduleId = triggerScheduleId; } + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + @JsonIgnore public void setTimezone(final DateTimeZone timezone) { this.timezone = notNull(timezone, "timezone").getID(); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index 4fbe7322f..0a1d00ae9 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -61,6 +61,7 @@ public void createProcess() throws Exception { public void createSchedule() { schedule = gd.getProcessService().createSchedule(project, new Schedule(process, "sdktest.grf", "0 0 * * *")); schedule.setReschedule(Duration.standardMinutes(15)); + schedule.setName("sdkTestSchedule"); assertThat(schedule, notNullValue()); assertThat(schedule.getExecutable(), is("sdktest.grf")); diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index 0100fb469..7a4f89790 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -68,6 +68,7 @@ public void testDeserialization() throws Exception { assertThat(schedule.getExecutable(), is(EXECUTABLE)); assertThat(schedule.getNextExecutionTime(), is(DateTime.parse("2013-11-16T00:00:00.000Z"))); assertThat(schedule.getUri(), is("/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID")); + assertThat(schedule.getName(), is("scheduleName")); } @Test @@ -105,6 +106,7 @@ public void testTriggeredScheduleSerialization() { public void testSerializationWithAllFields() { final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); schedule.setReschedule(Duration.standardMinutes(26)); + schedule.setName("scheduleName"); assertThat(schedule, serializesToJson("/dataload/processes/schedule-input-all-fields.json")); } diff --git a/src/test/resources/dataload/processes/schedule-input-all-fields.json b/src/test/resources/dataload/processes/schedule-input-all-fields.json index b93a64f79..84ce01686 100644 --- a/src/test/resources/dataload/processes/schedule-input-all-fields.json +++ b/src/test/resources/dataload/processes/schedule-input-all-fields.json @@ -1,5 +1,6 @@ { "schedule": { + "name" : "scheduleName", "type": "MSETL", "state": "ENABLED", "reschedule" : 26, diff --git a/src/test/resources/dataload/processes/schedule.json b/src/test/resources/dataload/processes/schedule.json index ff4f817fb..c5a04da10 100644 --- a/src/test/resources/dataload/processes/schedule.json +++ b/src/test/resources/dataload/processes/schedule.json @@ -1,5 +1,6 @@ { "schedule": { + "name" : "scheduleName", "type": "MSETL", "state": "ENABLED", "params": { From 6610c0ac7d6936b240f18af064e54a43e9480345 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 3 Oct 2016 17:29:47 +0200 Subject: [PATCH 174/934] remove redundant wording from validations --- .../com/gooddata/connector/Zendesk4ProcessExecution.java | 4 ++-- .../com/gooddata/dataload/processes/ProcessService.java | 4 ++-- .../java/com/gooddata/dataload/processes/Schedule.java | 6 +++--- src/main/java/com/gooddata/dataset/PullTask.java | 4 ++-- src/main/java/com/gooddata/featureflag/FeatureFlag.java | 2 +- .../java/com/gooddata/featureflag/ProjectFeatureFlag.java | 2 +- src/main/java/com/gooddata/gdc/DataStoreService.java | 5 ++--- src/main/java/com/gooddata/gdc/GdcSardine.java | 2 +- src/main/java/com/gooddata/md/AttributeElements.java | 4 ++-- .../com/gooddata/notification/NotificationService.java | 4 ++-- src/main/java/com/gooddata/notification/ProjectEvent.java | 8 ++++---- src/main/java/com/gooddata/project/Project.java | 4 ++-- src/main/java/com/gooddata/project/ProjectDriver.java | 2 +- src/test/java/com/gooddata/util/ResourceUtils.java | 2 +- 14 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java index 41b887346..4ddb931f7 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java @@ -47,8 +47,8 @@ public Map getStartTimes() { public void setStartTime(final String resource, final DateTime startTime) { - notEmpty(resource, "resource can't be empty"); - notNull(startTime, "startTime can't be null"); + notEmpty(resource, "resource"); + notNull(startTime, "startTime"); startTimes = startTimes == null ? new TreeMap() : startTimes; diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index be1ad91a8..03d088e99 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -115,7 +115,7 @@ public DataloadProcess createProcess(Project project, DataloadProcess process) { public FutureResult createProcessFromAppstore(Project project, DataloadProcess process) { notNull(project, "project"); notNull(process, "process"); - notEmpty(process.getPath(), "process path must not be empty"); + notEmpty(process.getPath(), "process path"); return postProcess(process, getProcessesUri(project), HttpMethod.POST); } @@ -148,7 +148,7 @@ public DataloadProcess updateProcess(Project project, DataloadProcess process, F public FutureResult updateProcessFromAppstore(Project project, DataloadProcess process) { notNull(project, "project"); notNull(process, "process"); - notEmpty(process.getPath(), "process path must not be empty"); + notEmpty(process.getPath(), "process path"); return postProcess(process, getProcessUri(project, process.getId()), HttpMethod.PUT); } diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index 7552f02f3..f14a39586 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -158,13 +158,13 @@ public Map getParams() { } public void addParam(String key, String value) { - notEmpty(key, "param cannot be empty!"); - notNull(value, "value cannot be null!"); + notEmpty(key, "param"); + notNull(value, "value"); params.put(key, value); } public void removeParam(String paramKey) { - notEmpty(paramKey, "paramKey cannot be empty!"); + notEmpty(paramKey, "paramKey!"); params.remove(paramKey); } diff --git a/src/main/java/com/gooddata/dataset/PullTask.java b/src/main/java/com/gooddata/dataset/PullTask.java index 8530a5525..4d8178a8a 100644 --- a/src/main/java/com/gooddata/dataset/PullTask.java +++ b/src/main/java/com/gooddata/dataset/PullTask.java @@ -6,7 +6,7 @@ package com.gooddata.dataset; import static com.gooddata.util.Validate.notEmpty; -import static org.apache.commons.lang.Validate.notNull; +import static com.gooddata.util.Validate.notNull; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -31,7 +31,7 @@ class PullTask { @JsonCreator private PullTask(@JsonProperty("links") Links links) { - notNull(links, "links cannot be null!"); + notNull(links, "links"); this.links = links; } diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlag.java b/src/main/java/com/gooddata/featureflag/FeatureFlag.java index 193645d46..5e350a9ab 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlag.java @@ -17,7 +17,7 @@ public class FeatureFlag { private boolean enabled; public FeatureFlag(final String name, final boolean enabled) { - this.name = notNull(name, "name cannot be null"); + this.name = notNull(name, "name"); this.enabled = enabled; } diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java index af72a6f06..e611d274d 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java @@ -74,7 +74,7 @@ public void setEnabled(boolean enabled) { @JsonIgnore public String getUri() { - notNull(links, "links cannot be null if you want to get feature flag uri!"); + notNull(links, "links (if you want to get feature flag uri)"); return links.getSelf(); } diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index 21c431049..433db979c 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -9,7 +9,6 @@ import com.github.sardine.impl.SardineException; import com.github.sardine.impl.SardineImpl; import com.gooddata.UriPrefixer; -import org.apache.commons.lang.Validate; import org.apache.http.Header; import org.apache.http.HeaderIterator; import org.apache.http.HttpEntity; @@ -177,7 +176,7 @@ private static class FakeCloseableHttpClient extends CloseableHttpClient { private final HttpClient client; private FakeCloseableHttpClient(HttpClient client) { - notNull(client, "client can't be null"); + notNull(client, "client"); this.client = client; } @@ -250,7 +249,7 @@ private static class FakeCloseableHttpResponse implements CloseableHttpResponse private final HttpResponse wrappedResponse; public FakeCloseableHttpResponse(HttpResponse wrappedResponse) { - Validate.notNull(wrappedResponse, "wrappedResponse cannot be null!"); + notNull(wrappedResponse, "wrappedResponse"); this.wrappedResponse = wrappedResponse; } diff --git a/src/main/java/com/gooddata/gdc/GdcSardine.java b/src/main/java/com/gooddata/gdc/GdcSardine.java index 03c053b80..192863854 100644 --- a/src/main/java/com/gooddata/gdc/GdcSardine.java +++ b/src/main/java/com/gooddata/gdc/GdcSardine.java @@ -29,7 +29,7 @@ public GdcSardine(HttpClientBuilder builder) { @Override protected T execute(HttpRequestBase request, ResponseHandler responseHandler) throws IOException { try { - notNull(request,"request must not be null!"); + notNull(request,"request"); return super.execute(request, responseHandler); } finally { request.releaseConnection(); diff --git a/src/main/java/com/gooddata/md/AttributeElements.java b/src/main/java/com/gooddata/md/AttributeElements.java index 84e44314f..6f2b81177 100644 --- a/src/main/java/com/gooddata/md/AttributeElements.java +++ b/src/main/java/com/gooddata/md/AttributeElements.java @@ -5,8 +5,6 @@ */ package com.gooddata.md; -import static org.apache.commons.lang.Validate.notNull; - import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -17,6 +15,8 @@ import java.util.List; +import static com.gooddata.util.Validate.notNull; + /** * Represents elements of attribute */ diff --git a/src/main/java/com/gooddata/notification/NotificationService.java b/src/main/java/com/gooddata/notification/NotificationService.java index b5155bbf1..cf290c07b 100644 --- a/src/main/java/com/gooddata/notification/NotificationService.java +++ b/src/main/java/com/gooddata/notification/NotificationService.java @@ -30,8 +30,8 @@ public NotificationService(final RestTemplate restTemplate) { * @param event event to trigger */ public void triggerEvent(final Project project, final ProjectEvent event) { - notNull(project, "project can't be null"); - notNull(event, "event can't be null"); + notNull(project, "project"); + notNull(event, "event"); try { restTemplate.postForEntity(ProjectEvent.URI, event, Void.class, project.getId()); } catch (GoodDataRestException | RestClientException e) { diff --git a/src/main/java/com/gooddata/notification/ProjectEvent.java b/src/main/java/com/gooddata/notification/ProjectEvent.java index 46f6e58d2..6adfff901 100644 --- a/src/main/java/com/gooddata/notification/ProjectEvent.java +++ b/src/main/java/com/gooddata/notification/ProjectEvent.java @@ -38,8 +38,8 @@ public ProjectEvent(final String type) { } public ProjectEvent(final String type, final Map parameters) { - notEmpty(type, "type can't be empty"); - notNull(parameters, "parameters can't be null"); + notEmpty(type, "type"); + notNull(parameters, "parameters"); this.type = type; this.parameters = parameters; } @@ -50,8 +50,8 @@ public ProjectEvent(final String type, final Map parameters) { * @param value parameter value */ public void setParameter(final String key, final String value) { - notNull(key, "parameter key can't be null"); - notNull(value, "parameter value can't be null"); + notNull(key, "parameter key"); + notNull(value, "parameter value"); parameters.put(key, value); } diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index 445ba4a83..60c2c1d17 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -392,12 +392,12 @@ public boolean isEnabled() { } public void setDriver(String driver) { - notEmpty(driver, "driver cannot be empty!"); + notEmpty(driver, "driver"); content.setDriver(driver); } public void setDriver(ProjectDriver driver) { - notNull(driver, "driver cannot be null!"); + notNull(driver, "driver"); setDriver(driver.getValue()); } diff --git a/src/main/java/com/gooddata/project/ProjectDriver.java b/src/main/java/com/gooddata/project/ProjectDriver.java index 030ebc0d9..75c1339cf 100644 --- a/src/main/java/com/gooddata/project/ProjectDriver.java +++ b/src/main/java/com/gooddata/project/ProjectDriver.java @@ -14,7 +14,7 @@ public enum ProjectDriver { private final String value; ProjectDriver(String value) { - notEmpty(value, "value cannot be empty!"); + notEmpty(value, "value"); this.value = value; } diff --git a/src/test/java/com/gooddata/util/ResourceUtils.java b/src/test/java/com/gooddata/util/ResourceUtils.java index a5b96cdbe..02a31486a 100644 --- a/src/test/java/com/gooddata/util/ResourceUtils.java +++ b/src/test/java/com/gooddata/util/ResourceUtils.java @@ -52,7 +52,7 @@ public static InputStream readFromResource(String resourcePath) { private static InputStream readFromResource(String resourcePath, Class testClass) { notEmpty(resourcePath, "resourcePath"); - notNull(testClass, "testClass cannot be null!"); + notNull(testClass, "testClass"); return testClass.getResourceAsStream(resourcePath); } From 9701c990839b3b6c7c519c5a5d6a053e62b13457 Mon Sep 17 00:00:00 2001 From: Petr Vales Date: Wed, 21 Sep 2016 14:57:18 +0200 Subject: [PATCH 175/934] fix all javadoc errors and warnings --- src/main/java/com/gooddata/GoodData.java | 3 --- src/main/java/com/gooddata/account/Account.java | 4 ++++ src/main/java/com/gooddata/account/AccountService.java | 4 ++-- .../java/com/gooddata/dataload/processes/DataloadProcess.java | 4 ++-- .../project/ProjectValidationResultGdcTimeElParam.java | 1 + .../gooddata/project/ProjectValidationResultSliElParam.java | 4 ++-- src/main/java/com/gooddata/warehouse/WarehouseService.java | 1 + 7 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index fe069ee71..756f466a6 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -115,8 +115,6 @@ public GoodData(String hostname, String login, String password) { this(hostname, login, password, PORT, PROTOCOL, new GoodDataSettings()); } - - /** * Create instance configured to communicate with GoodData Platform running on given host using given user's * credentials. @@ -157,7 +155,6 @@ public GoodData(String hostname, String login, String password, int port, GoodDa this(hostname, login, password, port, PROTOCOL, settings); } - /** * Create instance configured to communicate with GoodData Platform running on given host, port and protocol using * given user's credentials. diff --git a/src/main/java/com/gooddata/account/Account.java b/src/main/java/com/gooddata/account/Account.java index a8fea9ef0..5e7c2eba6 100644 --- a/src/main/java/com/gooddata/account/Account.java +++ b/src/main/java/com/gooddata/account/Account.java @@ -67,6 +67,10 @@ public Account(String firstName,String lastName, Links links) { /** * Account creation constructor + * @param email email + * @param firstName first name + * @param lastName last name + * @param password password */ public Account(String email, String password, String firstName, String lastName) { this(email, email, password, password, firstName, lastName, null); diff --git a/src/main/java/com/gooddata/account/AccountService.java b/src/main/java/com/gooddata/account/AccountService.java index caa5ef867..30cdd225e 100644 --- a/src/main/java/com/gooddata/account/AccountService.java +++ b/src/main/java/com/gooddata/account/AccountService.java @@ -101,7 +101,7 @@ public void removeAccount(Account account) { * @param id to search for * @return account for id * @throws AccountNotFoundException when account for given id can't be found - * @throws GoodDataException + * @throws GoodDataException when different error occurs */ public Account getAccountById(String id) { try { @@ -122,7 +122,7 @@ public Account getAccountById(String id) { * @param uri to search for * @return account for uri * @throws AccountNotFoundException when account for given uri can't be found - * @throws GoodDataException + * @throws GoodDataException when different error occurs */ public Account getAccountByUri(String uri) { return getAccountById(Account.getId(uri)); diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index 164debba0..ec974cdac 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -51,8 +51,8 @@ public DataloadProcess(String name, String type) { /** * Use this constructor, when you want to deploy process from appstore. * - * @param name - * @param type + * @param name name + * @param type type * @param appstorePath valid path to brick in appstore */ public DataloadProcess(String name, String type, String appstorePath) { diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java index 9cd445cad..5fa88b0bb 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java @@ -33,6 +33,7 @@ public List getIds() { } /** + * @return list of values * @deprecated for backward compatibility only. Do not use this method, it always returns null. */ @Deprecated diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java index 948e951ed..6e7ee0406 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java @@ -34,14 +34,14 @@ private static ProjectValidationResultSliElParam create(@JsonProperty("ids") Lis } /** - * Returns list of IDs. IDs are primary property of this param. + * @return list of IDs. IDs are primary property of this param. */ public List getIds() { return ids; } /** - * Returns list of values. Values have only informative character and are connected to IDs. + * @return list of values. Values have only informative character and are connected to IDs. * * @see #getIds() */ diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index 461a9d6e5..ca7f136b5 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -242,6 +242,7 @@ public void handlePollException(final GoodDataRestException e) { /** * Remove given user from warehouse instance * @param user to remove from warehouse + * @return empty future result * @throws WarehouseUserNotFoundException when user for removal can't be found * @throws GoodDataException any other reason */ From f61dadc36ba48ddd7053f79a36ba764486fb5edf Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 3 Oct 2016 17:12:16 +0200 Subject: [PATCH 176/934] introduce update methods without project argument It makes no sense to require the project argument for update methods, as the object to update already contains the URI. Similary we don't require project argument for remove methods. --- .../dataload/processes/ProcessService.java | 54 +++++++++++++++++-- .../dataload/processes/ProcessServiceAT.java | 6 +-- .../dataload/processes/ProcessServiceIT.java | 4 +- .../processes/ProcessServiceTest.java | 19 ++----- 4 files changed, 59 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index be1ad91a8..5cfea4de7 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -127,13 +127,27 @@ public FutureResult createProcessFromAppstore(Project project, * @param process to create * @param processData process data to upload * @return updated process + * @deprecated use {@link #updateProcess(DataloadProcess, File)} */ + @Deprecated public DataloadProcess updateProcess(Project project, DataloadProcess process, File processData) { + return updateProcess(process, processData); + } + + /** + * Update process with given data by given project. + * Process must have null path to prevent clashes with deploying from appstore. + * + * @param process to create + * @param processData process data to upload + * @return updated process + */ + public DataloadProcess updateProcess(DataloadProcess process, File processData) { notNull(process, "process"); + notNull(process.getUri(), "process.uri"); notNull(processData, "processData"); - notNull(project, "project"); isTrue(process.getPath() == null, "Process path has to be null, use processData argument. If you want to update process from appstore, use method updateProcessFromAppstore()"); - return postProcess(process, processData, getProcessUri(project, process.getId())); + return postProcess(process, processData, URI.create(process.getUri())); } /** @@ -144,7 +158,9 @@ public DataloadProcess updateProcess(Project project, DataloadProcess process, F * @param project project to which the process belongs * @param process to update * @return updated process + * @deprecated use {@link #updateProcessFromAppstore(DataloadProcess)} */ + @Deprecated public FutureResult updateProcessFromAppstore(Project project, DataloadProcess process) { notNull(project, "project"); notNull(process, "process"); @@ -152,6 +168,21 @@ public FutureResult updateProcessFromAppstore(Project project, return postProcess(process, getProcessUri(project, process.getId()), HttpMethod.PUT); } + /** + * Update process with data from appstore by given project. + * Process must have set path field to valid appstore path in order to deploy from appstore. + * This method is asynchronous, because when deploying from appstore, deployment worker can be triggered. + * + * @param process to update + * @return updated process + */ + public FutureResult updateProcessFromAppstore(DataloadProcess process) { + notNull(process, "process"); + notNull(process.getUri(), "process.uri"); + notEmpty(process.getPath(), "process path must not be empty"); + return postProcess(process, URI.create(process.getUri()), HttpMethod.PUT); + } + /** * Get process by given URI. * @param uri process uri @@ -323,18 +354,31 @@ public Schedule createSchedule(Project project, Schedule schedule) { } /** - * Update connector integration + * Update the given schedule * * @param project project * @param schedule to update * @return updated Schedule * @throws ScheduleNotFoundException when the schedule doesn't exist + * @deprecated use {@link #updateSchedule(Schedule)} */ + @Deprecated public Schedule updateSchedule(final Project project, Schedule schedule) { + return updateSchedule(schedule); + } + + /** + * Update the given schedule + * + * @param schedule to update + * @return updated Schedule + * @throws ScheduleNotFoundException when the schedule doesn't exist + */ + public Schedule updateSchedule(Schedule schedule) { notNull(schedule, "schedule"); - notNull(project, "project"); + notNull(schedule.getUri(), "schedule.uri"); - final String uri = getScheduleUri(project, schedule.getId()).toString(); + final String uri = schedule.getUri(); try { final ResponseEntity response = restTemplate .exchange(uri, HttpMethod.PUT, new HttpEntity<>(schedule), Schedule.class); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index 0a1d00ae9..ee1c9e9fc 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -91,10 +91,10 @@ public void updateSchedule() { schedule.setState(ScheduleState.DISABLED); schedule.setReschedule(Duration.standardMinutes(26)); - schedule = gd.getProcessService().updateSchedule(project, schedule); + schedule = gd.getProcessService().updateSchedule(schedule); assertThat(schedule.isEnabled(), is(false)); - assertThat(gd.getProcessService().updateSchedule(project, schedule).getRescheduleInMinutes(), is(26)); + assertThat(gd.getProcessService().updateSchedule(schedule).getRescheduleInMinutes(), is(26)); } @Test(groups = "process", dependsOnGroups = "project") @@ -109,7 +109,7 @@ public void createProcessFromGit() { @Test(groups = "process", dependsOnMethods = "createProcessFromGit") public void updateProcessFromGit() { processAppstore.setPath("${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyBonjour"); - processAppstore = gd.getProcessService().updateProcessFromAppstore(project, processAppstore).get(); + processAppstore = gd.getProcessService().updateProcessFromAppstore(processAppstore).get(); assertThat(processAppstore.getExecutables(), contains("bonjour.rb")); } diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java index 2cc29cb42..948ad6b4b 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java @@ -251,7 +251,7 @@ public void shouldUpdateSchedule() throws Exception { .withStatus(200); schedule.setState(ScheduleState.DISABLED); - final Schedule updated = gd.getProcessService().updateSchedule(project, schedule); + final Schedule updated = gd.getProcessService().updateSchedule(schedule); assertThat(updated, notNullValue()); assertThat(updated.isEnabled(), is(false)); } @@ -364,7 +364,7 @@ public void shouldUpdateProcessFromAppstore() { .withBody(readFromResource("/dataload/processes/appstoreProcess.json")); process.setPath("${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyHello"); - DataloadProcess updatedProcess = gd.getProcessService().updateProcessFromAppstore(project, process).get(); + DataloadProcess updatedProcess = gd.getProcessService().updateProcessFromAppstore(process).get(); assertThat(updatedProcess, notNullValue()); assertThat(updatedProcess.getType(), is(equalTo(ProcessType.RUBY.toString()))); assertThat(updatedProcess.getExecutables(), contains("hello.rb") ); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java index 5a8ab2b54..1c4fb3181 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java @@ -77,6 +77,7 @@ public void setUp() throws Exception { MockitoAnnotations.initMocks(this); processService = new ProcessService(restTemplate, accountService, dataStoreService); when(process.getId()).thenReturn(PROCESS_ID); + when(process.getUri()).thenReturn(DataloadProcess.TEMPLATE.expand(PROJECT_ID, PROCESS_ID).toString()); when(project.getId()).thenReturn(PROJECT_ID); when(accountService.getCurrent()).thenReturn(account); when(account.getId()).thenReturn(ACCOUNT_ID); @@ -133,33 +134,23 @@ private static File createProcessOfSize(int size) throws Exception { return file; } - @Test(expectedExceptions = IllegalArgumentException.class) - public void testUpdateProcessWithNullProject() throws Exception { - processService.updateProcess(null, process, File.createTempFile("test", null)); - } - @Test(expectedExceptions = IllegalArgumentException.class) public void testUpdateProcessWithNullProcess() throws Exception { - processService.updateProcess(project, null, File.createTempFile("test", null)); - } - - @Test(expectedExceptions = IllegalArgumentException.class) - public void testUpdateProcessWithNullFile() throws Exception { - processService.updateProcess(project, process, (File) null); + processService.updateProcess(null, File.createTempFile("test", null)); } @Test(expectedExceptions = GoodDataException.class) public void testUpdateProcessWithRestClientError() throws Exception { when(restTemplate.exchange(eq(create(PROCESS_URI)), any(HttpMethod.class), any(HttpEntity.class), eq(DataloadProcess.class))).thenThrow(new RestClientException("")); - processService.updateProcess(project, process, File.createTempFile("test", null)); + processService.updateProcess(process, File.createTempFile("test", null)); } @Test(expectedExceptions = GoodDataException.class) public void testUpdateProcessWithNoApiResponse() throws Exception { when(restTemplate.exchange(eq(create(PROCESS_URI)), any(HttpMethod.class), any(HttpEntity.class), eq(DataloadProcess.class))).thenReturn(null); - processService.updateProcess(project, process, File.createTempFile("test", null)); + processService.updateProcess(process, File.createTempFile("test", null)); } @Test @@ -167,7 +158,7 @@ public void testUpdateProcess() throws Exception { when(restTemplate.exchange(eq(create(PROCESS_URI)), any(HttpMethod.class), any(HttpEntity.class), eq(DataloadProcess.class))).thenReturn(new ResponseEntity<>(process, HttpStatus.OK)); final DataloadProcess result = processService - .updateProcess(project, process, File.createTempFile("test", null)); + .updateProcess(process, File.createTempFile("test", null)); assertThat(result, is(process)); } From dd121340fb2f24f2687f748236a99e66ce7fe28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Mon, 10 Oct 2016 14:15:04 +0200 Subject: [PATCH 177/934] Fixed order of tests in ProcessServiceAT --- .../java/com/gooddata/dataload/processes/ProcessServiceAT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index c0ba9f86f..7d68e7376 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -133,7 +133,7 @@ public void failExecuteProcess() throws Exception { processService.executeProcess(new ProcessExecution(process, "invalid.grf")).get(); } - @Test(dependsOnGroups = "process") + @Test(dependsOnGroups = "process", dependsOnMethods = "removeSchedule") public void removeProcess() throws Exception { gd.getProcessService().removeProcess(process); gd.getProcessService().removeProcess(processAppstore); From 5d9ea299b3f266ae4744a3c23bcf2eb9db811ecb Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Tue, 11 Oct 2016 15:32:25 +0200 Subject: [PATCH 178/934] fix invalid report's domain serialization Also removing protected report's constructor since I believe it makes no sense to test serialization of something what can't be created by SDK user. --- src/main/java/com/gooddata/md/report/Report.java | 16 ++++++++-------- .../java/com/gooddata/md/report/ReportTest.java | 15 ++++++++++----- src/test/resources/md/report/report-input.json | 4 +--- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gooddata/md/report/Report.java b/src/main/java/com/gooddata/md/report/Report.java index 259d6b76c..7b9a75de2 100644 --- a/src/main/java/com/gooddata/md/report/Report.java +++ b/src/main/java/com/gooddata/md/report/Report.java @@ -19,6 +19,7 @@ import java.util.Collection; import static java.util.Arrays.asList; +import static java.util.Collections.emptyList; /** * Report @@ -37,14 +38,14 @@ private Report(@JsonProperty("meta") Meta meta, @JsonProperty("content") Content this.content = content; } - /* Just for serialization test */ - Report(String title, String domain, String... definitions) { - super(new Meta(title)); - content = new Content(asList(definitions), asList(domain)); - } - + /** + * Creates new report with given title and definitions + * @param title report title + * @param definitions report definitions + */ public Report(String title, ReportDefinition... definitions) { - this(title, null, uris(definitions)); + // domains must be empty list to be included in serialized form properly + this(new Meta(title), new Content(asList(uris(definitions)), emptyList())); } @JsonIgnore @@ -57,7 +58,6 @@ public Collection getDomains() { return content.getDomains(); } - @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { private final Collection definitions; private final Collection domains; diff --git a/src/test/java/com/gooddata/md/report/ReportTest.java b/src/test/java/com/gooddata/md/report/ReportTest.java index 148429f82..2ce04d5a1 100644 --- a/src/test/java/com/gooddata/md/report/ReportTest.java +++ b/src/test/java/com/gooddata/md/report/ReportTest.java @@ -13,11 +13,13 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class ReportTest { - public static final String DEFINITION = "/gdc/md/PROJECT_ID/obj/DEF_ID"; - public static final String DOMAIN = "/gdc/md/PROJECT_ID/obj/DOM_ID"; + private static final String DEFINITION_URI = "/gdc/md/PROJECT_ID/obj/DEF_ID"; + private static final String DOMAIN_URI = "/gdc/md/PROJECT_ID/obj/DOM_ID"; @Test public void testDeserialization() throws Exception { @@ -25,16 +27,19 @@ public void testDeserialization() throws Exception { assertThat(report, is(notNullValue())); assertThat(report.getDefinitions(), is(notNullValue())); assertThat(report.getDefinitions(), hasSize(1)); - assertThat(report.getDefinitions().iterator().next(), is(DEFINITION)); + assertThat(report.getDefinitions().iterator().next(), is(DEFINITION_URI)); assertThat(report.getDomains(), is(notNullValue())); assertThat(report.getDomains(), hasSize(1)); - assertThat(report.getDomains().iterator().next(), is(DOMAIN)); + assertThat(report.getDomains().iterator().next(), is(DOMAIN_URI)); } @Test public void testSerialization() throws Exception { - final Report report = new Report("Beers Consumed This Week", DOMAIN, DEFINITION); + final ReportDefinition definition = mock(ReportDefinition.class); + when(definition.getUri()).thenReturn(DEFINITION_URI); + + final Report report = new Report("Beers Consumed This Week", definition); assertThat(report, serializesToJson("/md/report/report-input.json")); } diff --git a/src/test/resources/md/report/report-input.json b/src/test/resources/md/report/report-input.json index 51963d408..beaa12c74 100644 --- a/src/test/resources/md/report/report-input.json +++ b/src/test/resources/md/report/report-input.json @@ -1,9 +1,7 @@ { "report" : { "content" : { - "domains" : [ - "/gdc/md/PROJECT_ID/obj/DOM_ID" - ], + "domains" : [], "definitions" : [ "/gdc/md/PROJECT_ID/obj/DEF_ID" ] From 30e4f77bf1d80d9657afffe1ff6593fbb2133b9d Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Mon, 10 Oct 2016 07:30:59 +0200 Subject: [PATCH 179/934] introduce zendesk process download parameters --- .../connector/Zendesk4ProcessExecution.java | 74 ++++++++++++++++++- .../Zendesk4ProcessExecutionTest.java | 17 +++++ .../connector/process-execution-download.json | 9 +++ 3 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/connector/process-execution-download.json diff --git a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java index 4ddb931f7..326a56600 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java @@ -10,6 +10,9 @@ import static com.gooddata.util.Validate.notNull; import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.gooddata.util.ISODateTimeSerializer; import org.joda.time.DateTime; @@ -26,6 +29,8 @@ public class Zendesk4ProcessExecution implements ProcessExecution { private Map startTimes; + private DownloadParams downloadParams; + @Override public ConnectorType getConnectorType() { return ZENDESK4; @@ -50,8 +55,75 @@ public void setStartTime(final String resource, final DateTime startTime) { notEmpty(resource, "resource"); notNull(startTime, "startTime"); - startTimes = startTimes == null ? new TreeMap() : startTimes; + startTimes = startTimes == null ? new TreeMap<>() : startTimes; startTimes.put(resource + "StartDate", startTime); } + + @JsonIgnore + public DownloadParams getDownloadParams() { + if (downloadParams == null) { + downloadParams = new DownloadParams(); + } + return downloadParams; + } + + @JsonProperty("downloadParams") + private DownloadParams getDownloadParamsPlain() { + return downloadParams; + } + + public void setDownloadParams(DownloadParams downloadParams) { + this.downloadParams = downloadParams; + } + + @JsonInclude(JsonInclude.Include.NON_NULL) + static class DownloadParams { + private Boolean useBackup; + private Integer parallelWorkers; + private Integer parallelBatchSeconds; + + public DownloadParams(Boolean useBackup, Integer parallelWorkers, Integer parallelBatchSeconds) { + this.useBackup = useBackup; + this.parallelWorkers = parallelWorkers; + this.parallelBatchSeconds = parallelBatchSeconds; + } + + public DownloadParams(Integer parallelWorkers, Integer parallelBatchSeconds) { + this(null, parallelWorkers, parallelBatchSeconds); + } + + public DownloadParams(Boolean useBackup) { + this(useBackup, null, null); + } + + private DownloadParams() {} + + @JsonProperty("useBackup") + public Boolean getUseBackup() { + return useBackup; + } + + public void setUseBackup(Boolean useBackup) { + this.useBackup = useBackup; + } + + @JsonProperty("parallelWorkers") + public Integer getParallelWorkers() { + return parallelWorkers; + } + + public void setParallelWorkers(Integer parallelWorkers) { + this.parallelWorkers = parallelWorkers; + } + + @JsonProperty("parallelBatchSeconds") + public Integer getParallelBatchSeconds() { + return parallelBatchSeconds; + } + + public void setParallelBatchSeconds(Integer parallelBatchSeconds) { + this.parallelBatchSeconds = parallelBatchSeconds; + } + } } diff --git a/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java b/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java index 320af8ddb..27edcf41e 100644 --- a/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java @@ -6,10 +6,12 @@ package com.gooddata.connector; import com.gooddata.JsonMatchers; +import com.gooddata.connector.Zendesk4ProcessExecution.DownloadParams; import org.joda.time.DateTime; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.notNullValue; public class Zendesk4ProcessExecutionTest { @@ -35,4 +37,19 @@ public void testShouldSerializeStartTimes() throws Exception { assertThat(execution, JsonMatchers.serializesToJson( "/connector/process-execution-startDate.json")); } + + @Test + public void testShouldSerializeDownloadParams() throws Exception { + final Zendesk4ProcessExecution execution = new Zendesk4ProcessExecution(); + execution.setDownloadParams(new DownloadParams(true, 5, 3600)); + assertThat(execution, JsonMatchers.serializesToJson( + "/connector/process-execution-download.json")); + } + + @Test + public void testGetDownloadParams() throws Exception { + final Zendesk4ProcessExecution execution = new Zendesk4ProcessExecution(); + final DownloadParams downloadParams = execution.getDownloadParams(); + assertThat(downloadParams, notNullValue()); + } } \ No newline at end of file diff --git a/src/test/resources/connector/process-execution-download.json b/src/test/resources/connector/process-execution-download.json new file mode 100644 index 000000000..42ccc4838 --- /dev/null +++ b/src/test/resources/connector/process-execution-download.json @@ -0,0 +1,9 @@ +{ + "process": { + "downloadParams": { + "useBackup": true, + "parallelWorkers": 5, + "parallelBatchSeconds": 3600 + } + } +} \ No newline at end of file From 041a8e0a9b011440e4736b640a3919635df0c878 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 13 Oct 2016 11:19:28 +0200 Subject: [PATCH 180/934] [maven-release-plugin] prepare release gooddata-java-2.1.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 662c317ec..16db9b343 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.0.1-SNAPSHOT + 2.1.0 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 0fa80d1402270033c5f18ac905c2ff9807b6fbce Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 13 Oct 2016 11:19:28 +0200 Subject: [PATCH 181/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 16db9b343..b948816dc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.1.0 + 2.1.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From d485c49aaa9f8339324f900876d515d522e4929f Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 13 Oct 2016 11:37:23 +0200 Subject: [PATCH 182/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bca8c0543..699973f84 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.0.0 + 2.1.0 ``` See [releases page](https://github.com/martiner/gooddata-java/releases) for information about versions and notable changes, From a50ebea1a6d7f283e67d2868da75d1cecdefddc6 Mon Sep 17 00:00:00 2001 From: Peter Plochan Date: Fri, 14 Oct 2016 10:59:25 +0200 Subject: [PATCH 183/934] Change Zendesk4ProcessExecution.DownloadParams visibility to public --- .../java/com/gooddata/connector/Zendesk4ProcessExecution.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java index 326a56600..5d85cfd6c 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java @@ -78,7 +78,7 @@ public void setDownloadParams(DownloadParams downloadParams) { } @JsonInclude(JsonInclude.Include.NON_NULL) - static class DownloadParams { + public static class DownloadParams { private Boolean useBackup; private Integer parallelWorkers; private Integer parallelBatchSeconds; From 887f0a8d8ea39d6421a83a6cfbb7234bc8009ff2 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 14 Oct 2016 13:48:53 +0200 Subject: [PATCH 184/934] [maven-release-plugin] prepare release gooddata-java-2.1.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b948816dc..5d05a588f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.1.1-SNAPSHOT + 2.1.1 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 64c5dfed7f0a2a1239063c6a88fd07f66f506c5c Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 14 Oct 2016 13:48:53 +0200 Subject: [PATCH 185/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5d05a588f..ca215cc20 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.1.1 + 2.1.2-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 57f1db891dce133bf32a02c4d0a774a8d84a7247 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Fri, 14 Oct 2016 14:26:44 +0200 Subject: [PATCH 186/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 699973f84..e805cdfed 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.1.0 + 2.1.1 ``` See [releases page](https://github.com/martiner/gooddata-java/releases) for information about versions and notable changes, From 1338955f3d61ad5752f1ac0ddb206775c32eceea Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 20 Oct 2016 11:14:50 +0200 Subject: [PATCH 187/934] Raise Jackson version to 2.8.4 with bugfixes --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca215cc20..ea7ee5852 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ UTF-8 UTF-8 4.3.3 - 2.8.0 + 2.8.4 4.3.1.RELEASE 1.1.1 1.5.3 From db9a8502c2655c054fed6ce3497e75abaa165a1c Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 20 Oct 2016 11:38:09 +0200 Subject: [PATCH 188/934] [maven-release-plugin] prepare release gooddata-java-2.1.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ea7ee5852..03e9d443f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.1.2-SNAPSHOT + 2.1.2 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 77622a902ff30a06c6d45bc19efd0641ce5fcb64 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 20 Oct 2016 11:38:10 +0200 Subject: [PATCH 189/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 03e9d443f..26555c7e1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.1.2 + 2.1.3-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 714a764894a2011f94a6bc9a0938ccbba3fe1ff5 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 20 Oct 2016 11:45:41 +0200 Subject: [PATCH 190/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e805cdfed..20844db80 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.1.1 + 2.1.2 ``` See [releases page](https://github.com/martiner/gooddata-java/releases) for information about versions and notable changes, From 3b45c9d25cc71dd1a2b31fc8c5b7aa667966e010 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 26 Oct 2016 13:20:32 +0200 Subject: [PATCH 191/934] handle different exception when webdav is on the same hostname --- .../com/gooddata/gdc/DataStoreService.java | 22 +++++++++++++++---- .../com/gooddata/gdc/DatastoreServiceAT.java | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index 433db979c..54c4b1baa 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -7,7 +7,6 @@ import com.github.sardine.Sardine; import com.github.sardine.impl.SardineException; -import com.github.sardine.impl.SardineImpl; import com.gooddata.UriPrefixer; import org.apache.http.Header; import org.apache.http.HeaderIterator; @@ -19,6 +18,7 @@ import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; +import org.apache.http.client.NonRepeatableRequestException; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpUriRequest; @@ -104,16 +104,30 @@ private void upload(URI url, InputStream stream) { sardine.put(url.toString(), stream); } catch (SardineException e) { if (HttpStatus.INTERNAL_SERVER_ERROR.value() == e.getStatusCode()) { - throw new DataStoreException("Got 500 while uploading to " + url + "." - + "\nThis can be known limitation, see https://github.com/martiner/gooddata-java/wiki/Known-limitations", e); + // this error may occur when user issues request to WebDAV before SST and TT were obtained + // and WebDAV is deployed on a separate hostname + // see https://github.com/martiner/gooddata-java/wiki/Known-limitations + throw new DataStoreException(createUnAuthRequestWarningMessage(url), e); } else { throw new DataStoreException("Unable to upload to " + url + " got status " + e.getStatusCode(), e); } } catch (IOException e) { - throw new DataStoreException("Unable to upload to " + url, e); + // this error may occur when user issues request to WebDAV before SST and TT were obtained + // and WebDAV deployed on the same hostname + // see https://github.com/martiner/gooddata-java/wiki/Known-limitations + if (e.getCause() instanceof NonRepeatableRequestException) { + throw new DataStoreException(createUnAuthRequestWarningMessage(url), e); + } else { + throw new DataStoreException("Unable to upload to " + url, e); + } } } + private String createUnAuthRequestWarningMessage(final URI url) { + return "Got 500 while uploading to " + url + "." + + "\nThis can be known limitation, see https://github.com/martiner/gooddata-java/wiki/Known-limitations"; + } + /** * Download given path and return data as stream * @param path path from where to download diff --git a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java index 6ddb64af2..068a869a3 100644 --- a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java +++ b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java @@ -95,7 +95,7 @@ public void datastoreConnectionClosedAfterSingleConnection() throws Exception { @Test(groups = "datastore", expectedExceptions = DataStoreException.class, expectedExceptionsMessageRegExp = "(?s).* 500 .*https://github.com/.*/Known-limitations") - public void datastoreUploadWithAuthentication() throws Exception { + public void shouldThrowExceptionWithMessageOnUnAuthRequest() throws Exception { final GoodData datastoreGd = new GoodData(getProperty("host"), getProperty("login"), getProperty("pass")); DataStoreService dataStoreService = datastoreGd.getDataStoreService(); From ae5f5b161faaff300d40f71e2050c23ccbe30006 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 26 Oct 2016 16:27:07 +0200 Subject: [PATCH 192/934] introduce dedicated testing page --- CONTRIBUTING.md | 13 ------------- README.md | 5 +++++ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8678e8ac4..8fb045d98 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -63,16 +63,3 @@ is specific enough. * When you need some **utility code**, look for handy utilities in used libraries first (e.g. _Spring_ has its `StreamUtils`, `FileCopyUtils`, ...). When you decide to create new utility class, use _abstract utility class pattern_. - -## How-tos -### Run acceptance tests -These tests have to be run against GoodData API, so one has to first set endpoint and credentials. It's being set by -environment variables: `host`, `login`, `pass`, `projectToken`, `warehouseToken`. Tests can be then run by: -`mvn verify -Pat`. - -One can also use one-liner like this: -`host=... login=... pass=... projectToken=... warehouseToken=... mvn verify -Pat` - -One can also run only subset by specifying tests or groups to be run: -`mvn -Dgroups=featureFlag,project,account verify -Pat` or -`mvn -Dit.test=FeatureFlagServiceAT,ProjectServiceAT,AccountServiceAT verify -Pat`. diff --git a/README.md b/README.md index 20844db80..c2540bd71 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,11 @@ The *GoodData Java SDK* uses: The *GoodData Java SDK* is free and open-source software provided by GoodData Corporation "as-is" under [BSD License](LICENSE.txt). +## Development + +Build the library with `mvn package`, see the +[Testing](https://github.com/martiner/gooddata-java/wiki/Testing) page for different testing methods. + ## Contribute Found a bug? Please create an [issue](https://github.com/martiner/gooddata-java/issues). Missing functionality? From 3d46c8afeb842f719166eeaa5eddaa6ca7017210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Sat, 29 Oct 2016 22:22:55 +0200 Subject: [PATCH 193/934] add support for warehouse schemas close: #394 --- .../gooddata/warehouse/WarehouseSchema.java | 69 +++++++++++++++++ .../WarehouseSchemaNotFoundException.java | 26 +++++++ .../gooddata/warehouse/WarehouseSchemas.java | 42 +++++++++++ .../WarehouseSchemasDeserializer.java | 27 +++++++ .../gooddata/warehouse/WarehouseService.java | 65 ++++++++++++++++ .../warehouse/WarehouseSchemaTest.java | 41 ++++++++++ .../warehouse/WarehouseSchemasTest.java | 25 +++++++ .../warehouse/WarehouseServiceAT.java | 22 ++++++ .../warehouse/WarehouseServiceIT.java | 74 +++++++++++++++++++ src/test/resources/warehouse/schema.json | 11 +++ src/test/resources/warehouse/schemas.json | 20 +++++ 11 files changed, 422 insertions(+) create mode 100644 src/main/java/com/gooddata/warehouse/WarehouseSchema.java create mode 100644 src/main/java/com/gooddata/warehouse/WarehouseSchemaNotFoundException.java create mode 100644 src/main/java/com/gooddata/warehouse/WarehouseSchemas.java create mode 100644 src/main/java/com/gooddata/warehouse/WarehouseSchemasDeserializer.java create mode 100644 src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java create mode 100644 src/test/java/com/gooddata/warehouse/WarehouseSchemasTest.java create mode 100644 src/test/resources/warehouse/schema.json create mode 100644 src/test/resources/warehouse/schemas.json diff --git a/src/main/java/com/gooddata/warehouse/WarehouseSchema.java b/src/main/java/com/gooddata/warehouse/WarehouseSchema.java new file mode 100644 index 000000000..44e7d7826 --- /dev/null +++ b/src/main/java/com/gooddata/warehouse/WarehouseSchema.java @@ -0,0 +1,69 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.warehouse; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.springframework.web.util.UriTemplate; + +import java.util.Map; + +/** + * Warehouse schema. + * Deserialization Only. + */ +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonTypeName("schema") +@JsonIgnoreProperties(ignoreUnknown = true) +public class WarehouseSchema { + + private static final String SELF_LINK = "self"; + private static final String INSTANCE_LINK = "instance"; + + public static final String URI = WarehouseSchemas.URI + "/{name}"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); + + private final String name; + + private final String description; + + private final Map links; + + @JsonCreator + private WarehouseSchema(@JsonProperty("name") final String name, + @JsonProperty("description") final String description, + @JsonProperty("links") final Map links) { + this.name = name; + this.description = description; + this.links = links; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public Map getLinks() { + return links; + } + + @JsonIgnore + public String getUri() { + return links != null ? links.get(SELF_LINK): null; + } + + @JsonIgnore + public String getInstanceUri() { + return links != null ? links.get(INSTANCE_LINK): null; + } +} diff --git a/src/main/java/com/gooddata/warehouse/WarehouseSchemaNotFoundException.java b/src/main/java/com/gooddata/warehouse/WarehouseSchemaNotFoundException.java new file mode 100644 index 000000000..f000286b9 --- /dev/null +++ b/src/main/java/com/gooddata/warehouse/WarehouseSchemaNotFoundException.java @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.warehouse; + +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; + +/** + * Warehouse schema doesn't exist. + */ +public class WarehouseSchemaNotFoundException extends GoodDataException { + + private final String warehouseSchemaUri; + + public WarehouseSchemaNotFoundException(String uri, GoodDataRestException cause) { + super("Warehouse schema " + uri + " was not found", cause); + this.warehouseSchemaUri = uri; + } + + public String getWarehouseSchemaUri() { + return warehouseSchemaUri; + } +} diff --git a/src/main/java/com/gooddata/warehouse/WarehouseSchemas.java b/src/main/java/com/gooddata/warehouse/WarehouseSchemas.java new file mode 100644 index 000000000..2b4256f5a --- /dev/null +++ b/src/main/java/com/gooddata/warehouse/WarehouseSchemas.java @@ -0,0 +1,42 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.warehouse; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.collections.PageableList; +import com.gooddata.collections.Paging; +import org.springframework.web.util.UriTemplate; + +import java.util.List; +import java.util.Map; + +/** + * List of warehouse schemas. + * Deserialization Only. + */ +@JsonDeserialize(using = WarehouseSchemasDeserializer.class) +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonTypeName(WarehouseSchemas.ROOT_NODE) +@JsonIgnoreProperties(ignoreUnknown = true) +public class WarehouseSchemas extends PageableList { + + public static final String URI = Warehouse.URI + "/schemas"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); + + static final String ROOT_NODE = "schemas"; + + public WarehouseSchemas(final List items, final Paging paging) { + super(items, paging); + } + + public WarehouseSchemas(final List items, final Paging paging, final Map links) { + super(items, paging, links); + } +} diff --git a/src/main/java/com/gooddata/warehouse/WarehouseSchemasDeserializer.java b/src/main/java/com/gooddata/warehouse/WarehouseSchemasDeserializer.java new file mode 100644 index 000000000..3b345dd21 --- /dev/null +++ b/src/main/java/com/gooddata/warehouse/WarehouseSchemasDeserializer.java @@ -0,0 +1,27 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.warehouse; + +import com.gooddata.collections.PageableListDeserializer; +import com.gooddata.collections.Paging; + +import java.util.List; +import java.util.Map; + +/** + * Deserializer of WarehouseSchemas. + */ +class WarehouseSchemasDeserializer extends PageableListDeserializer { + + protected WarehouseSchemasDeserializer() { + super(WarehouseSchema.class); + } + + @Override + protected WarehouseSchemas createList(final List items, final Paging paging, final Map links) { + return new WarehouseSchemas(items, paging, links); + } +} diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index ca7f136b5..95d9d680c 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -31,6 +31,8 @@ */ public class WarehouseService extends AbstractService { + private static final String DEFAULT_SCHEMA_NAME = "default"; + /** * Sets RESTful HTTP Spring template. Should be called from constructor of concrete service extending * this abstract one. @@ -303,4 +305,67 @@ public Warehouse updateWarehouse(Warehouse toUpdate) { return getWarehouseByUri(toUpdate.getUri()); } + + /** + * list schemas for Warehouse + * + * @param warehouse to list schemas for + * @return pageable list of warehouse schemas + */ + public PageableList listWarehouseSchemas(final Warehouse warehouse) { + try { + final WarehouseSchemas result = restTemplate.getForObject(WarehouseSchemas.TEMPLATE.expand(warehouse.getId()), WarehouseSchemas.class); + if (result == null) { + return new PageableList<>(); + } + return result; + } catch (GoodDataException | RestClientException e) { + throw new GoodDataException("Unable to list Warehouse schemas", e); + } + } + + /** + * get warehouse schema by name + * + * @param warehouse to get schema for + * @param name of schema + * @return warehouse schema + */ + public WarehouseSchema getWarehouseSchemaByName(final Warehouse warehouse, final String name) { + notNull(warehouse, "warehouse"); + notEmpty(name, "name"); + final String uri = WarehouseSchema.TEMPLATE.expand(warehouse.getId(), name).toString(); + return getWarehouseSchemaByUri(uri); + } + + /** + * get warehouse schema by uri + * + * @param uri of schema + * @return warehouse schema + */ + public WarehouseSchema getWarehouseSchemaByUri(final String uri) { + notEmpty(uri, "uri"); + try { + return restTemplate.getForObject(uri, WarehouseSchema.class); + } catch (GoodDataRestException e) { + if (HttpStatus.NOT_FOUND.value() == e.getStatusCode()) { + throw new WarehouseSchemaNotFoundException(uri.toString(), e); + } else { + throw e; + } + } catch (RestClientException e) { + throw new GoodDataException("Unable to get Warehouse instance " + uri, e); + } + } + + /** + * get default warehouse schema + * + * @param warehouse to get default schema for + * @return default warehouse schema + */ + public WarehouseSchema getDefaultWarehouseSchema(final Warehouse warehouse) { + return getWarehouseSchemaByName(warehouse, DEFAULT_SCHEMA_NAME); + } } diff --git a/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java b/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java new file mode 100644 index 000000000..fe5f12a85 --- /dev/null +++ b/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.warehouse; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; +import java.util.LinkedHashMap; +import java.util.Map; + +public class WarehouseSchemaTest { + + private static final String NAME = "default"; + private static final String DESCRIPTION = "Default schema for new ADS instance"; + private static final String SELF_LINK = "/gdc/datawarehouse/instances/instanceId/schemas/default"; + private static final String INSTANCE = "/gdc/datawarehouse/instances/instanceId"; + private static final String PARENT = "/gdc/datawarehouse/instances/warehouseId/schemas"; + private static final Map LINKS = new LinkedHashMap() {{ + put("self", SELF_LINK); + put("instance", INSTANCE); + put("parent", PARENT); + }}; + + @Test + public void testDeserialization() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/warehouse/schema.json"); + final WarehouseSchema warehouseSchema = new ObjectMapper().readValue(stream, WarehouseSchema.class); + + assertThat(warehouseSchema.getName(), is(NAME)); + assertThat(warehouseSchema.getDescription(), is(DESCRIPTION)); + assertThat(warehouseSchema.getLinks(), is(equalTo(LINKS))); + } +} diff --git a/src/test/java/com/gooddata/warehouse/WarehouseSchemasTest.java b/src/test/java/com/gooddata/warehouse/WarehouseSchemasTest.java new file mode 100644 index 000000000..b72a8a391 --- /dev/null +++ b/src/test/java/com/gooddata/warehouse/WarehouseSchemasTest.java @@ -0,0 +1,25 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.warehouse; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.hamcrest.core.Is.is; + +import org.testng.annotations.Test; + +public class WarehouseSchemasTest { + private final WarehouseSchemas warehouseSchemas = readObjectFromResource("/warehouse/schemas.json", WarehouseSchemas.class); + + @Test + public void testDeserialization() throws Exception { + assertThat(warehouseSchemas, notNullValue()); + assertThat(warehouseSchemas, hasSize(1)); + assertThat(warehouseSchemas.get(0).getName(), is("default")); + } +} diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java index 315c056a5..e8d313477 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java @@ -21,6 +21,9 @@ import static com.gooddata.warehouse.WarehouseIdMatcher.hasSameIdAs; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasProperty; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -34,6 +37,7 @@ public class WarehouseServiceAT extends AbstractGoodDataAT { private static final String LOGIN = "john.smith." + UUID.randomUUID() + "@gooddata.com"; + private static final String SCHEMA_NAME = "default"; private final String warehouseToken; private final WarehouseService service; @@ -118,6 +122,24 @@ public void shouldRemoveUserFromWarehouse() { warehouseUser = null; } + @Test(groups = "warehouse", dependsOnMethods = "createWarehouse") + public void listWarehouseSchemas() { + PageableList warehouseSchemas = service.listWarehouseSchemas(warehouse); + assertThat(warehouseSchemas, contains(hasProperty("name", equalTo(SCHEMA_NAME)))); + } + + @Test(groups = "warehouse", dependsOnMethods = "createWarehouse") + public void getWarehouseSchema() { + WarehouseSchema warehouseSchema = service.getWarehouseSchemaByName(warehouse, SCHEMA_NAME); + assertThat(warehouseSchema, is(notNullValue())); + } + + @Test(groups = "warehouse", dependsOnMethods = "createWarehouse") + public void getDefaultWarehouseSchema() { + WarehouseSchema warehouseSchema = service.getDefaultWarehouseSchema(warehouse); + assertThat(warehouseSchema, is(notNullValue())); + } + @Test(dependsOnGroups = "warehouse") public void removeWarehouse() throws Exception { service.removeWarehouse(warehouse); diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java index ee670dde7..a7fb6dd4c 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java @@ -22,6 +22,7 @@ import static net.jadler.Jadler.onRequest; import static net.jadler.Jadler.verifyThatRequest; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.hamcrest.core.Is.is; @@ -30,11 +31,13 @@ public class WarehouseServiceIT extends AbstractGoodDataIT { private static final String TITLE = "Test"; + private static final String SCHEMA_NAME = "default"; private static final String TASK_POLL = "/warehouse/warehouseTask-poll.json"; private static final String TASK_DONE = "/warehouse/warehouseTask-finished.json"; private static final String WAREHOUSE_ID = "instanceId"; private static final String WAREHOUSE = "/warehouse/warehouse.json"; private static final String WAREHOUSE_USER = "/warehouse/user.json"; + private static final String WAREHOUSE_SCHEMA = "/warehouse/schema.json"; private static final String WAREHOUSE_URI = Warehouse.TEMPLATE.expand(WAREHOUSE_ID).toString(); private static final String WAREHOUSE_USER_URI = WarehouseUsers.TEMPLATE.expand(WAREHOUSE_ID).toString(); @@ -45,12 +48,14 @@ public class WarehouseServiceIT extends AbstractGoodDataIT { private WarehouseTask pollingTask; private WarehouseTask finishedTask; private Warehouse warehouse; + private WarehouseSchema warehouseSchema; @BeforeClass public void setUp() throws Exception { pollingTask = MAPPER.readValue(readFromResource(TASK_POLL), WarehouseTask.class); finishedTask = MAPPER.readValue(readFromResource(TASK_DONE), WarehouseTask.class); warehouse = MAPPER.readValue(readFromResource(WAREHOUSE), Warehouse.class); + warehouseSchema = MAPPER.readValue(readFromResource(WAREHOUSE_SCHEMA), WarehouseSchema.class); } @Test @@ -301,4 +306,73 @@ public void shouldFailWhenRemoveUserTaskFails() throws Exception { .get(); } + @Test + public void shouldGetWarehouseSchemaByName() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(warehouseSchema.getUri()) + .respond() + .withBody(readFromResource(WAREHOUSE_SCHEMA)) + .withStatus(200); + + final WarehouseSchema result = gd.getWarehouseService().getWarehouseSchemaByName(warehouse, SCHEMA_NAME); + assertThat(result, notNullValue()); + assertThat(result.getName(), is(SCHEMA_NAME)); + } + + @Test + public void shouldGetDefaultWarehouseSchema() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(warehouseSchema.getUri()) + .respond() + .withBody(readFromResource(WAREHOUSE_SCHEMA)) + .withStatus(200); + + final WarehouseSchema result = gd.getWarehouseService().getDefaultWarehouseSchema(warehouse); + assertThat(result, notNullValue()); + assertThat(result.getName(), is(SCHEMA_NAME)); + } + + @Test + public void shouldGetWarehouseSchemaByUri() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(warehouseSchema.getUri()) + .respond() + .withBody(readFromResource(WAREHOUSE_SCHEMA)) + .withStatus(200); + + final WarehouseSchema result = gd.getWarehouseService().getWarehouseSchemaByUri(warehouseSchema.getUri()); + assertThat(result, notNullValue()); + assertThat(result.getName(), is(SCHEMA_NAME)); + } + + @Test + public void shouldListWarehouseSchemas() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(WarehouseSchemas.TEMPLATE.expand(warehouse.getId()).toString()) + .respond() + .withBody(readFromResource("/warehouse/schemas.json")) + .withStatus(200); + + final PageableList list = gd.getWarehouseService().listWarehouseSchemas(warehouse); + assertThat(list, notNullValue()); + assertThat(list, hasSize(1)); + assertThat(list.get(0).getName(), is(equalTo(SCHEMA_NAME))); + } + + @Test(expectedExceptions = WarehouseSchemaNotFoundException.class) + public void shouldFailWarehouseSchemaByNameNotFound() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(warehouseSchema.getUri()) + .respond() + .withStatus(404); + + final WarehouseSchema result = gd.getWarehouseService().getWarehouseSchemaByName(warehouse, SCHEMA_NAME); + assertThat(result, notNullValue()); + assertThat(result.getName(), is(SCHEMA_NAME)); + } } diff --git a/src/test/resources/warehouse/schema.json b/src/test/resources/warehouse/schema.json new file mode 100644 index 000000000..57489d15c --- /dev/null +++ b/src/test/resources/warehouse/schema.json @@ -0,0 +1,11 @@ +{ + "schema" : { + "name" : "default", + "description" : "Default schema for new ADS instance", + "links" : { + "self" : "/gdc/datawarehouse/instances/instanceId/schemas/default", + "parent" : "/gdc/datawarehouse/instances/warehouseId/schemas", + "instance" : "/gdc/datawarehouse/instances/instanceId" + } + } +} \ No newline at end of file diff --git a/src/test/resources/warehouse/schemas.json b/src/test/resources/warehouse/schemas.json new file mode 100644 index 000000000..0970bad9e --- /dev/null +++ b/src/test/resources/warehouse/schemas.json @@ -0,0 +1,20 @@ +{ + "schemas" : { + "items" : [ { + "schema" : { + "name" : "default", + "description" : "Default schema for new ADS instance", + "links" : { + "self" : "/gdc/datawarehouse/instances/instanceId/schemas/default", + "parent" : "/gdc/datawarehouse/instances/instanceId/schemas", + "instance" : "/gdc/datawarehouse/instances/instanceId" + } + } + } ], + "paging" : { }, + "links" : { + "self" : "/gdc/datawarehouse/instances/instanceId/schemas", + "parent" : "/gdc/datawarehouse/instances/instanceId" + } + } +} \ No newline at end of file From 4eb3cd03790402621c1c8ca1a1f2de032d359fda Mon Sep 17 00:00:00 2001 From: Petr Vales Date: Tue, 20 Sep 2016 17:04:52 +0200 Subject: [PATCH 194/934] extract authentication strategy from GoodData class * introduce GoodDataEndpoint, class encapsulating GoodData host, port and protocol * introduce Authentication interface, it allows developer to implement new authentication strategy * provide two implementation of new Authentication interface, sst and login + passport --- .../java/com/gooddata/Authentication.java | 24 +++++ src/main/java/com/gooddata/GoodData.java | 71 +++++++++------ .../java/com/gooddata/GoodDataEndpoint.java | 88 +++++++++++++++++++ .../LoginPasswordAuthentication.java | 50 +++++++++++ .../authentication/SstAuthentication.java | 45 ++++++++++ .../java/com/gooddata/AbstractGoodDataAT.java | 35 ++++---- .../java/com/gooddata/AbstractGoodDataIT.java | 16 ++-- .../com/gooddata/GoodDataEndpointTest.java | 32 +++++++ .../LoginPasswordAuthenticationTest.java | 46 ++++++++++ .../authentication/SstAuthenticationTest.java | 45 ++++++++++ 10 files changed, 397 insertions(+), 55 deletions(-) create mode 100644 src/main/java/com/gooddata/Authentication.java create mode 100644 src/main/java/com/gooddata/GoodDataEndpoint.java create mode 100644 src/main/java/com/gooddata/authentication/LoginPasswordAuthentication.java create mode 100644 src/main/java/com/gooddata/authentication/SstAuthentication.java create mode 100644 src/test/java/com/gooddata/GoodDataEndpointTest.java create mode 100644 src/test/java/com/gooddata/authentication/LoginPasswordAuthenticationTest.java create mode 100644 src/test/java/com/gooddata/authentication/SstAuthenticationTest.java diff --git a/src/main/java/com/gooddata/Authentication.java b/src/main/java/com/gooddata/Authentication.java new file mode 100644 index 000000000..7ca0e0fcd --- /dev/null +++ b/src/main/java/com/gooddata/Authentication.java @@ -0,0 +1,24 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata; + +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.HttpClientBuilder; + +/** + * User authentication strategy. See https://developer.gooddata.com/api#/reference/authentication/log-in + */ +public interface Authentication { + + /** + * Authenticate user + * @param endpoint GoodData Platform's endpoint + * @param httpClientBuilder http client builder + * @return Http client with provided authentication means + */ + HttpClient createHttpClient(final GoodDataEndpoint endpoint, final HttpClientBuilder httpClientBuilder); + +} diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 756f466a6..c1d7f702f 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -12,18 +12,15 @@ import com.gooddata.md.maintenance.ExportImportService; import com.gooddata.notification.NotificationService; import com.gooddata.util.ResponseErrorHandler; +import com.gooddata.authentication.LoginPasswordAuthentication; import com.gooddata.warehouse.WarehouseService; import com.gooddata.dataset.DatasetService; import com.gooddata.gdc.DataStoreService; import com.gooddata.gdc.GdcService; -import com.gooddata.http.client.GoodDataHttpClient; -import com.gooddata.http.client.LoginSSTRetrievalStrategy; -import com.gooddata.http.client.SSTRetrievalStrategy; import com.gooddata.md.MetadataService; import com.gooddata.model.ModelService; import com.gooddata.project.ProjectService; import com.gooddata.report.ReportService; -import org.apache.http.HttpHost; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.config.SocketConfig; @@ -37,7 +34,7 @@ import java.util.Arrays; -import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; import static java.util.Collections.singletonMap; import static org.apache.http.util.VersionInfo.loadVersionInfo; @@ -58,9 +55,9 @@ public class GoodData { public static final String GDC_REQUEST_ID_HEADER = "X-GDC-REQUEST"; - protected static final String PROTOCOL = "https"; - protected static final int PORT = 443; - protected static final String HOSTNAME = "secure.gooddata.com"; + protected static final String PROTOCOL = GoodDataEndpoint.PROTOCOL; + protected static final int PORT = GoodDataEndpoint.PORT; + protected static final String HOSTNAME = GoodDataEndpoint.HOSTNAME; private static final String UNKNOWN_VERSION = "UNKNOWN"; private static final int RESTAPI_VERSION = 1; @@ -167,21 +164,43 @@ public GoodData(String hostname, String login, String password, int port, GoodDa * @param settings additional settings */ protected GoodData(String hostname, String login, String password, int port, String protocol, GoodDataSettings settings) { - notEmpty(hostname, "hostname"); - notEmpty(login, "login"); - notEmpty(password, "password"); - notEmpty(protocol, "protocol"); - httpClient = createHttpClient(login, password, hostname, port, protocol, - createHttpClientBuilder(settings)); + this( + new GoodDataEndpoint(hostname, port, protocol), + new LoginPasswordAuthentication(login, password), + settings + ); + } - restTemplate = createRestTemplate(hostname, httpClient, port, protocol); + /** + * Create instance configured to communicate with GoodData Platform running on given endpoint and using + * given http client factory. + * + * @param endpoint GoodData Platform's endpoint + * @param authentication authentication + */ + protected GoodData(GoodDataEndpoint endpoint, Authentication authentication) { + this(endpoint, authentication, new GoodDataSettings()); + } + + /** + * Create instance configured to communicate with GoodData Platform running on given endpoint and using + * given http client factory. + * + * @param endpoint GoodData Platform's endpoint + * @param authentication authentication + * @param settings additional settings + */ + protected GoodData(GoodDataEndpoint endpoint, Authentication authentication, GoodDataSettings settings) { + httpClient = authentication.createHttpClient(endpoint, createHttpClientBuilder(settings)); + + restTemplate = createRestTemplate(endpoint, httpClient); accountService = new AccountService(getRestTemplate()); projectService = new ProjectService(getRestTemplate(), accountService); metadataService = new MetadataService(getRestTemplate()); modelService = new ModelService(getRestTemplate()); gdcService = new GdcService(getRestTemplate()); - dataStoreService = new DataStoreService(getHttpClient(), getRestTemplate(), gdcService, new HttpHost(hostname, port, protocol).toURI()); + dataStoreService = new DataStoreService(getHttpClient(), getRestTemplate(), gdcService, endpoint.toUri()); datasetService = new DatasetService(getRestTemplate(), dataStoreService); reportService = new ReportService(getRestTemplate()); processService = new ProcessService(getRestTemplate(), accountService, dataStoreService); @@ -192,10 +211,16 @@ protected GoodData(String hostname, String login, String password, int port, Str featureFlagService = new FeatureFlagService(restTemplate); } - private RestTemplate createRestTemplate(String hostname, HttpClient httpClient, int port, String protocol) { + static RestTemplate createRestTemplate(GoodDataEndpoint endpoint, HttpClient httpClient) { + notNull(endpoint, "endpoint"); + notNull(httpClient, "httpClient"); final UriPrefixingClientHttpRequestFactory factory = new UriPrefixingClientHttpRequestFactory( - new HttpComponentsClientHttpRequestFactory(httpClient), hostname, port, protocol); + new HttpComponentsClientHttpRequestFactory(httpClient), + endpoint.getHostname(), + endpoint.getPort(), + endpoint.getProtocol() + ); final RestTemplate restTemplate = new RestTemplate(factory); restTemplate.setInterceptors(Arrays.asList( new HeaderSettingRequestInterceptor(singletonMap("Accept", getAcceptHeaderValue())))); @@ -229,18 +254,10 @@ private HttpClientBuilder createHttpClientBuilder(final GoodDataSettings setting * Set accept header (application/json by default) and append rest api versioning information which is mandatory * for some resources. */ - private String getAcceptHeaderValue(){ + private static String getAcceptHeaderValue(){ return MediaType.APPLICATION_JSON_VALUE + ";version=" + RESTAPI_VERSION; } - protected HttpClient createHttpClient(final String login, final String password, final String hostname, - final int port, final String protocol, final HttpClientBuilder builder) { - final HttpHost host = new HttpHost(hostname, port, protocol); - final HttpClient httpClient = builder.build(); - final SSTRetrievalStrategy strategy = new LoginSSTRetrievalStrategy(login, password); - return new GoodDataHttpClient(httpClient, host, strategy); - } - private String getUserAgent() { final Package pkg = Package.getPackage("com.gooddata"); final String clientVersion = pkg != null && pkg.getImplementationVersion() != null diff --git a/src/main/java/com/gooddata/GoodDataEndpoint.java b/src/main/java/com/gooddata/GoodDataEndpoint.java new file mode 100644 index 000000000..b4b4df66c --- /dev/null +++ b/src/main/java/com/gooddata/GoodDataEndpoint.java @@ -0,0 +1,88 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata; + +import org.apache.http.HttpHost; + +import static com.gooddata.util.Validate.notEmpty; + +/** + * GoodData Platform endpoint represented by host, port and protocol + */ +public class GoodDataEndpoint { + + public static final String PROTOCOL = "https"; + public static final int PORT = 443; + public static final String HOSTNAME = "secure.gooddata.com"; + + private final String hostname; + private final int port; + private final String protocol; + + /** + * Create GoodData endpoint for given hostname, port and protocol + * @param hostname GoodData Platform's host name (e.g. secure.gooddata.com) + * @param port GoodData Platform's API port (e.g. 443) + * @param protocol GoodData Platform's API protocol (e.g. https) + */ + public GoodDataEndpoint(final String hostname, final int port, final String protocol) { + this.hostname = notEmpty(hostname, "hostname"); + this.port = port; + this.protocol = notEmpty(protocol, "protocol"); + } + + /** + * Create GoodData endpoint for given hostname, port using HTTPS protocol + * @param hostname GoodData Platform's host name (e.g. secure.gooddata.com) + * @param port GoodData Platform's API port (e.g. 443) + */ + public GoodDataEndpoint(String hostname, int port) { + this(hostname, port, PROTOCOL); + } + + /** + * Create GoodData endpoint for given hostname using 443 port and HTTPS protocol + * @param hostname GoodData Platform's host name (e.g. secure.gooddata.com) + */ + public GoodDataEndpoint(String hostname) { + this(hostname, PORT, PROTOCOL); + } + + /** + * Create GoodData endpoint for given hostname using 443 port and HTTPS protocol and secure.gooddata.com hostname + */ + public GoodDataEndpoint() { + this(HOSTNAME, PORT, PROTOCOL); + } + + /** + * @return the host URI, as a string. + */ + public String toUri() { + return new HttpHost(hostname, port, protocol).toURI(); + } + + /** + * @return GoodData Platform's host name (e.g. secure.gooddata.com) + */ + public String getHostname() { + return hostname; + } + + /** + * @return GoodData Platform's API port (e.g. 443) + */ + public int getPort() { + return port; + } + + /** + * @return GoodData Platform's API protocol (e.g. https) + */ + public String getProtocol() { + return protocol; + } +} diff --git a/src/main/java/com/gooddata/authentication/LoginPasswordAuthentication.java b/src/main/java/com/gooddata/authentication/LoginPasswordAuthentication.java new file mode 100644 index 000000000..176f176ea --- /dev/null +++ b/src/main/java/com/gooddata/authentication/LoginPasswordAuthentication.java @@ -0,0 +1,50 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.authentication; + +import com.gooddata.GoodDataEndpoint; +import com.gooddata.Authentication; +import com.gooddata.http.client.GoodDataHttpClient; +import com.gooddata.http.client.LoginSSTRetrievalStrategy; +import com.gooddata.http.client.SSTRetrievalStrategy; +import org.apache.http.HttpHost; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.HttpClientBuilder; + +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + +/** + * Login and password authentication + */ +public class LoginPasswordAuthentication implements Authentication { + + private final String login; + private final String password; + + /** + * Create login password authentication + * + * @param login login + * @param password password + */ + public LoginPasswordAuthentication(final String login, final String password) { + this.login = notEmpty(login, "login"); + this.password = notEmpty(password, "password"); + } + + @Override + public HttpClient createHttpClient(final GoodDataEndpoint endpoint, final HttpClientBuilder builder) { + notNull(endpoint, "endpoint"); + notNull(builder, "builder"); + + final HttpClient httpClient = builder.build(); + final SSTRetrievalStrategy strategy = new LoginSSTRetrievalStrategy(login, password); + final HttpHost httpHost = new HttpHost(endpoint.getHostname(), endpoint.getPort(), endpoint.getProtocol()); + return new GoodDataHttpClient(httpClient, httpHost, strategy); + } + +} diff --git a/src/main/java/com/gooddata/authentication/SstAuthentication.java b/src/main/java/com/gooddata/authentication/SstAuthentication.java new file mode 100644 index 000000000..d608c469f --- /dev/null +++ b/src/main/java/com/gooddata/authentication/SstAuthentication.java @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.authentication; + +import com.gooddata.GoodDataEndpoint; +import com.gooddata.Authentication; +import com.gooddata.http.client.GoodDataHttpClient; +import com.gooddata.http.client.SSTRetrievalStrategy; +import com.gooddata.http.client.SimpleSSTRetrievalStrategy; +import org.apache.http.HttpHost; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.HttpClientBuilder; + +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + +/** + * SST authentication, see https://developer.gooddata.com/article/gooddata-token-types#Authentication + */ +public class SstAuthentication implements Authentication { + + private final String sst; + + /** + * Create SST authentication + * @param sst sst + */ + public SstAuthentication(final String sst) { + this.sst = notEmpty(sst, "sst"); + } + + @Override + public HttpClient createHttpClient(final GoodDataEndpoint endpoint, final HttpClientBuilder builder) { + notNull(endpoint, "endpoint"); + notNull(builder, "builder"); + + final HttpClient httpClient = builder.build(); + final SSTRetrievalStrategy strategy = new SimpleSSTRetrievalStrategy(sst); + final HttpHost httpHost = new HttpHost(endpoint.getHostname(), endpoint.getPort(), endpoint.getProtocol()); + return new GoodDataHttpClient(httpClient, httpHost, strategy); + } +} diff --git a/src/test/java/com/gooddata/AbstractGoodDataAT.java b/src/test/java/com/gooddata/AbstractGoodDataAT.java index 852626df4..f3ca1daa3 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataAT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataAT.java @@ -5,16 +5,13 @@ */ package com.gooddata; -import com.gooddata.http.client.GoodDataHttpClient; -import com.gooddata.http.client.LoginSSTRetrievalStrategy; -import com.gooddata.http.client.SSTRetrievalStrategy; import com.gooddata.md.Attribute; import com.gooddata.md.Metric; import com.gooddata.md.ScheduledMail; import com.gooddata.md.report.Report; import com.gooddata.md.report.ReportDefinition; import com.gooddata.project.Project; -import org.apache.http.HttpHost; +import com.gooddata.authentication.LoginPasswordAuthentication; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; @@ -30,20 +27,22 @@ public abstract class AbstractGoodDataAT { "sdktest " + new LocalDate() + " " + System.getenv("BUILD_NUMBER"); protected static final GoodData gd = - new GoodData(getProperty("host"), getProperty("login"), getProperty("pass")) { - /** - * had to be overriden to access connectionManager, to test how many connections were not closed - */ - @Override - protected HttpClient createHttpClient(String login, String password, String hostname, int port, String protocol, HttpClientBuilder builder) { - PoolingHttpClientConnectionManager httpClientConnectionManager = new PoolingHttpClientConnectionManager(); - final HttpHost host = new HttpHost(hostname, port, protocol); - final HttpClient httpClient = builder.setConnectionManager(httpClientConnectionManager).build(); - final SSTRetrievalStrategy strategy = new LoginSSTRetrievalStrategy(httpClient, host, login, password); - connManager = httpClientConnectionManager; - return new GoodDataHttpClient(httpClient, strategy); - } - }; + new GoodData( + new GoodDataEndpoint(getProperty("host")), + new LoginPasswordAuthentication(getProperty("login"), getProperty("pass")) { + /** + * had to be overriden to access connectionManager, to test how many connections were not closed + */ + @Override + public HttpClient createHttpClient(final GoodDataEndpoint endpoint, final HttpClientBuilder builder) { + PoolingHttpClientConnectionManager httpClientConnectionManager = new PoolingHttpClientConnectionManager(); + final HttpClientBuilder builderWithManager = builder.setConnectionManager(httpClientConnectionManager); + connManager = httpClientConnectionManager; + + return super.createHttpClient(endpoint, builderWithManager); + } + }); + protected static PoolingHttpClientConnectionManager connManager; diff --git a/src/test/java/com/gooddata/AbstractGoodDataIT.java b/src/test/java/com/gooddata/AbstractGoodDataIT.java index ab12a237d..86e04563d 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataIT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataIT.java @@ -5,8 +5,7 @@ */ package com.gooddata; -import org.apache.http.client.HttpClient; -import org.apache.http.impl.client.HttpClientBuilder; +import com.gooddata.authentication.LoginPasswordAuthentication; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; @@ -23,14 +22,11 @@ public abstract class AbstractGoodDataIT { @BeforeMethod public void commonSetUp() { initJadler().that().respondsWithDefaultContentType("application/json"); - gd = new GoodData("localhost", "sdk@gooddata.com", "sdk", port(), "http", new GoodDataSettings()) { - @Override - protected HttpClient createHttpClient(final String login, final String password, final String hostname, - final int port, final String protocol, - final HttpClientBuilder builder) { - return builder.build(); - } - }; + gd = new GoodData( + new GoodDataEndpoint("localhost", port(), "http"), + new LoginPasswordAuthentication("sdk@gooddata.com", "sdk"), + new GoodDataSettings() + ); } @AfterMethod diff --git a/src/test/java/com/gooddata/GoodDataEndpointTest.java b/src/test/java/com/gooddata/GoodDataEndpointTest.java new file mode 100644 index 000000000..17957857c --- /dev/null +++ b/src/test/java/com/gooddata/GoodDataEndpointTest.java @@ -0,0 +1,32 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata; + +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +public class GoodDataEndpointTest { + + private static final String HOST = "HOST"; + private static final int PORT = 1; + private static final String PROTOCOL = "http"; + + private GoodDataEndpoint endpoint; + + @BeforeMethod + public void setUp() throws Exception { + endpoint = new GoodDataEndpoint(HOST, PORT, PROTOCOL); + } + + @Test + public void testToUri() throws Exception { + assertThat(endpoint.toUri(), is("http://HOST:1")); + } + +} diff --git a/src/test/java/com/gooddata/authentication/LoginPasswordAuthenticationTest.java b/src/test/java/com/gooddata/authentication/LoginPasswordAuthenticationTest.java new file mode 100644 index 000000000..95a5041f1 --- /dev/null +++ b/src/test/java/com/gooddata/authentication/LoginPasswordAuthenticationTest.java @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.authentication; + +import com.gooddata.GoodDataEndpoint; +import com.gooddata.http.client.GoodDataHttpClient; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class LoginPasswordAuthenticationTest { + + private static final String PASSWORD = "PASSWORD"; + private static final String LOGIN = "LOGIN"; + + private LoginPasswordAuthentication loginPasswordAuthentication; + + @BeforeMethod + public void setUp() throws Exception { + loginPasswordAuthentication = new LoginPasswordAuthentication(LOGIN, PASSWORD); + } + + @Test + public void shouldCreateHttpClient() { + final HttpClientBuilder clientBuilder = mock(HttpClientBuilder.class); + when(clientBuilder.build()).thenReturn(mock(CloseableHttpClient.class)); + + final HttpClient httpClient = loginPasswordAuthentication.createHttpClient(new GoodDataEndpoint("host", 1, "http"), clientBuilder); + + assertThat(httpClient, notNullValue()); + assertThat(httpClient, is(instanceOf(GoodDataHttpClient.class))); + } + +} diff --git a/src/test/java/com/gooddata/authentication/SstAuthenticationTest.java b/src/test/java/com/gooddata/authentication/SstAuthenticationTest.java new file mode 100644 index 000000000..baa76e5ce --- /dev/null +++ b/src/test/java/com/gooddata/authentication/SstAuthenticationTest.java @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.authentication; + +import com.gooddata.GoodDataEndpoint; +import com.gooddata.http.client.GoodDataHttpClient; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class SstAuthenticationTest { + + private static final String SST = "sst"; + + private SstAuthentication sstAuthentication; + + @BeforeMethod + public void setUp() throws Exception { + sstAuthentication = new SstAuthentication(SST); + } + + @Test + public void shouldCreateHttpClient() { + final HttpClientBuilder clientBuilder = mock(HttpClientBuilder.class); + when(clientBuilder.build()).thenReturn(mock(CloseableHttpClient.class)); + + final HttpClient httpClient = sstAuthentication.createHttpClient(new GoodDataEndpoint("host", 1, "http"), clientBuilder); + + assertThat(httpClient, notNullValue()); + assertThat(httpClient, is(instanceOf(GoodDataHttpClient.class))); + } + +} From ce6e65e1cb3f531925bbe61b2ae45a2fb3fb2f3b Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 28 Nov 2016 14:19:35 +0100 Subject: [PATCH 195/934] [maven-release-plugin] prepare release gooddata-java-2.2.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 26555c7e1..e53b7af7e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.1.3-SNAPSHOT + 2.2.0 ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From dd39ed7968d93ed9c4ddacee6d9de2e72665a380 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 28 Nov 2016 14:19:36 +0100 Subject: [PATCH 196/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e53b7af7e..e2d488e68 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.2.0 + 2.2.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/martiner/gooddata-java From 2eb524355074dba5fcbeb9cf5585d9ab9dcf1cfb Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 28 Nov 2016 14:30:55 +0100 Subject: [PATCH 197/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2540bd71..2e23bb377 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.1.2 + 2.2.0 ``` See [releases page](https://github.com/martiner/gooddata-java/releases) for information about versions and notable changes, From e15b89312e985f0bd0900c781e724c4468f4a87e Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 9 Dec 2016 11:35:15 +0100 Subject: [PATCH 198/934] update gooddata-http-client to allow apostrophe as password character --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e2d488e68..ab785c041 100644 --- a/pom.xml +++ b/pom.xml @@ -279,7 +279,7 @@ com.gooddata gooddata-http-client - 0.9.3 + 0.9.4 commons-lang From 465d95a8bade947d31c963c97850a04ab8222f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 1 Dec 2016 12:16:54 +0100 Subject: [PATCH 199/934] throw exception in case that links are null --- .../connector/IntegrationProcessStatus.java | 4 ++- .../dataload/processes/DataloadProcess.java | 7 ++-- .../processes/ProcessExecutionDetail.java | 7 ++-- .../processes/ProcessExecutionTask.java | 6 ++-- .../gooddata/dataload/processes/Schedule.java | 3 +- .../featureflag/ProjectFeatureFlag.java | 5 ++- src/main/java/com/gooddata/md/Dataset.java | 6 ++-- .../gooddata/md/report/ReportDefinition.java | 4 ++- .../java/com/gooddata/project/Project.java | 33 ++++++++++--------- src/main/java/com/gooddata/util/Validate.java | 15 +++++++++ .../com/gooddata/warehouse/Warehouse.java | 3 +- .../gooddata/warehouse/WarehouseSchema.java | 6 ++-- .../com/gooddata/warehouse/WarehouseUser.java | 3 +- 13 files changed, 66 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java index 0daf17cb4..94a058d2d 100644 --- a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java +++ b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java @@ -5,6 +5,8 @@ */ package com.gooddata.connector; +import static com.gooddata.util.Validate.notNullState; + import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; @@ -84,7 +86,7 @@ public boolean isFailed() { @JsonIgnore public String getUri() { - return links != null ? links.get(SELF_LINK): null; + return notNullState(links, "links").get(SELF_LINK); } @JsonIgnore diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index ec974cdac..98a954e04 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -7,6 +7,7 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; +import static com.gooddata.util.Validate.notNullState; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -104,7 +105,7 @@ public Set getExecutables() { @JsonIgnore public String getUri() { - return links != null ? links.get(SELF_LINK) : null; + return notNullState(links, "links").get(SELF_LINK); } @JsonIgnore @@ -124,7 +125,7 @@ public String getExecutionsLink() { @JsonIgnore public String getExecutionsUri() { - return links != null ? links.get(EXECUTIONS_LINK) : null; + return notNullState(links, "links").get(EXECUTIONS_LINK); } /** @@ -139,7 +140,7 @@ public String getSourceLink() { @JsonIgnore public String getSourceUri() { - return getUri() != null ? getUri() + "/source" : null; + return getUri() + "/source"; } public void validateExecutable(final String executable) { diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java index c3df37e56..f2f9550e6 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java @@ -18,6 +18,7 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; +import static com.gooddata.util.Validate.notNullState; /** * Dataload process execution detail. Deserialization only. @@ -98,12 +99,12 @@ public String getLogLink() { @JsonIgnore public String getLogUri() { - return links != null ? links.get(LOG_LINK) : null; + return notNullState(links, "links").get(LOG_LINK); } @JsonIgnore public String getUri() { - return links != null ? links.get(SELF_LINK) : null; + return notNullState(links, "links").get(SELF_LINK); } /** @@ -118,7 +119,7 @@ public String getExecutionLink() { @JsonIgnore public String getExecutionUri() { - return links != null ? links.get(EXECUTION_LINK) : null; + return notNullState(links, "links").get(EXECUTION_LINK); } @JsonIgnore diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java index 12c895539..74408402a 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionTask.java @@ -5,6 +5,8 @@ */ package com.gooddata.dataload.processes; +import static com.gooddata.util.Validate.notNullState; + import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -37,7 +39,7 @@ String getPollLink() { } String getPollUri() { - return links != null ? links.get(POLL_LINK) : null; + return notNullState(links, "links").get(POLL_LINK); } @Deprecated @@ -46,6 +48,6 @@ String getDetailLink() { } String getDetailUri() { - return links != null ? links.get(DETAIL_LINK) : null; + return notNullState(links, "links").get(DETAIL_LINK); } } diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index f14a39586..2a62d2899 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -25,6 +25,7 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; +import static com.gooddata.util.Validate.notNullState; /** * Schedule. @@ -244,7 +245,7 @@ public int getConsecutiveFailedExecutionCount() { @JsonIgnore public String getUri() { - return links != null ? links.get(SELF_LINK) : null; + return notNullState(links, "links").get(SELF_LINK); } @JsonIgnore diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java index e611d274d..f40b7d77f 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java @@ -9,7 +9,7 @@ import org.springframework.web.util.UriTemplate; import static com.gooddata.util.Validate.notEmpty; -import static com.gooddata.util.Validate.notNull; +import static com.gooddata.util.Validate.notNullState; /** * Project feature flag is a boolean flag used for enabling / disabling some specific feature of GoodData platform @@ -74,8 +74,7 @@ public void setEnabled(boolean enabled) { @JsonIgnore public String getUri() { - notNull(links, "links (if you want to get feature flag uri)"); - return links.getSelf(); + return notNullState(links, "links").getSelf(); } @Override diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index 1fdaa2ba3..2be8f1f35 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -5,6 +5,8 @@ */ package com.gooddata.md; +import static com.gooddata.util.Validate.notNullState; + import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.util.BooleanDeserializer; import com.gooddata.util.BooleanStringSerializer; @@ -93,7 +95,7 @@ public String getDataUploadsLink() { @JsonIgnore public String getDataUploadsUri() { - return links != null ? links.get(DATA_UPLOADS_LINK) : null; + return notNullState(links, "links").get(DATA_UPLOADS_LINK); } /** @@ -108,7 +110,7 @@ public String getUploadConfigurationLink() { @JsonIgnore public String getUploadConfigurationUri() { - return links != null ? links.get(UPLOAD_CONFIGURATION_LINK) : null; + return notNullState(links, "links").get(UPLOAD_CONFIGURATION_LINK); } @JsonInclude(JsonInclude.Include.NON_NULL) diff --git a/src/main/java/com/gooddata/md/report/ReportDefinition.java b/src/main/java/com/gooddata/md/report/ReportDefinition.java index 0d7fb34f8..4ce2bed10 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinition.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinition.java @@ -5,6 +5,8 @@ */ package com.gooddata.md.report; +import static com.gooddata.util.Validate.notNullState; + import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.md.AbstractObj; import com.gooddata.md.Meta; @@ -73,7 +75,7 @@ public String getExplainLink() { @JsonIgnore public String getExplainUri() { - return links != null ? links.get(EXPLAIN_LINK) : null; + return notNullState(links, "links").get(EXPLAIN_LINK); } } diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index 60c2c1d17..e6a546840 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -24,6 +24,7 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; +import static com.gooddata.util.Validate.notNullState; import static java.util.Arrays.asList; /** @@ -138,7 +139,7 @@ public DateTime getUpdated() { @JsonIgnore public String getUri() { - return links.getSelf(); + return notNullState(links, "links").getSelf(); } /** @@ -153,7 +154,7 @@ public String getUsersLink() { @JsonIgnore public String getUsersUri() { - return links.getUsers(); + return notNullState(links, "links").getUsers(); } /** @@ -168,7 +169,7 @@ public String getRolesLink() { @JsonIgnore public String getRolesUri() { - return links.getRoles(); + return notNullState(links, "links").getRoles(); } /** @@ -183,7 +184,7 @@ public String getGroupsLink() { @JsonIgnore public String getGroupsUri() { - return links.getGroups(); + return notNullState(links, "links").getGroups(); } /** @@ -198,7 +199,7 @@ public String getInvitationsLink() { @JsonIgnore public String getInvitationsUri() { - return links.getInvitations(); + return notNullState(links, "links").getInvitations(); } /** @@ -228,7 +229,7 @@ public String getLdmThumbnailLink() { @JsonIgnore public String getLdmThumbnailUri() { - return links.getLdmThumbnail(); + return notNullState(links, "links").getLdmThumbnail(); } /** @@ -243,7 +244,7 @@ public String getMetadataLink() { @JsonIgnore public String getMetadataUri() { - return links.getMetadata(); + return notNullState(links, "links").getMetadata(); } /** @@ -258,7 +259,7 @@ public String getPublicArtifactsLink() { @JsonIgnore public String getPublicArtifactsUri() { - return links.getPublicArtifacts(); + return notNullState(links, "links").getPublicArtifacts(); } /** @@ -273,7 +274,7 @@ public String getTemplatesLink() { @JsonIgnore public String getTemplatesUri() { - return links.getTemplates(); + return notNullState(links, "links").getTemplates(); } /** @@ -288,7 +289,7 @@ public String getConnectorsLink() { @JsonIgnore public String getConnectorsUri() { - return links.getConnectors(); + return notNullState(links, "links").getConnectors(); } /** @@ -303,7 +304,7 @@ public String getDataLoadLink() { @JsonIgnore public String getDataLoadUri() { - return links.getDataLoad(); + return notNullState(links, "links").getDataLoad(); } /** @@ -318,7 +319,7 @@ public String getSchedulesLink() { @JsonIgnore public String getSchedulesUri() { - return links.getSchedules(); + return notNullState(links, "links").getSchedules(); } /** @@ -333,7 +334,7 @@ public String getExecuteLink() { @JsonIgnore public String getExecuteUri() { - return links.getExecute(); + return notNullState(links, "links").getExecute(); } /** @@ -348,7 +349,7 @@ public String getEventStoresLink() { @JsonIgnore public String getEventStoresUri() { - return links.getEventStores(); + return notNullState(links, "links").getEventStores(); } /** @@ -363,7 +364,7 @@ public String getClearCachesLink() { @JsonIgnore public String getClearCachesUri() { - return links.getClearCaches(); + return notNullState(links, "links").getClearCaches(); } /** @@ -378,7 +379,7 @@ public String getUploadsLink() { @JsonIgnore public String getUploadsUri() { - return links.getUploads(); + return notNullState(links, "links").getUploads(); } @JsonIgnore diff --git a/src/main/java/com/gooddata/util/Validate.java b/src/main/java/com/gooddata/util/Validate.java index dfa46431a..6d3935cec 100644 --- a/src/main/java/com/gooddata/util/Validate.java +++ b/src/main/java/com/gooddata/util/Validate.java @@ -90,4 +90,19 @@ public static T[] noNullElements(T[] array, String argument) { return array; } + /** + * Throws IllegalStateException if the value is null, otherwise returns the value. + * + * @param value input value + * @param argumentName the name of input argument + * @param the type of the argument + * @return the value + */ + public static T notNullState(T value, String argumentName) { + if (value == null) { + throw new IllegalStateException(argumentName + " is null"); + } + return value; + } + } diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index 6ad9f83e9..e6842e117 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -6,6 +6,7 @@ package com.gooddata.warehouse; import static com.gooddata.util.Validate.notNull; +import static com.gooddata.util.Validate.notNullState; import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.project.Environment; @@ -154,7 +155,7 @@ public Map getLinks() { @JsonIgnore public String getUri() { - return links != null ? links.get(SELF_LINK): null; + return notNullState(links, "links").get(SELF_LINK); } @JsonIgnore diff --git a/src/main/java/com/gooddata/warehouse/WarehouseSchema.java b/src/main/java/com/gooddata/warehouse/WarehouseSchema.java index 44e7d7826..c8057f630 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseSchema.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseSchema.java @@ -5,6 +5,8 @@ */ package com.gooddata.warehouse; +import static com.gooddata.util.Validate.notNullState; + import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -59,11 +61,11 @@ public Map getLinks() { @JsonIgnore public String getUri() { - return links != null ? links.get(SELF_LINK): null; + return notNullState(links, "links").get(SELF_LINK); } @JsonIgnore public String getInstanceUri() { - return links != null ? links.get(INSTANCE_LINK): null; + return notNullState(links, "links").get(INSTANCE_LINK); } } diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUser.java b/src/main/java/com/gooddata/warehouse/WarehouseUser.java index 9369b3ce9..ff2208ea5 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUser.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUser.java @@ -17,6 +17,7 @@ import java.util.Map; import static com.gooddata.util.Validate.notNull; +import static com.gooddata.util.Validate.notNullState; /** * Warehouse user @@ -81,7 +82,7 @@ public String getId() { @JsonIgnore public String getUri() { - return links != null ? links.get(SELF_LINK): null; + return notNullState(links, "links").get(SELF_LINK); } } From aba01962f3c3bbff2de9f6ec4e31d3f23591a637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Wed, 2 Nov 2016 11:02:13 +0100 Subject: [PATCH 200/934] introduce output stage --- src/main/java/com/gooddata/GoodData.java | 12 ++ .../com/gooddata/dataload/OutputStage.java | 140 ++++++++++++++++++ .../gooddata/dataload/OutputStageService.java | 76 ++++++++++ src/main/java/com/gooddata/util/Validate.java | 13 +- .../dataload/OutputStageServiceAT.java | 79 ++++++++++ .../dataload/OutputStageServiceIT.java | 107 +++++++++++++ .../dataload/OutputStageServiceTest.java | 86 +++++++++++ .../gooddata/dataload/OutputStageTest.java | 79 ++++++++++ src/test/resources/dataload/outputStage.json | 8 + .../dataload/outputStageAllFields.json | 12 ++ .../dataload/outputStageNoProcess.json | 11 ++ 11 files changed, 622 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/gooddata/dataload/OutputStage.java create mode 100644 src/main/java/com/gooddata/dataload/OutputStageService.java create mode 100644 src/test/java/com/gooddata/dataload/OutputStageServiceAT.java create mode 100644 src/test/java/com/gooddata/dataload/OutputStageServiceIT.java create mode 100644 src/test/java/com/gooddata/dataload/OutputStageServiceTest.java create mode 100644 src/test/java/com/gooddata/dataload/OutputStageTest.java create mode 100644 src/test/resources/dataload/outputStage.json create mode 100644 src/test/resources/dataload/outputStageAllFields.json create mode 100644 src/test/resources/dataload/outputStageNoProcess.json diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index c1d7f702f..a049771fa 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -7,6 +7,7 @@ import com.gooddata.account.AccountService; import com.gooddata.connector.ConnectorService; +import com.gooddata.dataload.OutputStageService; import com.gooddata.dataload.processes.ProcessService; import com.gooddata.featureflag.FeatureFlagService; import com.gooddata.md.maintenance.ExportImportService; @@ -78,6 +79,7 @@ public class GoodData { private final NotificationService notificationService; private final ExportImportService exportImportService; private final FeatureFlagService featureFlagService; + private final OutputStageService outputStageService; /** * Create instance configured to communicate with GoodData Platform under user with given credentials. @@ -209,6 +211,7 @@ protected GoodData(GoodDataEndpoint endpoint, Authentication authentication, Goo notificationService = new NotificationService(getRestTemplate()); exportImportService = new ExportImportService(getRestTemplate()); featureFlagService = new FeatureFlagService(restTemplate); + outputStageService = new OutputStageService(restTemplate); } static RestTemplate createRestTemplate(GoodDataEndpoint endpoint, HttpClient httpClient) { @@ -422,4 +425,13 @@ public ExportImportService getExportImportService() { public FeatureFlagService getFeatureFlagService() { return featureFlagService; } + + /** + * Get initialized service for output stage management. + * + * @return initialized service for output stage management + */ + public OutputStageService getOutputStageService() { + return outputStageService; + } } diff --git a/src/main/java/com/gooddata/dataload/OutputStage.java b/src/main/java/com/gooddata/dataload/OutputStage.java new file mode 100644 index 000000000..0484236cd --- /dev/null +++ b/src/main/java/com/gooddata/dataload/OutputStage.java @@ -0,0 +1,140 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload; + +import static com.gooddata.util.Validate.notNullState; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.springframework.web.util.UriTemplate; + +import java.util.Map; + +/** + * Output stage. + * For each project there is always one output stage, which always exists. + */ +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonTypeName("outputStage") +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OutputStage { + + public static final String URI = "/gdc/dataload/projects/{id}/outputStage"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); + + private static final String SELF_LINK = "self"; + private static final String OUTPUT_STAGE_DIFF = "outputStageDiff"; + private static final String DATALOAD_PROCESS = "dataloadProcess"; + + private String schema; + private String clientId; + private String outputStagePrefix; + private final Map links; + + @JsonCreator + private OutputStage(@JsonProperty("schema") final String schema, + @JsonProperty("clientId") final String clientId, + @JsonProperty("outputStagePrefix") final String outputStagePrefix, + @JsonProperty("links") final Map links) { + this.schema = schema; + this.clientId = clientId; + this.outputStagePrefix = outputStagePrefix; + this.links = links; + } + + public Map getLinks() { + return links; + } + + /** + * get datawarehouse schema uri {@link com.gooddata.warehouse.WarehouseSchema} + * + * @return warehouse schema, can be null. + */ + @JsonProperty("schema") + public String getSchemaUri() { + return schema; + } + + @JsonProperty("schema") + public void setSchemaUri(final String schemaUri) { + this.schema = schemaUri; + } + + /** + * check if there is associated schema {@link com.gooddata.warehouse.WarehouseSchema} with this output stage + * + * @return true if there is associated schema, else false + */ + public boolean hasSchemaUri() { + return schema != null; + } + + /** + * get client ID + * + * @return client ID, can be null. + */ + public String getClientId() { + return clientId; + } + + public void setClientId(final String clientId) { + this.clientId = clientId; + } + + /** + * check if there is associated client id with this output stage + * + * @return true if there is associated client id, else false + */ + public boolean hasClientId() { + return clientId != null; + } + + /** + * get output stage prefix + * + * @return output stage prefix, can be null. + */ + public String getOutputStagePrefix() { + return outputStagePrefix; + } + + public void setOutputStagePrefix(final String outputStagePrefix) { + this.outputStagePrefix = outputStagePrefix; + } + + /** + * check if there is associated output stage prefix with this output stage + * + * @return true if there is associated output stage prefix, else false + */ + public boolean hasOutputStagePrefix() { + return outputStagePrefix != null; + } + + @JsonIgnore + public String getUri() { + return notNullState(links, "links").get(SELF_LINK); + } + + @JsonIgnore + public String getOutputStageDiffUri() { + return notNullState(links, "links").get(OUTPUT_STAGE_DIFF); + } + + @JsonIgnore + public String getDataloadProcessUri() { + return notNullState(links, "links").get(DATALOAD_PROCESS); + } +} diff --git a/src/main/java/com/gooddata/dataload/OutputStageService.java b/src/main/java/com/gooddata/dataload/OutputStageService.java new file mode 100644 index 000000000..caa5782b3 --- /dev/null +++ b/src/main/java/com/gooddata/dataload/OutputStageService.java @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload; + +import static com.gooddata.util.Validate.isTrue; +import static com.gooddata.util.Validate.notEmpty; +import static com.gooddata.util.Validate.notNull; + +import com.gooddata.AbstractService; +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; +import com.gooddata.project.Project; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +/** + * Service to manage output stage. + */ +public class OutputStageService extends AbstractService { + + /** + * Sets RESTful HTTP Spring template. Should be called from constructor of concrete service extending + * this abstract one. + * @param restTemplate RESTful HTTP Spring template + */ + public OutputStageService(final RestTemplate restTemplate) { + super(restTemplate); + } + + /** + * Get output stage by given URI. + * @param uri output stage uri + * @return output stage object + * @throws com.gooddata.dataload.processes.ProcessNotFoundException when the process doesn't exist + */ + public OutputStage getOutputStageByUri(final String uri) { + notEmpty(uri, "uri"); + isTrue(OutputStage.TEMPLATE.matches(uri), "uri does not match output stage pattern: " + OutputStage.TEMPLATE.toString()); + try { + return restTemplate.getForObject(uri, OutputStage.class); + } catch (RestClientException e) { + throw new GoodDataException("Unable to get output stage " + uri, e); + } + } + + /** + * Get output stage by given project. + * @param project project to which the process belongs + * @return output stage + * @throws com.gooddata.dataload.processes.ProcessNotFoundException when the process doesn't exist + */ + public OutputStage getOutputStage(final Project project) { + notNull(project, "project"); + return getOutputStageByUri(OutputStage.TEMPLATE.expand(project.getId()).toString()); + } + + /** + * Update output stage. + * + * @param outputStage output stage + * @return updated output stage + */ + public OutputStage updateOutputStage(final OutputStage outputStage) { + notNull(outputStage, "outputStage"); + try { + restTemplate.put(outputStage.getUri(), outputStage); + } catch (GoodDataRestException | RestClientException e) { + throw new GoodDataException("Unable to update output stage, uri: " + outputStage.getUri()); + } + + return getOutputStageByUri(outputStage.getUri()); + } +} diff --git a/src/main/java/com/gooddata/util/Validate.java b/src/main/java/com/gooddata/util/Validate.java index 6d3935cec..ccc6e7821 100644 --- a/src/main/java/com/gooddata/util/Validate.java +++ b/src/main/java/com/gooddata/util/Validate.java @@ -82,7 +82,7 @@ public static T noNullElements(T collection, String argum public static T[] noNullElements(T[] array, String argument) { notNull(array, argument); - for (int i = 0; i T notNullState(T value, String argumentName) { return value; } + /** + * throws new {@link IllegalArgumentException} if expression is false + * + * @param expression boolean expression + * @param message of exception + */ + public static void isTrue(boolean expression, String message) { + if (!expression) { + throw new IllegalArgumentException(message); + } + } } diff --git a/src/test/java/com/gooddata/dataload/OutputStageServiceAT.java b/src/test/java/com/gooddata/dataload/OutputStageServiceAT.java new file mode 100644 index 000000000..c2ad5df48 --- /dev/null +++ b/src/test/java/com/gooddata/dataload/OutputStageServiceAT.java @@ -0,0 +1,79 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload; + +import com.gooddata.AbstractGoodDataAT; +import com.gooddata.project.Environment; +import com.gooddata.warehouse.Warehouse; +import com.gooddata.warehouse.WarehouseSchema; +import org.testng.annotations.AfterClass; +import org.testng.annotations.Test; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + +import java.util.concurrent.TimeUnit; + +public class OutputStageServiceAT extends AbstractGoodDataAT { + + private static final String CLIENT_ID = "clientId"; + private static final String PREFIX = "prefix"; + + private final Warehouse warehouse; + private final WarehouseSchema warehouseSchema; + + public OutputStageServiceAT() { + final String warehouseToken = getProperty("warehouseToken"); + final Warehouse wh = new Warehouse(title, warehouseToken); + wh.setEnvironment(Environment.TESTING); + warehouse = gd.getWarehouseService().createWarehouse(wh).get(60, TimeUnit.MINUTES); + warehouseSchema = gd.getWarehouseService().getDefaultWarehouseSchema(warehouse); + } + + @Test(groups = "output_stage", dependsOnGroups = {"warehouse", "project"}) + public void shouldReturnNullObjectWhenNoOutputStage() { + final OutputStage outputStage = gd.getOutputStageService().getOutputStage(project); + + assertThat(outputStage.getSchemaUri(), is(nullValue())); + } + + @Test(groups = "output_stage", dependsOnMethods = "shouldReturnNullObjectWhenNoOutputStage") + public void shouldUpdateOutputStage() { + final OutputStage outputStage = gd.getOutputStageService().getOutputStage(project); + outputStage.setSchemaUri(warehouseSchema.getUri()); + outputStage.setClientId(CLIENT_ID); + outputStage.setOutputStagePrefix(PREFIX); + + final OutputStage updateOutputStage = gd.getOutputStageService().updateOutputStage(outputStage); + + assertThat(updateOutputStage.getSchemaUri(), is(equalTo(warehouseSchema.getUri()))); + assertThat(updateOutputStage.getClientId(), is(equalTo(CLIENT_ID))); + assertThat(updateOutputStage.getOutputStagePrefix(), is(equalTo(PREFIX))); + } + + @Test(groups = "output_stage", dependsOnMethods = "shouldUpdateOutputStage") + public void shouldUpdateOutputStageToNullValues() { + final OutputStage outputStage = gd.getOutputStageService().getOutputStage(project); + outputStage.setSchemaUri(null); + outputStage.setClientId(null); + outputStage.setOutputStagePrefix(null); + + final OutputStage updateOutputStage = gd.getOutputStageService().updateOutputStage(outputStage); + + assertThat(updateOutputStage.getSchemaUri(), is(nullValue())); + assertThat(updateOutputStage.getClientId(), is(nullValue())); + assertThat(updateOutputStage.getOutputStagePrefix(), is(nullValue())); + } + + @AfterClass + public void removeWarehouse() { + if(warehouse != null) { + gd.getWarehouseService().removeWarehouse(warehouse); + } + } +} diff --git a/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java b/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java new file mode 100644 index 000000000..10ef69fe1 --- /dev/null +++ b/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java @@ -0,0 +1,107 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload; + +import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readStringFromResource; +import static net.jadler.Jadler.onRequest; +import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.core.Is.is; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.AbstractGoodDataIT; + +import com.gooddata.project.Project; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.io.InputStream; + +public class OutputStageServiceIT extends AbstractGoodDataIT { + + private static final String OUTPUT_STAGE_ALL_FIELDS = "/dataload/outputStageAllFields.json"; + private static final String OUTPUT_STAGE_NO_PROCESS = "/dataload/outputStageNoProcess.json"; + private static final String OUTPUT_STAGE = "/dataload/outputStage.json"; + + private static final String OUTPUT_STAGE_SCHEMA_URI = "/gdc/datawarehouse/instances/instanceId/schemas/default"; + private static final String CLIENT_ID = "clientId"; + private static final String OUTPUT_STAGE_PREFIX = "outputStagePrefix"; + private static final String PROJECT_ID = "projectId"; + + private OutputStage outputStage; + private Project project; + + @BeforeClass + public void setUp() throws Exception { + outputStage = MAPPER.readValue(readFromResource(OUTPUT_STAGE_ALL_FIELDS), OutputStage.class); + project = mock(Project.class); + when(project.getId()).thenReturn(PROJECT_ID); + } + + @Test + public void shouldGetOutputStageByUri() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(outputStage.getUri()) + .respond() + .withBody(readFromResource(OUTPUT_STAGE_ALL_FIELDS)) + .withStatus(200); + + final OutputStage result = gd.getOutputStageService().getOutputStageByUri(outputStage.getUri()); + + assertThat(result, is(notNullValue())); + assertThat(result.getSchemaUri(), is(equalTo(OUTPUT_STAGE_SCHEMA_URI))); + } + + @Test + public void shouldGetOutputStage() throws Exception { + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(outputStage.getUri()) + .respond() + .withBody(readFromResource(OUTPUT_STAGE_ALL_FIELDS)) + .withStatus(200); + + final OutputStage result = gd.getOutputStageService().getOutputStage(project); + + assertThat(result, is(notNullValue())); + assertThat(result.getSchemaUri(), is(equalTo(OUTPUT_STAGE_SCHEMA_URI))); + } + + @Test + public void shouldUpdateOutputStage() throws Exception { + final InputStream stream = getClass().getResourceAsStream(OUTPUT_STAGE); + final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + + onRequest() + .havingMethodEqualTo("PUT") + .havingPathEqualTo(outputStage.getUri()) + .havingBody(jsonEquals(readStringFromResource(OUTPUT_STAGE_NO_PROCESS))) + .respond() + .withStatus(200); + + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(outputStage.getUri()) + .respond() + .withBody(readFromResource(OUTPUT_STAGE_ALL_FIELDS)) + .withStatus(200); + + outputStage.setSchemaUri(OUTPUT_STAGE_SCHEMA_URI); + outputStage.setClientId(CLIENT_ID); + outputStage.setOutputStagePrefix(OUTPUT_STAGE_PREFIX); + OutputStage result = gd.getOutputStageService().updateOutputStage(outputStage); + + assertThat(result.getSchemaUri(), is(equalTo(OUTPUT_STAGE_SCHEMA_URI))); + assertThat(result.getClientId(), is(equalTo(CLIENT_ID))); + assertThat(result.getOutputStagePrefix(), is(equalTo(OUTPUT_STAGE_PREFIX))); + } +} diff --git a/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java b/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java new file mode 100644 index 000000000..081e4260e --- /dev/null +++ b/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java @@ -0,0 +1,86 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload; + +import static com.gooddata.util.ResourceUtils.readFromResource; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.core.Is.is; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.hamcrest.MatcherAssert.assertThat; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.project.Project; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.web.client.RestTemplate; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +public class OutputStageServiceTest { + + private final ObjectMapper MAPPER = new ObjectMapper(); + + private static final String OUTPUT_STAGE = "/dataload/outputStage.json"; + + @Mock + private RestTemplate restTemplate; + + private OutputStageService outputStageService; + + private OutputStage outputStage; + + @BeforeMethod + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + outputStageService = new OutputStageService(restTemplate); + outputStage = MAPPER.readValue(readFromResource(OUTPUT_STAGE), OutputStage.class); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testGetOutputStageByNullUri() throws Exception { + outputStageService.getOutputStageByUri(null); + } + + @Test + public void testGetOutputStageByUri() throws Exception { + when(restTemplate.getForObject(outputStage.getUri(), OutputStage.class)).thenReturn(outputStage); + + OutputStage outputStageByUri = outputStageService.getOutputStageByUri(outputStage.getUri()); + + assertThat(outputStageByUri, is(equalTo(outputStage))); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testGetOutputStageByNullProject() throws Exception { + outputStageService.getOutputStage(null); + } + + @Test + public void testGetOutputStage() throws Exception { + Project project = mock(Project.class); + when(project.getId()).thenReturn("projectId"); + when(restTemplate.getForObject(outputStage.getUri(), OutputStage.class)).thenReturn(outputStage); + + OutputStage outputStageByProject = outputStageService.getOutputStage(project); + + assertThat(outputStageByProject, is(equalTo(outputStage))); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testUpdateOutputStageNullOutputStage() throws Exception { + outputStageService.updateOutputStage(null); + } + + @Test + public void testUpdateOutputStage() throws Exception { + outputStageService.updateOutputStage(outputStage); + + verify(restTemplate,times(1)).put(outputStage.getUri(), outputStage); + } +} \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataload/OutputStageTest.java b/src/test/java/com/gooddata/dataload/OutputStageTest.java new file mode 100644 index 000000000..c03cb1bcd --- /dev/null +++ b/src/test/java/com/gooddata/dataload/OutputStageTest.java @@ -0,0 +1,79 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload; + +import static com.gooddata.JsonMatchers.serializesToJson; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import java.io.InputStream; +import java.util.LinkedHashMap; +import java.util.Map; + +public class OutputStageTest { + + private static final String SCHEMA_URI = "/gdc/datawarehouse/instances/instanceId/schemas/default"; + private static final String SELF_LINK = "/gdc/dataload/projects/projectId/outputStage"; + private static final String SQL_DIFF = "/gdc/dataload/projects/projectId/outputStage/sqlDiff"; + private static final String PROCESS_URI = "/gdc/projects/projectId/dataload/processes/processId"; + private static final String CLIENT_ID = "clientId"; + private static final String OUTPUT_STAGE_PREFIX = "outputStagePrefix"; + + private static final Map LINKS = new LinkedHashMap() {{ + put("self", SELF_LINK); + put("outputStageDiff", SQL_DIFF); + put("dataloadProcess", PROCESS_URI); + }}; + + @Test + public void testDeserializationAllFields() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataload/outputStageAllFields.json"); + final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + + assertThat(outputStage.getSchemaUri(), is(equalTo(SCHEMA_URI))); + assertThat(outputStage.getClientId(), is(equalTo(CLIENT_ID))); + assertThat(outputStage.getOutputStagePrefix(), is(equalTo(OUTPUT_STAGE_PREFIX))); + assertThat(outputStage.getLinks(), is(equalTo(LINKS))); + assertThat(outputStage.getUri(), is(equalTo(SELF_LINK))); + assertThat(outputStage.getOutputStageDiffUri(), is(equalTo(SQL_DIFF))); + assertThat(outputStage.getDataloadProcessUri(), is(equalTo(PROCESS_URI))); + assertThat(outputStage.hasSchemaUri(), is(true)); + assertThat(outputStage.hasClientId(), is(true)); + assertThat(outputStage.hasOutputStagePrefix(), is(true)); + } + + @Test + public void testDeserialization() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataload/outputStage.json"); + final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + + assertThat(outputStage.getSchemaUri(), is(nullValue())); + assertThat(outputStage.getClientId(), is(nullValue())); + assertThat(outputStage.getOutputStagePrefix(), is(nullValue())); + assertThat(outputStage.getUri(), is(equalTo(SELF_LINK))); + assertThat(outputStage.getOutputStageDiffUri(), is(equalTo(SQL_DIFF))); + assertThat(outputStage.getDataloadProcessUri(), is(nullValue())); + assertThat(outputStage.hasSchemaUri(), is(false)); + assertThat(outputStage.hasClientId(), is(false)); + assertThat(outputStage.hasOutputStagePrefix(), is(false)); + } + + @Test(dependsOnMethods = "testDeserialization") + public void testSerializationAfterDeserialization() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataload/outputStage.json"); + final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + + outputStage.setSchemaUri(SCHEMA_URI); + outputStage.setClientId(CLIENT_ID); + outputStage.setOutputStagePrefix(OUTPUT_STAGE_PREFIX); + assertThat(outputStage, serializesToJson("/dataload/outputStageNoProcess.json")); + } +} diff --git a/src/test/resources/dataload/outputStage.json b/src/test/resources/dataload/outputStage.json new file mode 100644 index 000000000..bb8aa0708 --- /dev/null +++ b/src/test/resources/dataload/outputStage.json @@ -0,0 +1,8 @@ +{ + "outputStage" : { + "links" : { + "self" : "/gdc/dataload/projects/projectId/outputStage", + "outputStageDiff" : "/gdc/dataload/projects/projectId/outputStage/sqlDiff" + } + } +} \ No newline at end of file diff --git a/src/test/resources/dataload/outputStageAllFields.json b/src/test/resources/dataload/outputStageAllFields.json new file mode 100644 index 000000000..5044ff6d1 --- /dev/null +++ b/src/test/resources/dataload/outputStageAllFields.json @@ -0,0 +1,12 @@ +{ + "outputStage" : { + "schema" : "/gdc/datawarehouse/instances/instanceId/schemas/default", + "clientId" : "clientId", + "outputStagePrefix" : "outputStagePrefix", + "links" : { + "self" : "/gdc/dataload/projects/projectId/outputStage", + "outputStageDiff" : "/gdc/dataload/projects/projectId/outputStage/sqlDiff", + "dataloadProcess" : "/gdc/projects/projectId/dataload/processes/processId" + } + } +} \ No newline at end of file diff --git a/src/test/resources/dataload/outputStageNoProcess.json b/src/test/resources/dataload/outputStageNoProcess.json new file mode 100644 index 000000000..8f1ae3caa --- /dev/null +++ b/src/test/resources/dataload/outputStageNoProcess.json @@ -0,0 +1,11 @@ +{ + "outputStage" : { + "schema" : "/gdc/datawarehouse/instances/instanceId/schemas/default", + "clientId" : "clientId", + "outputStagePrefix" : "outputStagePrefix", + "links" : { + "self" : "/gdc/dataload/projects/projectId/outputStage", + "outputStageDiff" : "/gdc/dataload/projects/projectId/outputStage/sqlDiff" + } + } +} \ No newline at end of file From 33a1460e81f51b2bf08784d93d8aaffd401fa6ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 15 Dec 2016 23:49:00 +0100 Subject: [PATCH 201/934] remove unused imports --- src/main/java/com/gooddata/UriPrefixer.java | 1 - .../com/gooddata/collections/PageableListDeserializer.java | 1 - src/main/java/com/gooddata/featureflag/FeatureFlags.java | 1 - src/main/java/com/gooddata/gdc/Gdc.java | 5 ----- src/main/java/com/gooddata/md/ReportAttachment.java | 1 - .../com/gooddata/md/maintenance/ExportImportService.java | 1 - src/main/java/com/gooddata/md/report/Total.java | 1 - src/main/java/com/gooddata/notification/ProjectEvent.java | 1 - src/main/java/com/gooddata/project/UsersDeserializer.java | 1 - src/main/java/com/gooddata/util/GDDateDeserializer.java | 1 - src/main/java/com/gooddata/warehouse/WarehouseSchemas.java | 1 - src/main/java/com/gooddata/warehouse/Warehouses.java | 1 - src/test/java/com/gooddata/Example.java | 1 - src/test/java/com/gooddata/GoodDataRestExceptionTest.java | 4 ---- src/test/java/com/gooddata/dataset/DatasetServiceAT.java | 1 - src/test/java/com/gooddata/dataset/DatasetServiceIT.java | 3 --- src/test/java/com/gooddata/dataset/DatasetTest.java | 2 -- src/test/java/com/gooddata/dataset/UploadsInfoTest.java | 4 ---- src/test/java/com/gooddata/gdc/DataStoreServiceIT.java | 1 - src/test/java/com/gooddata/gdc/DatastoreServiceAT.java | 1 - src/test/java/com/gooddata/gdc/GdcServiceIT.java | 1 - src/test/java/com/gooddata/md/AttributeElementsTest.java | 1 - src/test/java/com/gooddata/md/EntryTest.java | 1 - src/test/java/com/gooddata/md/MetaTest.java | 1 - src/test/java/com/gooddata/md/MetadataServiceAT.java | 1 - src/test/java/com/gooddata/md/MetadataServiceIT.java | 2 -- src/test/java/com/gooddata/md/ScheduledMailTest.java | 2 -- .../com/gooddata/md/maintenance/ExportImportServiceTest.java | 1 - .../java/com/gooddata/md/report/AttributeInGridTest.java | 2 -- src/test/java/com/gooddata/md/report/GridTest.java | 1 - src/test/java/com/gooddata/model/ModelServiceIT.java | 1 - src/test/java/com/gooddata/project/ProjectServiceIT.java | 1 - src/test/java/com/gooddata/project/ProjectServiceTest.java | 1 - .../gooddata/project/ProjectValidationResultItemTest.java | 1 - src/test/java/com/gooddata/util/GDDateClass.java | 1 - src/test/java/com/gooddata/util/GDDateDeserializerTest.java | 2 -- src/test/java/com/gooddata/util/GDDateSerializerTest.java | 2 -- src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java | 1 - 38 files changed, 56 deletions(-) diff --git a/src/main/java/com/gooddata/UriPrefixer.java b/src/main/java/com/gooddata/UriPrefixer.java index ed0f74a79..9b8a82148 100644 --- a/src/main/java/com/gooddata/UriPrefixer.java +++ b/src/main/java/com/gooddata/UriPrefixer.java @@ -12,7 +12,6 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; import static org.springframework.util.StringUtils.trimLeadingCharacter; -import static org.springframework.util.StringUtils.trimTrailingCharacter; /** * Used internally by GoodData SDK to hold and set URI prefix (hostname and port) of all requests. diff --git a/src/main/java/com/gooddata/collections/PageableListDeserializer.java b/src/main/java/com/gooddata/collections/PageableListDeserializer.java index a4d8e2a03..007bfbdfe 100644 --- a/src/main/java/com/gooddata/collections/PageableListDeserializer.java +++ b/src/main/java/com/gooddata/collections/PageableListDeserializer.java @@ -12,7 +12,6 @@ import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.jsontype.TypeDeserializer; import java.io.IOException; import java.util.ArrayList; diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlags.java b/src/main/java/com/gooddata/featureflag/FeatureFlags.java index 6b1331ff9..e57305609 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlags.java @@ -17,7 +17,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; import static com.gooddata.util.Validate.notEmpty; import static java.util.stream.Collectors.toMap; diff --git a/src/main/java/com/gooddata/gdc/Gdc.java b/src/main/java/com/gooddata/gdc/Gdc.java index 63f53d8de..4d449030d 100644 --- a/src/main/java/com/gooddata/gdc/Gdc.java +++ b/src/main/java/com/gooddata/gdc/Gdc.java @@ -6,12 +6,7 @@ package com.gooddata.gdc; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; import com.gooddata.gdc.AboutLinks.Link; import java.util.List; diff --git a/src/main/java/com/gooddata/md/ReportAttachment.java b/src/main/java/com/gooddata/md/ReportAttachment.java index d66bde961..c392843ce 100644 --- a/src/main/java/com/gooddata/md/ReportAttachment.java +++ b/src/main/java/com/gooddata/md/ReportAttachment.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Map; diff --git a/src/main/java/com/gooddata/md/maintenance/ExportImportService.java b/src/main/java/com/gooddata/md/maintenance/ExportImportService.java index 2e0726f3a..95db3400d 100644 --- a/src/main/java/com/gooddata/md/maintenance/ExportImportService.java +++ b/src/main/java/com/gooddata/md/maintenance/ExportImportService.java @@ -10,7 +10,6 @@ import com.gooddata.AbstractPollHandler; import com.gooddata.AbstractService; import com.gooddata.FutureResult; -import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; import com.gooddata.PollResult; import com.gooddata.gdc.TaskStatus; diff --git a/src/main/java/com/gooddata/md/report/Total.java b/src/main/java/com/gooddata/md/report/Total.java index f0cbd4839..51c464ee0 100644 --- a/src/main/java/com/gooddata/md/report/Total.java +++ b/src/main/java/com/gooddata/md/report/Total.java @@ -5,7 +5,6 @@ */ package com.gooddata.md.report; -import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import static com.gooddata.util.Validate.notNull; diff --git a/src/main/java/com/gooddata/notification/ProjectEvent.java b/src/main/java/com/gooddata/notification/ProjectEvent.java index 6adfff901..1f1eacd01 100644 --- a/src/main/java/com/gooddata/notification/ProjectEvent.java +++ b/src/main/java/com/gooddata/notification/ProjectEvent.java @@ -14,7 +14,6 @@ import org.springframework.web.util.UriTemplate; -import java.util.Collections; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/gooddata/project/UsersDeserializer.java b/src/main/java/com/gooddata/project/UsersDeserializer.java index c740f3192..75ce4ec7d 100644 --- a/src/main/java/com/gooddata/project/UsersDeserializer.java +++ b/src/main/java/com/gooddata/project/UsersDeserializer.java @@ -7,7 +7,6 @@ import com.gooddata.collections.PageableListDeserializer; import com.gooddata.collections.Paging; -import com.gooddata.dataload.processes.Schedule; import java.util.List; import java.util.Map; diff --git a/src/main/java/com/gooddata/util/GDDateDeserializer.java b/src/main/java/com/gooddata/util/GDDateDeserializer.java index b4f7aa912..f0c527536 100644 --- a/src/main/java/com/gooddata/util/GDDateDeserializer.java +++ b/src/main/java/com/gooddata/util/GDDateDeserializer.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; -import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormatter; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseSchemas.java b/src/main/java/com/gooddata/warehouse/WarehouseSchemas.java index 2b4256f5a..42c99a95f 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseSchemas.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseSchemas.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.gooddata.collections.PageableList; import com.gooddata.collections.Paging; import org.springframework.web.util.UriTemplate; diff --git a/src/main/java/com/gooddata/warehouse/Warehouses.java b/src/main/java/com/gooddata/warehouse/Warehouses.java index 96cd30754..e36d815a8 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouses.java +++ b/src/main/java/com/gooddata/warehouse/Warehouses.java @@ -6,7 +6,6 @@ package com.gooddata.warehouse; import com.gooddata.collections.PageableList; -import com.gooddata.collections.PageableListSerializer; import com.gooddata.collections.Paging; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeInfo; diff --git a/src/test/java/com/gooddata/Example.java b/src/test/java/com/gooddata/Example.java index f31da2f74..6182bd3f8 100644 --- a/src/test/java/com/gooddata/Example.java +++ b/src/test/java/com/gooddata/Example.java @@ -17,7 +17,6 @@ import com.gooddata.md.report.AttributeInGrid; import com.gooddata.md.report.GridReportDefinitionContent; import com.gooddata.md.report.MetricElement; -import com.gooddata.md.report.MetricGroup; import com.gooddata.md.report.Report; import com.gooddata.md.report.ReportDefinition; import com.gooddata.model.ModelDiff; diff --git a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java index fe35ba5ac..22c133197 100644 --- a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java +++ b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java @@ -12,11 +12,7 @@ import java.io.InputStream; import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; -import static org.testng.Assert.*; public class GoodDataRestExceptionTest { @Test diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java index 6bb89ffdb..a97849779 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceAT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceAT.java @@ -10,7 +10,6 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.greaterThan; import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import com.gooddata.AbstractGoodDataAT; diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index d00d95847..cf5f5edb5 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -23,9 +23,6 @@ import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; public class DatasetServiceIT extends AbstractGoodDataIT { diff --git a/src/test/java/com/gooddata/dataset/DatasetTest.java b/src/test/java/com/gooddata/dataset/DatasetTest.java index 90aa076ea..53e132a2e 100644 --- a/src/test/java/com/gooddata/dataset/DatasetTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetTest.java @@ -9,12 +9,10 @@ import org.testng.annotations.Test; import java.io.InputStream; -import java.util.Collection; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasSize; public class DatasetTest { diff --git a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java index 939e1dd12..083b33ee7 100644 --- a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java @@ -6,14 +6,10 @@ package com.gooddata.dataset; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.closeTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; -import static org.testng.Assert.assertTrue; import com.fasterxml.jackson.databind.ObjectMapper; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; import org.testng.annotations.Test; import java.io.InputStream; diff --git a/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java b/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java index dbd201c4c..25e0e8cf6 100644 --- a/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java +++ b/src/test/java/com/gooddata/gdc/DataStoreServiceIT.java @@ -6,7 +6,6 @@ package com.gooddata.gdc; import com.gooddata.AbstractGoodDataIT; -import com.gooddata.util.ResourceUtils; import org.apache.commons.io.IOUtils; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java index 068a869a3..274fbf506 100644 --- a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java +++ b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java @@ -10,7 +10,6 @@ import com.gooddata.GoodDataRestException; import org.apache.commons.io.IOUtils; import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.File; diff --git a/src/test/java/com/gooddata/gdc/GdcServiceIT.java b/src/test/java/com/gooddata/gdc/GdcServiceIT.java index 98f503208..e52b75360 100644 --- a/src/test/java/com/gooddata/gdc/GdcServiceIT.java +++ b/src/test/java/com/gooddata/gdc/GdcServiceIT.java @@ -6,7 +6,6 @@ package com.gooddata.gdc; import com.gooddata.AbstractGoodDataIT; -import com.gooddata.util.ResourceUtils; import org.testng.annotations.Test; import static com.gooddata.util.ResourceUtils.readFromResource; diff --git a/src/test/java/com/gooddata/md/AttributeElementsTest.java b/src/test/java/com/gooddata/md/AttributeElementsTest.java index a725b9fb3..3da82955d 100644 --- a/src/test/java/com/gooddata/md/AttributeElementsTest.java +++ b/src/test/java/com/gooddata/md/AttributeElementsTest.java @@ -15,7 +15,6 @@ import java.io.InputStream; import java.util.List; -import java.util.Set; public class AttributeElementsTest { diff --git a/src/test/java/com/gooddata/md/EntryTest.java b/src/test/java/com/gooddata/md/EntryTest.java index 1feb3453a..176f2e0bf 100644 --- a/src/test/java/com/gooddata/md/EntryTest.java +++ b/src/test/java/com/gooddata/md/EntryTest.java @@ -10,7 +10,6 @@ import org.joda.time.DateTimeZone; import org.testng.annotations.Test; -import java.util.Collections; import java.util.Set; import static com.gooddata.JsonMatchers.serializesToJson; diff --git a/src/test/java/com/gooddata/md/MetaTest.java b/src/test/java/com/gooddata/md/MetaTest.java index 1ef3d2916..8078fa164 100644 --- a/src/test/java/com/gooddata/md/MetaTest.java +++ b/src/test/java/com/gooddata/md/MetaTest.java @@ -10,7 +10,6 @@ import org.joda.time.DateTimeZone; import org.testng.annotations.Test; -import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; diff --git a/src/test/java/com/gooddata/md/MetadataServiceAT.java b/src/test/java/com/gooddata/md/MetadataServiceAT.java index 2aa6ff219..86a331a28 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceAT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceAT.java @@ -19,7 +19,6 @@ import com.gooddata.md.report.Filter; import com.gooddata.md.report.GridReportDefinitionContent; import com.gooddata.md.report.MetricElement; -import com.gooddata.md.report.MetricGroup; import com.gooddata.md.report.Report; import org.joda.time.LocalDate; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/md/MetadataServiceIT.java b/src/test/java/com/gooddata/md/MetadataServiceIT.java index d8997218d..e6a0e552b 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceIT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceIT.java @@ -9,8 +9,6 @@ import com.gooddata.gdc.UriResponse; import com.gooddata.md.report.ReportDefinition; import com.gooddata.project.Project; -import com.gooddata.util.ResourceUtils; -import net.javacrumbs.jsonunit.JsonMatchers; import org.hamcrest.Matchers; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/md/ScheduledMailTest.java b/src/test/java/com/gooddata/md/ScheduledMailTest.java index 668682810..9f7ac5246 100644 --- a/src/test/java/com/gooddata/md/ScheduledMailTest.java +++ b/src/test/java/com/gooddata/md/ScheduledMailTest.java @@ -11,10 +11,8 @@ import org.joda.time.LocalDate; import org.testng.annotations.Test; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java index 71dfe8d7d..65636513e 100644 --- a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java +++ b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceTest.java @@ -9,7 +9,6 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.when; -import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; import com.gooddata.gdc.UriResponse; import com.gooddata.project.Project; diff --git a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java index 4c6b0769c..464fc7e05 100644 --- a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java +++ b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java @@ -11,7 +11,6 @@ import org.testng.annotations.Test; import java.io.InputStream; -import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -20,7 +19,6 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.isOneOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index b84b5ac29..16c0fd052 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -9,7 +9,6 @@ import org.hamcrest.CoreMatchers; import org.testng.annotations.Test; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; diff --git a/src/test/java/com/gooddata/model/ModelServiceIT.java b/src/test/java/com/gooddata/model/ModelServiceIT.java index 9356160a1..bfce9a281 100644 --- a/src/test/java/com/gooddata/model/ModelServiceIT.java +++ b/src/test/java/com/gooddata/model/ModelServiceIT.java @@ -9,7 +9,6 @@ import com.gooddata.gdc.AsyncTask; import com.gooddata.gdc.TaskStatus; import com.gooddata.project.Project; -import com.gooddata.util.ResourceUtils; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/project/ProjectServiceIT.java b/src/test/java/com/gooddata/project/ProjectServiceIT.java index 86fad2eee..e67ad1f50 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceIT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceIT.java @@ -20,7 +20,6 @@ import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.empty; -import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; diff --git a/src/test/java/com/gooddata/project/ProjectServiceTest.java b/src/test/java/com/gooddata/project/ProjectServiceTest.java index 3adab14e7..ee4782f6f 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceTest.java +++ b/src/test/java/com/gooddata/project/ProjectServiceTest.java @@ -22,7 +22,6 @@ import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasSize; import static org.mockito.Mockito.when; diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java index f260c4c2a..301c00d7c 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java @@ -11,7 +11,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; public class ProjectValidationResultItemTest { diff --git a/src/test/java/com/gooddata/util/GDDateClass.java b/src/test/java/com/gooddata/util/GDDateClass.java index c1829de8e..617567386 100644 --- a/src/test/java/com/gooddata/util/GDDateClass.java +++ b/src/test/java/com/gooddata/util/GDDateClass.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.joda.time.DateTime; import org.joda.time.LocalDate; public class GDDateClass { diff --git a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java index 0cac3698b..2119896f9 100644 --- a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java @@ -7,8 +7,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/util/GDDateSerializerTest.java b/src/test/java/com/gooddata/util/GDDateSerializerTest.java index 5aa2e1537..6abd62593 100644 --- a/src/test/java/com/gooddata/util/GDDateSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateSerializerTest.java @@ -7,8 +7,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; import org.testng.annotations.Test; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java index 64c2498fe..beda0bd14 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java @@ -12,7 +12,6 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.startsWith; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; From 14bac21842a1ad42997ad28d3e54a648b0f51d0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 15 Dec 2016 23:51:57 +0100 Subject: [PATCH 202/934] missing finals --- .../connector/IntegrationProcessStatus.java | 2 +- .../gooddata/dataload/processes/AsyncTask.java | 2 +- .../gooddata/dataload/processes/Schedule.java | 2 +- src/main/java/com/gooddata/dataset/Uploads.java | 2 +- .../com/gooddata/featureflag/FeatureFlag.java | 2 +- .../gooddata/featureflag/ProjectFeatureFlag.java | 2 +- src/main/java/com/gooddata/gdc/AsyncTask.java | 2 +- src/main/java/com/gooddata/md/AttributeSort.java | 4 ++-- .../java/com/gooddata/md/IdentifierAndUri.java | 4 ++-- src/main/java/com/gooddata/md/ScheduledMail.java | 2 +- .../com/gooddata/md/report/AttributeInGrid.java | 2 +- src/main/java/com/gooddata/model/ModelDiff.java | 6 +++--- src/main/java/com/gooddata/project/Project.java | 8 ++++---- src/main/java/com/gooddata/project/Role.java | 2 +- src/main/java/com/gooddata/project/User.java | 16 ++++++++-------- .../com/gooddata/util/ResponseErrorHandler.java | 2 +- .../java/com/gooddata/warehouse/Warehouse.java | 2 +- .../com/gooddata/warehouse/WarehouseUser.java | 6 +++--- src/test/java/com/gooddata/JsonMatchers.java | 2 +- src/test/java/com/gooddata/util/GDDateClass.java | 2 +- .../java/com/gooddata/util/GDDateTimeClass.java | 2 +- .../java/com/gooddata/util/ISODateClass.java | 2 +- 22 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java index 94a058d2d..e87c4a62b 100644 --- a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java +++ b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java @@ -35,7 +35,7 @@ public class IntegrationProcessStatus { private final Status status; private final DateTime started; private final DateTime finished; - private Map links; + private final Map links; @JsonCreator protected IntegrationProcessStatus(@JsonProperty("status") Status status, diff --git a/src/main/java/com/gooddata/dataload/processes/AsyncTask.java b/src/main/java/com/gooddata/dataload/processes/AsyncTask.java index afd76d510..d434ad847 100644 --- a/src/main/java/com/gooddata/dataload/processes/AsyncTask.java +++ b/src/main/java/com/gooddata/dataload/processes/AsyncTask.java @@ -25,7 +25,7 @@ class AsyncTask { @JsonProperty - private Links links; + private final Links links; @JsonCreator private AsyncTask(@JsonProperty("links") Links links) { diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index 2a62d2899..1d3e22337 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -45,7 +45,7 @@ public class Schedule { private static final String PROCESS_ID = "PROCESS_ID"; private static final String EXECUTABLE = "EXECUTABLE"; - private String type; + private final String type; private String state; private String cron; private String timezone; diff --git a/src/main/java/com/gooddata/dataset/Uploads.java b/src/main/java/com/gooddata/dataset/Uploads.java index 3edf117bd..9b386424c 100644 --- a/src/main/java/com/gooddata/dataset/Uploads.java +++ b/src/main/java/com/gooddata/dataset/Uploads.java @@ -21,7 +21,7 @@ @JsonIgnoreProperties(ignoreUnknown = true) class Uploads { - private Collection uploads; + private final Collection uploads; Uploads(@JsonProperty("uploads") Collection uploads) { this.uploads = uploads; diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlag.java b/src/main/java/com/gooddata/featureflag/FeatureFlag.java index 5e350a9ab..a5b008278 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlag.java @@ -14,7 +14,7 @@ public class FeatureFlag { private final String name; - private boolean enabled; + private final boolean enabled; public FeatureFlag(final String name, final boolean enabled) { this.name = notNull(name, "name"); diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java index f40b7d77f..2b1b0e775 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java @@ -28,7 +28,7 @@ public class ProjectFeatureFlag { private boolean enabled; @JsonIgnore - private Links links; + private final Links links; /** * Creates new project feature flag which is by default enabled (true). diff --git a/src/main/java/com/gooddata/gdc/AsyncTask.java b/src/main/java/com/gooddata/gdc/AsyncTask.java index e17dcb870..702ded79b 100644 --- a/src/main/java/com/gooddata/gdc/AsyncTask.java +++ b/src/main/java/com/gooddata/gdc/AsyncTask.java @@ -24,7 +24,7 @@ public class AsyncTask { @JsonProperty - private Link link; + private final Link link; @JsonCreator private AsyncTask(@JsonProperty("link") Link link) { diff --git a/src/main/java/com/gooddata/md/AttributeSort.java b/src/main/java/com/gooddata/md/AttributeSort.java index 73fedb906..d00956326 100644 --- a/src/main/java/com/gooddata/md/AttributeSort.java +++ b/src/main/java/com/gooddata/md/AttributeSort.java @@ -27,8 +27,8 @@ @JsonSerialize(using = AttributeSort.Serializer.class) class AttributeSort { - static String PK = "pk"; - static String BY_USED_DF = "byUsedDF"; + static final String PK = "pk"; + static final String BY_USED_DF = "byUsedDF"; private final String value; private final boolean linkType; diff --git a/src/main/java/com/gooddata/md/IdentifierAndUri.java b/src/main/java/com/gooddata/md/IdentifierAndUri.java index d776940da..aa7bfb1d9 100644 --- a/src/main/java/com/gooddata/md/IdentifierAndUri.java +++ b/src/main/java/com/gooddata/md/IdentifierAndUri.java @@ -13,9 +13,9 @@ */ class IdentifierAndUri { - private String identifier; + private final String identifier; - private String uri; + private final String uri; @JsonCreator IdentifierAndUri(@JsonProperty("identifier") String identifier, @JsonProperty("uri") String uri) { diff --git a/src/main/java/com/gooddata/md/ScheduledMail.java b/src/main/java/com/gooddata/md/ScheduledMail.java index 8a2725091..2a485287b 100644 --- a/src/main/java/com/gooddata/md/ScheduledMail.java +++ b/src/main/java/com/gooddata/md/ScheduledMail.java @@ -24,7 +24,7 @@ public class ScheduledMail extends AbstractObj implements Queryable, Updatable { @JsonProperty("content") - private Content content; + private final Content content; @JsonCreator ScheduledMail(@JsonProperty("meta") Meta meta, @JsonProperty("content") Content content) { diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 28e903019..11cd22818 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -31,7 +31,7 @@ public class AttributeInGrid implements GridElement { private final String uri; private final String alias; - private List> totals; + private final List> totals; @JsonCreator AttributeInGrid(@JsonProperty("uri") String uri, @JsonProperty("totals") List> totals, diff --git a/src/main/java/com/gooddata/model/ModelDiff.java b/src/main/java/com/gooddata/model/ModelDiff.java index c5d1892e2..fed0467c0 100644 --- a/src/main/java/com/gooddata/model/ModelDiff.java +++ b/src/main/java/com/gooddata/model/ModelDiff.java @@ -109,9 +109,9 @@ private UpdateScript getUpdateScriptByFlags(final boolean preserveData, final bo @JsonIgnoreProperties(ignoreUnknown = true) static class UpdateScript { - private List maqlChunks; - private Boolean preserveData; - private Boolean cascadeDrops; + private final List maqlChunks; + private final Boolean preserveData; + private final Boolean cascadeDrops; /** * Create set of MAQL DDL scripts with one variant of side-effects (truncation of loaded data, drops of related objects...). diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index e6a546840..be003f981 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -42,10 +42,10 @@ public class Project { private static final Set PREPARING_STATES = new HashSet<>(asList("PREPARING", "PREPARED", "LOADING")); @JsonProperty("content") - private ProjectContent content; + private final ProjectContent content; @JsonProperty("meta") - private ProjectMeta meta; + private final ProjectMeta meta; @JsonIgnore private Links links; @@ -427,13 +427,13 @@ public void setEnvironment(final Environment environment) { private static class ProjectContent { @JsonProperty("authorizationToken") - private String authorizationToken; + private final String authorizationToken; @JsonProperty("driver") private String driver; @JsonProperty("guidedNavigation") - private String guidedNavigation; + private final String guidedNavigation; @JsonIgnore private String cluster; diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index 2ad256603..c7846719d 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -43,7 +43,7 @@ public class Role { @JsonSerialize(contentUsing = BooleanStringSerializer.class) private final Map permissions; - private Meta meta; + private final Meta meta; private final Map links; diff --git a/src/main/java/com/gooddata/project/User.java b/src/main/java/com/gooddata/project/User.java index 5f295a088..858c24ffd 100644 --- a/src/main/java/com/gooddata/project/User.java +++ b/src/main/java/com/gooddata/project/User.java @@ -23,7 +23,7 @@ @JsonInclude(JsonInclude.Include.NON_NULL) public class User { - private UserContent content; + private final UserContent content; @JsonCreator User(@JsonProperty("content") final UserContent content) { @@ -63,25 +63,25 @@ public String getPhoneNumber() { private static class UserContent { @JsonProperty("email") - private String email; + private final String email; @JsonProperty("firstname") - private String firstName; + private final String firstName; @JsonProperty("userRoles") - private List userRoles; + private final List userRoles; @JsonProperty("phonenumber") - private String phoneNumber; + private final String phoneNumber; @JsonProperty("status") - private String status; + private final String status; @JsonProperty("lastname") - private String lastName; + private final String lastName; @JsonProperty("login") - private String login; + private final String login; @JsonCreator public UserContent(@JsonProperty("email") final String email, diff --git a/src/main/java/com/gooddata/util/ResponseErrorHandler.java b/src/main/java/com/gooddata/util/ResponseErrorHandler.java index ca64aa79a..c9d0a3f72 100644 --- a/src/main/java/com/gooddata/util/ResponseErrorHandler.java +++ b/src/main/java/com/gooddata/util/ResponseErrorHandler.java @@ -24,7 +24,7 @@ */ public class ResponseErrorHandler extends DefaultResponseErrorHandler { - private HttpMessageConverterExtractor gdcErrorExtractor; + private final HttpMessageConverterExtractor gdcErrorExtractor; public ResponseErrorHandler(List> messageConverters) { gdcErrorExtractor = new HttpMessageConverterExtractor<>(GdcError.class, diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index e6842e117..944c64c1f 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -46,7 +46,7 @@ public class Warehouse { private String title; private String description; - private String authorizationToken; + private final String authorizationToken; private DateTime created; private DateTime updated; private String createdBy; diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUser.java b/src/main/java/com/gooddata/warehouse/WarehouseUser.java index ff2208ea5..d695e866e 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUser.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUser.java @@ -35,9 +35,9 @@ public class WarehouseUser { private static final String SELF_LINK = "self"; - private String role; - private String profile; - private String login; + private final String role; + private final String profile; + private final String login; private Map links; public WarehouseUser(final String role, final String profile, final String login) { diff --git a/src/test/java/com/gooddata/JsonMatchers.java b/src/test/java/com/gooddata/JsonMatchers.java index f05c8c814..a1afe313f 100644 --- a/src/test/java/com/gooddata/JsonMatchers.java +++ b/src/test/java/com/gooddata/JsonMatchers.java @@ -57,7 +57,7 @@ public static Matcher isJsonString(final String expectedResourceName) { private static class JsonFileMatcher extends BaseMatcher { - private String expectedResourceName; + private final String expectedResourceName; private String expectedJsonString; private String actualJsonString; private String errorString; diff --git a/src/test/java/com/gooddata/util/GDDateClass.java b/src/test/java/com/gooddata/util/GDDateClass.java index 617567386..6db28c7c9 100644 --- a/src/test/java/com/gooddata/util/GDDateClass.java +++ b/src/test/java/com/gooddata/util/GDDateClass.java @@ -12,7 +12,7 @@ import org.joda.time.LocalDate; public class GDDateClass { - private LocalDate date; + private final LocalDate date; @JsonCreator public GDDateClass(@JsonProperty("date") @JsonDeserialize(using = GDDateDeserializer.class) final LocalDate date) { diff --git a/src/test/java/com/gooddata/util/GDDateTimeClass.java b/src/test/java/com/gooddata/util/GDDateTimeClass.java index b3b5de704..7fb428981 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeClass.java +++ b/src/test/java/com/gooddata/util/GDDateTimeClass.java @@ -13,7 +13,7 @@ class GDDateTimeClass { - private DateTime date; + private final DateTime date; @JsonCreator public GDDateTimeClass(@JsonProperty("date") @JsonDeserialize(using = GDDateTimeDeserializer.class) final DateTime date) { diff --git a/src/test/java/com/gooddata/util/ISODateClass.java b/src/test/java/com/gooddata/util/ISODateClass.java index c6be9f531..aaae96993 100644 --- a/src/test/java/com/gooddata/util/ISODateClass.java +++ b/src/test/java/com/gooddata/util/ISODateClass.java @@ -13,7 +13,7 @@ class ISODateClass { - private DateTime date; + private final DateTime date; @JsonCreator public ISODateClass(@JsonProperty("date") @JsonDeserialize(using = ISODateTimeDeserializer.class) final DateTime date) { From 5c1818b4a631cf4189b4d66c2ee564224d9b5281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 15 Dec 2016 23:53:37 +0100 Subject: [PATCH 203/934] IOException in finally --- .../java/com/gooddata/dataload/processes/ProcessServiceAT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index 7c05fa2cd..9f491bac7 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -53,7 +53,7 @@ public void createProcess() throws Exception { copy("workspace.prm", dir); process = gd.getProcessService().createProcess(project, new DataloadProcess(title, ProcessType.GRAPH), dir); } finally { - FileUtils.deleteDirectory(dir); + FileUtils.deleteQuietly(dir); } } From ebc20fe1d1e2b6d0e548ec6f6e490290b4e8fc2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 15 Dec 2016 23:54:29 +0100 Subject: [PATCH 204/934] redundant type parameters --- src/main/java/com/gooddata/GoodData.java | 2 +- .../gooddata/collections/PageableList.java | 2 +- .../java/com/gooddata/gdc/TaskStatus.java | 2 +- src/main/java/com/gooddata/md/Attribute.java | 2 +- src/main/java/com/gooddata/md/Dataset.java | 4 ++-- src/main/java/com/gooddata/md/Dimension.java | 2 +- .../java/com/gooddata/md/MetadataService.java | 2 +- .../java/com/gooddata/md/ScheduledMail.java | 4 ++-- .../java/com/gooddata/md/report/Grid.java | 4 ++-- .../report/GridReportDefinitionContent.java | 4 ++-- .../OneNumberReportDefinitionContent.java | 2 +- .../java/com/gooddata/model/ModelDiff.java | 4 ++-- .../com/gooddata/project/ProjectService.java | 2 +- .../IntegrationProcessStatusTest.java | 20 +++++++++---------- .../processes/ProcessServiceTest.java | 2 +- .../gooddata/dataset/DatasetServiceTest.java | 4 ++-- .../com/gooddata/dataset/UploadsInfoTest.java | 2 +- .../com/gooddata/dataset/UploadsTest.java | 2 +- .../com/gooddata/md/MetadataServiceTest.java | 2 +- .../GridReportDefinitionContentTest.java | 4 ++-- .../java/com/gooddata/md/report/GridTest.java | 6 +++--- .../OneNumberReportDefinitionContentTest.java | 4 ++-- .../report/ReportDefinitionContentTest.java | 4 ++-- .../md/report/ReportDefinitionTest.java | 4 ++-- .../com/gooddata/model/ModelDiffTest.java | 4 ++-- .../com/gooddata/util/TagsSerializerTest.java | 2 +- .../warehouse/WarehouseUsersTest.java | 2 +- .../gooddata/warehouse/WarehousesTest.java | 2 +- 28 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index a049771fa..ed4f3e490 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -225,7 +225,7 @@ static RestTemplate createRestTemplate(GoodDataEndpoint endpoint, HttpClient htt endpoint.getProtocol() ); final RestTemplate restTemplate = new RestTemplate(factory); - restTemplate.setInterceptors(Arrays.asList( + restTemplate.setInterceptors(Arrays.asList( new HeaderSettingRequestInterceptor(singletonMap("Accept", getAcceptHeaderValue())))); restTemplate.setErrorHandler(new ResponseErrorHandler(restTemplate.getMessageConverters())); diff --git a/src/main/java/com/gooddata/collections/PageableList.java b/src/main/java/com/gooddata/collections/PageableList.java index 0c53bd6e2..4bdd32f2a 100644 --- a/src/main/java/com/gooddata/collections/PageableList.java +++ b/src/main/java/com/gooddata/collections/PageableList.java @@ -33,7 +33,7 @@ public class PageableList implements List { * Creates empty list with no next page. */ public PageableList() { - this(Collections.emptyList(), null); + this(Collections.emptyList(), null); } /** diff --git a/src/main/java/com/gooddata/gdc/TaskStatus.java b/src/main/java/com/gooddata/gdc/TaskStatus.java index 1b5fc5b96..f36dbacdb 100644 --- a/src/main/java/com/gooddata/gdc/TaskStatus.java +++ b/src/main/java/com/gooddata/gdc/TaskStatus.java @@ -41,7 +41,7 @@ private TaskStatus(@JsonProperty("status") String status, @JsonProperty("poll") } public TaskStatus(final String status, final String pollUri) { - this(status, pollUri, Collections.emptyList()); + this(status, pollUri, Collections.emptyList()); } public String getStatus() { diff --git a/src/main/java/com/gooddata/md/Attribute.java b/src/main/java/com/gooddata/md/Attribute.java index 7d02795c5..a4d44202f 100644 --- a/src/main/java/com/gooddata/md/Attribute.java +++ b/src/main/java/com/gooddata/md/Attribute.java @@ -30,7 +30,7 @@ private Attribute(@JsonProperty("meta") Meta meta, @JsonProperty("content") Nest /* Just for serialization test */ Attribute(String title, Key primaryKey, Key foreignKey) { - this(new Meta(title), new Content(asList(primaryKey), asList(foreignKey), Collections.emptyList(), null, null, null, null, null, + this(new Meta(title), new Content(asList(primaryKey), asList(foreignKey), Collections.emptyList(), null, null, null, null, null, null, null, null, null, null, null)); } } diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index 2be8f1f35..b04d7f332 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -49,8 +49,8 @@ private Dataset(@JsonProperty("meta") Meta meta, @JsonProperty("content") Conten /* Just for serialization test */ Dataset(String title) { - this(new Meta(title), new Content(Collections.emptyList(), null, Collections.emptyList(), Collections.emptyList(), - Collections.emptyList(), false), null); + this(new Meta(title), new Content(Collections.emptyList(), null, Collections.emptyList(), Collections.emptyList(), + Collections.emptyList(), false), null); } @JsonIgnore diff --git a/src/main/java/com/gooddata/md/Dimension.java b/src/main/java/com/gooddata/md/Dimension.java index 8203f5353..a89cdc528 100644 --- a/src/main/java/com/gooddata/md/Dimension.java +++ b/src/main/java/com/gooddata/md/Dimension.java @@ -34,7 +34,7 @@ private Dimension(@JsonProperty("meta") Meta meta, @JsonProperty("content") Cont /* for serialization test */ Dimension(String title) { - this(new Meta(title), new Content(Collections.emptyList())); + this(new Meta(title), new Content(Collections.emptyList())); } @JsonIgnore diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index 48b17e9ab..b66a6b981 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -324,7 +324,7 @@ public Collection usedBy(Project project, String uri, boolean nearest, Cl notNull(project, "project"); final Collection usages = usedBy(project, asList(uri), nearest, types); - return usages.size() > 0 ? usages.iterator().next().getUsedBy() : Collections.emptyList(); + return usages.size() > 0 ? usages.iterator().next().getUsedBy() : Collections.emptyList(); } /** diff --git a/src/main/java/com/gooddata/md/ScheduledMail.java b/src/main/java/com/gooddata/md/ScheduledMail.java index 2a485287b..5e8eaaaaf 100644 --- a/src/main/java/com/gooddata/md/ScheduledMail.java +++ b/src/main/java/com/gooddata/md/ScheduledMail.java @@ -52,7 +52,7 @@ private ScheduledMail(String title, String summary, Set tags, boolean de * @param summary the summary of the MD object */ public ScheduledMail(String title, String summary) { - super(new Meta(null, null, null, null, summary, title, null, Collections.emptySet(), null, null, false, + super(new Meta(null, null, null, null, summary, title, null, Collections.emptySet(), null, null, false, null, false, false, null)); this.content = new Content(); } @@ -74,7 +74,7 @@ public ScheduledMail(String title, String summary) { public ScheduledMail(String title, String summary, String recurrency, LocalDate startDate, String timeZone, Collection toAddresses, Collection bccAddresses, String subject, String body, List attachments) { - this(title, summary, Collections.emptySet(), false, recurrency, startDate, timeZone, toAddresses, + this(title, summary, Collections.emptySet(), false, recurrency, startDate, timeZone, toAddresses, bccAddresses, subject, body, attachments); } diff --git a/src/main/java/com/gooddata/md/report/Grid.java b/src/main/java/com/gooddata/md/report/Grid.java index b4982538e..764f1b160 100644 --- a/src/main/java/com/gooddata/md/report/Grid.java +++ b/src/main/java/com/gooddata/md/report/Grid.java @@ -61,8 +61,8 @@ public Grid(List columns, List row this.rows = rows; this.metrics = metrics; sort = new LinkedHashMap<>(); - sort.put("columns", Collections.emptyList()); - sort.put("rows", Collections.emptyList()); + sort.put("columns", Collections.emptyList()); + sort.put("rows", Collections.emptyList()); columnWidths = Collections.emptyList(); } diff --git a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java index fb89a9612..a7b1c44a5 100644 --- a/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/GridReportDefinitionContent.java @@ -35,7 +35,7 @@ private GridReportDefinitionContent( } GridReportDefinitionContent(Grid grid) { - this(grid, Collections.emptyList()); + this(grid, Collections.emptyList()); } public String getFormat() { @@ -44,7 +44,7 @@ public String getFormat() { public static ReportDefinition create(String title, List columns, List rows, List metrics) { - return create(title, columns, rows, metrics, Collections.emptyList()); + return create(title, columns, rows, metrics, Collections.emptyList()); } public static ReportDefinition create(String title, List columns, List rows, diff --git a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java index d7d556ae1..cfa7660d0 100644 --- a/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/OneNumberReportDefinitionContent.java @@ -78,7 +78,7 @@ public String getDescription() { public static ReportDefinition create(String title, List columns, List rows, List metrics) { - return create(title, columns, rows, metrics, Collections.emptyList()); + return create(title, columns, rows, metrics, Collections.emptyList()); } public static ReportDefinition create(String title, List columns, List rows, diff --git a/src/main/java/com/gooddata/model/ModelDiff.java b/src/main/java/com/gooddata/model/ModelDiff.java index fed0467c0..714fe91eb 100644 --- a/src/main/java/com/gooddata/model/ModelDiff.java +++ b/src/main/java/com/gooddata/model/ModelDiff.java @@ -35,7 +35,7 @@ public class ModelDiff { */ @JsonCreator ModelDiff(@JsonProperty("updateScripts") List updateScripts) { - this.updateScripts = updateScripts == null ? Collections.emptyList() : updateScripts; + this.updateScripts = updateScripts == null ? Collections.emptyList() : updateScripts; } /** @@ -126,7 +126,7 @@ static class UpdateScript { @JsonProperty("maqlDdlChunks") List maqlChunks) { this.preserveData = preserveData; this.cascadeDrops = cascadeDrops; - this.maqlChunks = maqlChunks == null ? Collections.emptyList() : maqlChunks; + this.maqlChunks = maqlChunks == null ? Collections.emptyList() : maqlChunks; } /** diff --git a/src/main/java/com/gooddata/project/ProjectService.java b/src/main/java/com/gooddata/project/ProjectService.java index 62177cc40..25cf32b14 100644 --- a/src/main/java/com/gooddata/project/ProjectService.java +++ b/src/main/java/com/gooddata/project/ProjectService.java @@ -171,7 +171,7 @@ public Collection getProjectTemplates(Project project) { notNull(project, "project"); try { final ProjectTemplates templates = restTemplate.getForObject(ProjectTemplate.URI, ProjectTemplates.class, project.getId()); - return templates != null && templates.getTemplatesInfo() != null ? templates.getTemplatesInfo() : Collections.emptyList(); + return templates != null && templates.getTemplatesInfo() != null ? templates.getTemplatesInfo() : Collections.emptyList(); } catch (GoodDataRestException | RestClientException e) { throw new GoodDataException("Unable to get project templates", e); } diff --git a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java index 33ddb7439..c13bc4a47 100644 --- a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java @@ -42,61 +42,61 @@ public void testShouldDeserialize() throws Exception { @Test public void testIsFinishedOnError() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(true)); } @Test public void testIsFinishedOnSynchronized() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(SYNCHRONIZED.name(), "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(SYNCHRONIZED.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(true)); } @Test public void testIsFinishedOnUploading() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(UPLOADING.name(), "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(UPLOADING.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(false)); } @Test public void testIsFinishedOnNullCode() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(null, "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(null, "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(false)); } @Test public void testIsFinishedOnUnknownCode() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFinished(), is(false)); } @Test public void testIsFailedOnError() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(true)); } @Test public void testIsFailedOnUserError() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(USER_ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(USER_ERROR.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(true)); } @Test public void testIsFailedOnSynchronized() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(SYNCHRONIZED.name(), "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(SYNCHRONIZED.name(), "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(false)); } @Test public void testIsFailedOnNullCode() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(null, "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status(null, "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(false)); } @Test public void testIsFailedOnUnknownCode() throws Exception { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); assertThat(process.isFailed(), is(false)); } diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java index 1c4fb3181..39092b899 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java @@ -211,7 +211,7 @@ public void testListUserProcessesWithNullResponse() throws Exception { @Test public void testListUserProcessesWithNoProcesses() throws Exception { when(restTemplate.getForObject(create(USER_PROCESS_URI), DataloadProcesses.class)) - .thenReturn(new DataloadProcesses(Collections.emptyList())); + .thenReturn(new DataloadProcesses(Collections.emptyList())); final Collection result = processService.listUserProcesses(); assertThat(result, empty()); } diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java index d15a35312..65b032bbd 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java @@ -232,7 +232,7 @@ public void testGetDataSetInfoEmptyResponse() throws Exception { public void testListUploadsForDatasetMissingUri() throws Exception { mockDataSetInfo(); - assertThat(service.listUploadsForDataset(project, DATASET_ID), Matchers.empty()); + assertThat(service.listUploadsForDataset(project, DATASET_ID), Matchers.empty()); } @Test(expectedExceptions = GoodDataException.class) @@ -262,7 +262,7 @@ public void testListUploadsForDatasetEmptyResponseBody() throws Exception { when(restTemplate.getForObject(DATASET_UPLOADS_URI, Uploads.class)).thenReturn(new Uploads(null)); - assertThat(service.listUploadsForDataset(project, DATASET_ID), Matchers.empty()); + assertThat(service.listUploadsForDataset(project, DATASET_ID), Matchers.empty()); } @Test diff --git a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java index 083b33ee7..69bf201ba 100644 --- a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java @@ -34,6 +34,6 @@ public void shouldDeserialize() throws Exception { @Test(expectedExceptions = DatasetNotFoundException.class) public void getDatasetUploadInfoFails() throws Exception { - new UploadsInfo(Collections.emptyList()).getDataSet("dataset.non_existing_one"); + new UploadsInfo(Collections.emptyList()).getDataSet("dataset.non_existing_one"); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/UploadsTest.java b/src/test/java/com/gooddata/dataset/UploadsTest.java index 929411798..66dd73797 100644 --- a/src/test/java/com/gooddata/dataset/UploadsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsTest.java @@ -24,7 +24,7 @@ public void shouldDeserialize() throws Exception { final Uploads uploads = new ObjectMapper().readValue(input, Uploads.class); assertThat(uploads, notNullValue()); - assertThat(uploads.items(), not(Matchers.empty())); + assertThat(uploads.items(), not(Matchers.empty())); assertThat(uploads.items().size(), is(2)); } } diff --git a/src/test/java/com/gooddata/md/MetadataServiceTest.java b/src/test/java/com/gooddata/md/MetadataServiceTest.java index a2c6de9b2..107e7e6d4 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceTest.java +++ b/src/test/java/com/gooddata/md/MetadataServiceTest.java @@ -351,7 +351,7 @@ public void testGetAttributeElementsEmpty() throws Exception { when(attr.getDefaultDisplayForm()).thenReturn(attrDisplayForm); when(restTemplate.getForObject("elementsUri", AttributeElements.class)) - .thenReturn(new AttributeElements(Collections.emptyList())); + .thenReturn(new AttributeElements(Collections.emptyList())); final List elements = service.getAttributeElements(attr); assertThat(elements, hasSize(0)); } diff --git a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java index 2705728bf..cfea902dc 100644 --- a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java @@ -30,8 +30,8 @@ public void testDeserialization() throws Exception { @Test public void testSerialization() throws Exception { final GridReportDefinitionContent def = new GridReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList())); + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList())); assertThat(def, serializesToJson("/md/report/gridReportDefinitionContent-input.json")); } diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index 16c0fd052..5ca33a8c2 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -32,7 +32,7 @@ public void testDeserialization() throws Exception { assertThat(grid.getColumns(), is(notNullValue())); assertThat(grid.getColumns(), hasSize(1)); - assertThat(grid.getColumns().iterator().next(), CoreMatchers.is(METRIC_GROUP)); + assertThat(grid.getColumns().iterator().next(), CoreMatchers.is(METRIC_GROUP)); assertThat(grid.getRows(), is(notNullValue())); assertThat(grid.getRows(), hasSize(1)); @@ -55,8 +55,8 @@ public void testSerialization() throws Exception { final Map colWidths = new HashMap<>(); final Map> sort = new HashMap<>(); colWidths.put("width", 343); - sort.put("columns", Collections.emptyList()); - sort.put("rows", Collections.emptyList()); + sort.put("columns", Collections.emptyList()); + sort.put("rows", Collections.emptyList()); final Grid grid = new Grid( asList(METRIC_GROUP), asList(new AttributeInGrid("/gdc/md/PROJECT_ID/obj/ATTR_ID", "attr")), diff --git a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java index 754d8e3cf..8d212477f 100644 --- a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java @@ -31,8 +31,8 @@ public void testDeserialization() throws Exception { @Test public void testSerialization() throws Exception { final OneNumberReportDefinitionContent def = new OneNumberReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList()), "desc", Collections.emptyList() + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList()), "desc", Collections.emptyList() ); assertThat(def, serializesToJson("/md/report/oneNumberReportDefinitionContent-input.json")); } diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java index cda4f3118..55d8724ea 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java @@ -30,8 +30,8 @@ public void testDeserialization() throws Exception { @Test public void testSerialization() throws Exception { final ReportDefinitionContent def = new GridReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList())); + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList())); assertThat(def, serializesToJson("/md/report/gridReportDefinitionContent-input.json")); } diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java index c3e85777b..421553ef8 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java @@ -35,8 +35,8 @@ public void testDeserialization() throws Exception { public void testSerialization() throws Exception { final ReportDefinition def = new ReportDefinition("Untitled", new OneNumberReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList()), "desc", asList(new Filter("(SELECT [/gdc/md/projectId/obj/123]) >= 2"))) + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList()), "desc", asList(new Filter("(SELECT [/gdc/md/projectId/obj/123]) >= 2"))) ); assertThat(def, serializesToJson("/md/report/oneNumberReportDefinition-input.json")); } diff --git a/src/test/java/com/gooddata/model/ModelDiffTest.java b/src/test/java/com/gooddata/model/ModelDiffTest.java index 9e617ed59..cac5e5945 100644 --- a/src/test/java/com/gooddata/model/ModelDiffTest.java +++ b/src/test/java/com/gooddata/model/ModelDiffTest.java @@ -61,14 +61,14 @@ public void testGetUpdateMaqlsNoPreserveData() throws Exception { @Test public void testGetUpdateMaqlsNoUpdateScript() throws Exception { - final ModelDiff diff = new ModelDiff(Collections.emptyList()); + final ModelDiff diff = new ModelDiff(Collections.emptyList()); assertThat(diff.getUpdateMaql(), hasSize(0)); } @Test public void testGetUpdateMaqlsNoMaqlInUpdateScript() throws Exception { - final ModelDiff diff = new ModelDiff(new UpdateScript(true, false, Collections.emptyList())); + final ModelDiff diff = new ModelDiff(new UpdateScript(true, false, Collections.emptyList())); assertThat(diff.getUpdateMaql(), hasSize(0)); } diff --git a/src/test/java/com/gooddata/util/TagsSerializerTest.java b/src/test/java/com/gooddata/util/TagsSerializerTest.java index 2541fbabb..24e42f15d 100644 --- a/src/test/java/com/gooddata/util/TagsSerializerTest.java +++ b/src/test/java/com/gooddata/util/TagsSerializerTest.java @@ -29,7 +29,7 @@ public void shouldSerializeOneTag() throws Exception { @Test public void shouldSerializeZeroTags() throws Exception { - final TagsTestClass tags = new TagsTestClass(Collections.emptySet()); + final TagsTestClass tags = new TagsTestClass(Collections.emptySet()); final String jsonString = MAPPER.writeValueAsString(tags); assertThat(jsonString, is("{\"tags\":\"\"}")); } diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java index beda0bd14..09b944c0a 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java @@ -21,7 +21,7 @@ public class WarehouseUsersTest { private final WarehouseUsers users = readObjectFromResource("/warehouse/users.json", WarehouseUsers.class); - private final WarehouseUsers empty = new WarehouseUsers(Collections.emptyList(), null); + private final WarehouseUsers empty = new WarehouseUsers(Collections.emptyList(), null); @Test public void testDeserialization() throws Exception { diff --git a/src/test/java/com/gooddata/warehouse/WarehousesTest.java b/src/test/java/com/gooddata/warehouse/WarehousesTest.java index f51775667..860643aa6 100644 --- a/src/test/java/com/gooddata/warehouse/WarehousesTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehousesTest.java @@ -20,7 +20,7 @@ public class WarehousesTest { private final Warehouses warehouses = readObjectFromResource("/warehouse/warehouses.json", Warehouses.class); - private final Warehouses empty = new Warehouses(Collections.emptyList(), null); + private final Warehouses empty = new Warehouses(Collections.emptyList(), null); @Test public void testDeserialization() throws Exception { From 2511b8284cf0e8e478264d30b8475cfbb3258a14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 15 Dec 2016 23:54:53 +0100 Subject: [PATCH 205/934] redundant cast to integer --- src/test/java/com/gooddata/md/report/GridTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index 5ca33a8c2..de1d7044b 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -46,7 +46,7 @@ public void testDeserialization() throws Exception { assertThat(grid.getColumnWidths(), hasSize(1)); final Map colWidth = grid.getColumnWidths().iterator().next(); - assertThat((Integer) colWidth.get("width"), is(343)); + assertThat(colWidth.get("width"), is(343)); } From 587c83a08eab184e927e2beb971eb8df11d6048f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 15 Dec 2016 23:56:02 +0100 Subject: [PATCH 206/934] unnecessary semicolon --- src/main/java/com/gooddata/connector/Status.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/connector/Status.java b/src/main/java/com/gooddata/connector/Status.java index 40fdc54c8..63abb44e4 100644 --- a/src/main/java/com/gooddata/connector/Status.java +++ b/src/main/java/com/gooddata/connector/Status.java @@ -72,7 +72,7 @@ public boolean isFailed() { */ public enum Code { NEW, SCHEDULED, DOWNLOADING, DOWNLOADED, TRANSFORMING, TRANSFORMED, UPLOADING, UPLOADED, SYNCHRONIZED, - ERROR, USER_ERROR; + ERROR, USER_ERROR } } From d94b5f91b06c1c51b057c72ec286de3d668683e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 15 Dec 2016 23:56:56 +0100 Subject: [PATCH 207/934] redundant final for interface field --- src/main/java/com/gooddata/connector/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/connector/Settings.java b/src/main/java/com/gooddata/connector/Settings.java index 5fe32a69e..421d17762 100644 --- a/src/main/java/com/gooddata/connector/Settings.java +++ b/src/main/java/com/gooddata/connector/Settings.java @@ -20,7 +20,7 @@ @JsonInclude(JsonInclude.Include.NON_NULL) public interface Settings { - final String URL = "/gdc/projects/{project}/connectors/{connector}/integration/settings"; + String URL = "/gdc/projects/{project}/connectors/{connector}/integration/settings"; @JsonIgnore ConnectorType getConnectorType(); From 21562c59dea558f829e0f6f36273881bc1e39e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 15 Dec 2016 23:58:05 +0100 Subject: [PATCH 208/934] redudant modifier for inner enum --- src/main/java/com/gooddata/md/Restriction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/md/Restriction.java b/src/main/java/com/gooddata/md/Restriction.java index 45af7c069..2a87eab0d 100644 --- a/src/main/java/com/gooddata/md/Restriction.java +++ b/src/main/java/com/gooddata/md/Restriction.java @@ -57,7 +57,7 @@ public static Restriction summary(String value) { return new Restriction(Type.SUMMARY, value); } - static enum Type { + enum Type { IDENTIFIER, TITLE, SUMMARY } } From 18b6ac8d4f1b87ad1c3a198bc8ebbe0bd58b9cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Wed, 14 Dec 2016 11:08:25 +0100 Subject: [PATCH 209/934] add dependency commons-lang3 --- pom.xml | 6 +++--- .../com/gooddata/dataload/processes/ProcessService.java | 2 +- src/main/java/com/gooddata/dataset/DatasetService.java | 2 +- src/main/java/com/gooddata/md/Meta.java | 7 ++++++- src/main/java/com/gooddata/util/TagsSerializer.java | 2 +- src/test/java/com/gooddata/md/ExportImportServiceAT.java | 2 +- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index ab785c041..02a76cb54 100644 --- a/pom.xml +++ b/pom.xml @@ -282,9 +282,9 @@ 0.9.4 - commons-lang - commons-lang - 2.6 + org.apache.commons + commons-lang3 + 3.5 org.apache.httpcomponents diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index d64ce6294..6cb3e2575 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -44,7 +44,7 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; import static java.util.Collections.emptyList; -import static org.apache.commons.lang.Validate.isTrue; +import static org.apache.commons.lang3.Validate.isTrue; /** * Service to manage dataload processes and process executions. diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 0c559612c..53ef7ecda 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -14,7 +14,7 @@ import com.gooddata.gdc.*; import com.gooddata.gdc.AboutLinks.Link; import com.gooddata.project.Project; -import org.apache.commons.lang.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.springframework.http.client.ClientHttpResponse; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; diff --git a/src/main/java/com/gooddata/md/Meta.java b/src/main/java/com/gooddata/md/Meta.java index 5354cef71..d528dad7d 100644 --- a/src/main/java/com/gooddata/md/Meta.java +++ b/src/main/java/com/gooddata/md/Meta.java @@ -17,7 +17,7 @@ import java.io.Serializable; import java.util.Set; -import static org.apache.commons.lang.StringUtils.substring; +import static org.apache.commons.lang3.StringUtils.substring; /** * Metadata meta information (meant just for internal SDK usage) @@ -240,4 +240,9 @@ public Boolean isSharedWithSomeone() { public void setSharedWithSomeone(final Boolean sharedWithSomeone) { this.sharedWithSomeone = sharedWithSomeone; } + + @Override + public String toString() { + return GoodDataToStringBuilder.toStringExclude(this); + } } diff --git a/src/main/java/com/gooddata/util/TagsSerializer.java b/src/main/java/com/gooddata/util/TagsSerializer.java index 06e76f7a3..a1b541101 100644 --- a/src/main/java/com/gooddata/util/TagsSerializer.java +++ b/src/main/java/com/gooddata/util/TagsSerializer.java @@ -8,7 +8,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.util.Set; diff --git a/src/test/java/com/gooddata/md/ExportImportServiceAT.java b/src/test/java/com/gooddata/md/ExportImportServiceAT.java index a09bad008..39418f826 100644 --- a/src/test/java/com/gooddata/md/ExportImportServiceAT.java +++ b/src/test/java/com/gooddata/md/ExportImportServiceAT.java @@ -15,7 +15,7 @@ import com.gooddata.model.ModelService; import com.gooddata.project.Environment; import com.gooddata.project.Project; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; From d8c124e3470a821d1f3aa8caa08a8e1be27aa355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Wed, 14 Dec 2016 11:09:08 +0100 Subject: [PATCH 210/934] add reasonable toString implementations to domain objects --- pom.xml | 6 + .../java/com/gooddata/account/Account.java | 6 + .../com/gooddata/connector/Integration.java | 6 + .../connector/IntegrationProcessStatus.java | 6 + .../java/com/gooddata/connector/Status.java | 5 + .../connector/Zendesk4ProcessExecution.java | 11 ++ .../gooddata/connector/Zendesk4Settings.java | 6 + .../com/gooddata/dataload/OutputStage.java | 6 + .../dataload/processes/DataloadProcess.java | 6 + .../dataload/processes/DataloadProcesses.java | 6 + .../dataload/processes/ProcessExecution.java | 6 + .../processes/ProcessExecutionDetail.java | 6 + .../gooddata/dataload/processes/Schedule.java | 5 + .../com/gooddata/dataset/DatasetManifest.java | 11 ++ .../gooddata/dataset/DatasetManifests.java | 6 + .../java/com/gooddata/dataset/EtlMode.java | 6 + src/main/java/com/gooddata/dataset/Pull.java | 6 + .../java/com/gooddata/dataset/TaskState.java | 6 + .../java/com/gooddata/dataset/Upload.java | 6 + .../gooddata/dataset/UploadStatistics.java | 6 + .../java/com/gooddata/dataset/Uploads.java | 6 + .../com/gooddata/dataset/UploadsInfo.java | 16 ++ .../com/gooddata/featureflag/FeatureFlag.java | 4 +- .../gooddata/featureflag/FeatureFlags.java | 3 +- .../featureflag/ProjectFeatureFlag.java | 11 +- .../featureflag/ProjectFeatureFlags.java | 5 + .../java/com/gooddata/gdc/AboutLinks.java | 11 ++ .../java/com/gooddata/gdc/AbstractMaql.java | 6 +- .../java/com/gooddata/gdc/LinkEntries.java | 11 ++ .../java/com/gooddata/gdc/TaskStatus.java | 5 + .../java/com/gooddata/gdc/UriResponse.java | 3 +- .../java/com/gooddata/md/AbstractObj.java | 6 + src/main/java/com/gooddata/md/Attachment.java | 6 + .../com/gooddata/md/AttributeDisplayForm.java | 11 ++ .../com/gooddata/md/AttributeElement.java | 6 + .../com/gooddata/md/AttributeElements.java | 6 + .../java/com/gooddata/md/AttributeSort.java | 6 + src/main/java/com/gooddata/md/Column.java | 10 ++ .../com/gooddata/md/DashboardAttachment.java | 9 +- .../com/gooddata/md/DataLoadingColumn.java | 16 ++ src/main/java/com/gooddata/md/Dataset.java | 11 ++ src/main/java/com/gooddata/md/Dimension.java | 11 ++ .../java/com/gooddata/md/DisplayForm.java | 16 ++ src/main/java/com/gooddata/md/Entry.java | 5 + src/main/java/com/gooddata/md/Expression.java | 6 + src/main/java/com/gooddata/md/Fact.java | 11 ++ .../com/gooddata/md/IdentifierAndUri.java | 6 + .../java/com/gooddata/md/IdentifierToUri.java | 6 + .../com/gooddata/md/IdentifiersAndUris.java | 6 + src/main/java/com/gooddata/md/InUseMany.java | 6 + src/main/java/com/gooddata/md/Key.java | 6 + src/main/java/com/gooddata/md/MaqlAst.java | 11 ++ src/main/java/com/gooddata/md/Meta.java | 2 +- src/main/java/com/gooddata/md/Metric.java | 11 ++ .../java/com/gooddata/md/NestedAttribute.java | 11 ++ .../com/gooddata/md/ProjectDashboard.java | 16 ++ src/main/java/com/gooddata/md/Query.java | 11 ++ .../com/gooddata/md/ReportAttachment.java | 7 +- .../java/com/gooddata/md/Restriction.java | 7 + .../java/com/gooddata/md/ScheduledMail.java | 9 ++ .../com/gooddata/md/ScheduledMailWhen.java | 6 + src/main/java/com/gooddata/md/Table.java | 11 ++ .../java/com/gooddata/md/TableDataLoad.java | 11 ++ src/main/java/com/gooddata/md/Usage.java | 7 + src/main/java/com/gooddata/md/UseMany.java | 6 + .../java/com/gooddata/md/UseManyEntries.java | 6 + .../md/maintenance/PartialMdArtifact.java | 6 + .../md/maintenance/PartialMdExport.java | 6 + .../md/maintenance/PartialMdExportToken.java | 6 + .../gooddata/md/report/AttributeInGrid.java | 6 + .../java/com/gooddata/md/report/Filter.java | 6 + .../java/com/gooddata/md/report/Grid.java | 6 + .../com/gooddata/md/report/MetricElement.java | 6 + .../java/com/gooddata/md/report/Report.java | 11 ++ .../gooddata/md/report/ReportDefinition.java | 5 + .../md/report/ReportDefinitionContent.java | 6 + .../java/com/gooddata/model/DiffRequest.java | 5 + .../java/com/gooddata/model/ModelDiff.java | 11 ++ .../gooddata/notification/ProjectEvent.java | 6 + .../java/com/gooddata/project/Project.java | 16 ++ .../com/gooddata/project/ProjectTemplate.java | 5 + .../gooddata/project/ProjectTemplates.java | 6 + .../project/ProjectValidationResult.java | 6 + ...ProjectValidationResultGdcTimeElParam.java | 3 +- .../project/ProjectValidationResultItem.java | 11 ++ .../ProjectValidationResultObjectParam.java | 3 +- .../ProjectValidationResultSliElParam.java | 3 +- .../ProjectValidationResultStringParam.java | 3 +- .../project/ProjectValidationResults.java | 5 + .../project/ProjectValidationType.java | 6 + .../gooddata/project/ProjectValidations.java | 6 + .../java/com/gooddata/project/Projects.java | 6 + src/main/java/com/gooddata/project/Role.java | 6 + src/main/java/com/gooddata/project/Roles.java | 6 + src/main/java/com/gooddata/project/User.java | 11 ++ .../gooddata/report/ExecuteDefinition.java | 6 + .../com/gooddata/report/ExecuteReport.java | 6 + .../util/GoodDataToStringBuilder.java | 37 +++++ .../com/gooddata/warehouse/Warehouse.java | 6 + .../gooddata/warehouse/WarehouseSchema.java | 6 + .../com/gooddata/warehouse/WarehouseUser.java | 5 + .../com/gooddata/account/AccountTest.java | 8 + .../IntegrationProcessStatusTest.java | 8 + .../gooddata/connector/IntegrationTest.java | 8 + .../com/gooddata/connector/StatusTest.java | 8 + .../Zendesk4ProcessExecutionTest.java | 8 + .../connector/Zendesk4SettingsTest.java | 8 + .../gooddata/dataload/OutputStageTest.java | 11 +- .../processes/DataloadProcessTest.java | 8 + .../processes/DataloadProcessesTest.java | 9 ++ .../processes/ProcessExecutionDetailTest.java | 9 ++ .../processes/ProcessExecutionTest.java | 9 ++ .../dataload/processes/ScheduleTest.java | 8 + .../gooddata/dataset/DatasetManifestTest.java | 8 + .../java/com/gooddata/dataset/PullTest.java | 8 + .../com/gooddata/dataset/TaskStateTest.java | 9 ++ .../dataset/UploadStatisticsTest.java | 9 ++ .../java/com/gooddata/dataset/UploadTest.java | 9 ++ .../com/gooddata/dataset/UploadsInfoTest.java | 9 ++ .../com/gooddata/dataset/UploadsTest.java | 9 ++ .../featureflag/FeatureFlagsTest.java | 8 + .../featureflag/ProjectFeatureFlagTest.java | 8 + .../com/gooddata/gdc/LinkEntriesTest.java | 9 ++ .../gooddata/md/AttributeDisplayFormTest.java | 9 ++ .../com/gooddata/md/AttributeElementTest.java | 8 + .../com/gooddata/md/AttributeSortTest.java | 8 + src/test/java/com/gooddata/md/ColumnTest.java | 9 ++ .../gooddata/md/DataLoadingColumnTest.java | 9 ++ .../java/com/gooddata/md/DatasetTest.java | 8 + .../java/com/gooddata/md/DimensionTest.java | 8 + .../java/com/gooddata/md/DisplayFormTest.java | 9 ++ src/test/java/com/gooddata/md/EntryTest.java | 9 ++ .../java/com/gooddata/md/ExpressionTest.java | 8 + src/test/java/com/gooddata/md/FactTest.java | 8 + src/test/java/com/gooddata/md/KeyTest.java | 8 + src/test/java/com/gooddata/md/MetaTest.java | 9 ++ src/test/java/com/gooddata/md/MetricTest.java | 9 ++ .../com/gooddata/md/NestedAttributeTest.java | 8 + .../com/gooddata/md/ProjectDashboardTest.java | 8 + src/test/java/com/gooddata/md/QueryTest.java | 8 + .../java/com/gooddata/md/RestrictionTest.java | 7 + .../com/gooddata/md/ScheduledMailTest.java | 8 + .../com/gooddata/md/TableDataLoadTest.java | 9 ++ src/test/java/com/gooddata/md/TableTest.java | 9 ++ .../md/maintenance/PartialMdArtifactTest.java | 8 + .../md/maintenance/PartialMdExportTest.java | 9 ++ .../maintenance/PartialMdExportTokenTest.java | 8 + .../md/report/AttributeInGridTest.java | 9 ++ .../java/com/gooddata/md/report/GridTest.java | 10 ++ .../gooddata/md/report/MetricElementTest.java | 8 + .../report/ReportDefinitionContentTest.java | 10 ++ .../md/report/ReportDefinitionTest.java | 9 ++ .../com/gooddata/md/report/ReportTest.java | 8 + .../com/gooddata/model/ModelDiffTest.java | 8 + .../notification/ProjectEventTest.java | 7 + .../gooddata/project/ProjectTemplateTest.java | 9 ++ .../com/gooddata/project/ProjectTest.java | 8 + .../project/ProjectValidationResultTest.java | 9 ++ .../java/com/gooddata/project/RolesTest.java | 9 ++ .../java/com/gooddata/project/UserTest.java | 9 ++ .../report/ExecuteDefinitionTest.java | 8 + .../gooddata/report/ExecuteReportTest.java | 8 + .../util/GoodDataToStringBuilderTest.java | 149 ++++++++++++++++++ .../warehouse/WarehouseSchemaTest.java | 9 ++ .../com/gooddata/warehouse/WarehouseTest.java | 8 + .../gooddata/warehouse/WarehouseUserTest.java | 9 ++ 166 files changed, 1425 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/gooddata/util/GoodDataToStringBuilder.java create mode 100644 src/test/java/com/gooddata/util/GoodDataToStringBuilderTest.java diff --git a/pom.xml b/pom.xml index 02a76cb54..fdfa513f4 100644 --- a/pom.xml +++ b/pom.xml @@ -376,6 +376,12 @@ 1.3 test + + org.hamcrest + java-hamcrest + 2.0.0.0 + test + net.javacrumbs.json-unit json-unit diff --git a/src/main/java/com/gooddata/account/Account.java b/src/main/java/com/gooddata/account/Account.java index 5e7c2eba6..4b4c731d1 100644 --- a/src/main/java/com/gooddata/account/Account.java +++ b/src/main/java/com/gooddata/account/Account.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; /** @@ -148,4 +149,9 @@ public String getProjects() { static String getId(String uri) { return TEMPLATE.match(uri).get("id"); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this, "password", "verifyPassword"); + } } diff --git a/src/main/java/com/gooddata/connector/Integration.java b/src/main/java/com/gooddata/connector/Integration.java index f63321b69..5c881df34 100644 --- a/src/main/java/com/gooddata/connector/Integration.java +++ b/src/main/java/com/gooddata/connector/Integration.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import static com.gooddata.util.Validate.notEmpty; @@ -78,4 +79,9 @@ public IntegrationProcessStatus getLastSuccessfulProcess() { public IntegrationProcessStatus getRunningProcess() { return runningProcess; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java index e87c4a62b..25701b44e 100644 --- a/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java +++ b/src/main/java/com/gooddata/connector/IntegrationProcessStatus.java @@ -8,6 +8,7 @@ import static com.gooddata.util.Validate.notNullState; import com.fasterxml.jackson.annotation.JsonInclude; +import com.gooddata.util.GoodDataToStringBuilder; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; import com.fasterxml.jackson.annotation.JsonCreator; @@ -93,4 +94,9 @@ public String getUri() { public String getId() { return TEMPLATE.match(getUri()).get("process"); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/connector/Status.java b/src/main/java/com/gooddata/connector/Status.java index 63abb44e4..859f83a8a 100644 --- a/src/main/java/com/gooddata/connector/Status.java +++ b/src/main/java/com/gooddata/connector/Status.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import static com.gooddata.connector.Status.Code.ERROR; import static com.gooddata.connector.Status.Code.SYNCHRONIZED; @@ -75,4 +76,8 @@ public enum Code { ERROR, USER_ERROR } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java index 5d85cfd6c..2a02faed7 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java +++ b/src/main/java/com/gooddata/connector/Zendesk4ProcessExecution.java @@ -14,6 +14,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; import com.gooddata.util.ISODateTimeSerializer; import org.joda.time.DateTime; @@ -77,6 +78,11 @@ public void setDownloadParams(DownloadParams downloadParams) { this.downloadParams = downloadParams; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonInclude(JsonInclude.Include.NON_NULL) public static class DownloadParams { private Boolean useBackup; @@ -125,5 +131,10 @@ public Integer getParallelBatchSeconds() { public void setParallelBatchSeconds(Integer parallelBatchSeconds) { this.parallelBatchSeconds = parallelBatchSeconds; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/connector/Zendesk4Settings.java b/src/main/java/com/gooddata/connector/Zendesk4Settings.java index 7b5ea53e1..13b01959f 100644 --- a/src/main/java/com/gooddata/connector/Zendesk4Settings.java +++ b/src/main/java/com/gooddata/connector/Zendesk4Settings.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.connector.ConnectorType.ZENDESK4; @@ -64,4 +65,9 @@ public ConnectorType getConnectorType() { * Type of Zendesk account. */ public enum Zendesk4Type {plus, enterprise} + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataload/OutputStage.java b/src/main/java/com/gooddata/dataload/OutputStage.java index 0484236cd..c8ec74ea0 100644 --- a/src/main/java/com/gooddata/dataload/OutputStage.java +++ b/src/main/java/com/gooddata/dataload/OutputStage.java @@ -14,6 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Map; @@ -137,4 +138,9 @@ public String getOutputStageDiffUri() { public String getDataloadProcessUri() { return notNullState(links, "links").get(DATALOAD_PROCESS); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java index 98a954e04..3a978c441 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcess.java @@ -16,6 +16,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.util.CollectionUtils; import org.springframework.web.util.UriTemplate; @@ -149,4 +150,9 @@ public void validateExecutable(final String executable) { throw new IllegalArgumentException("Executable " + executable + " not found in process executables " + getExecutables()); } } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java b/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java index 0a4e92c7d..7e00aec88 100644 --- a/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java +++ b/src/main/java/com/gooddata/dataload/processes/DataloadProcesses.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Collection; @@ -39,4 +40,9 @@ class DataloadProcesses { Collection getItems() { return items; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java index a7a44eb48..2426599bf 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.HashMap; import java.util.Map; @@ -64,4 +65,9 @@ public Map getHiddenParams() { String getExecutionsUri() { return executionsUri; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this, "hiddenParams", "executionsUri"); + } } diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java index f2f9550e6..963085e58 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecutionDetail.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.gooddata.gdc.ErrorStructure; +import com.gooddata.util.GoodDataToStringBuilder; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; import org.joda.time.DateTime; @@ -131,4 +132,9 @@ public boolean isSuccess() { public static URI uriFromExecutionUri(URI executionUri) { return URI.create(executionUri.toString() + "/detail"); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index 1d3e22337..4fe94cb93 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -6,6 +6,7 @@ package com.gooddata.dataload.processes; import com.fasterxml.jackson.annotation.JsonInclude; +import com.gooddata.util.GoodDataToStringBuilder; import com.gooddata.util.ISODateTimeDeserializer; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -253,4 +254,8 @@ public String getId() { return TEMPLATE.match(getUri()).get("scheduleId"); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataset/DatasetManifest.java b/src/main/java/com/gooddata/dataset/DatasetManifest.java index 30656428e..6f6ce8614 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifest.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifest.java @@ -16,6 +16,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; import java.io.InputStream; import java.util.List; @@ -125,6 +126,11 @@ public void setSource(final InputStream source) { this.source = notNull(source, "source"); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this, "source"); + } + @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) public static class Part { @@ -197,5 +203,10 @@ public Map getConstraints() { public void setConstraints(Map constraints) { this.constraints = constraints; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/dataset/DatasetManifests.java b/src/main/java/com/gooddata/dataset/DatasetManifests.java index 622c28294..4aaa25329 100644 --- a/src/main/java/com/gooddata/dataset/DatasetManifests.java +++ b/src/main/java/com/gooddata/dataset/DatasetManifests.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -32,4 +33,9 @@ public DatasetManifests(@JsonProperty("dataSetSLIManifestList") Collection getManifests() { return manifests; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataset/EtlMode.java b/src/main/java/com/gooddata/dataset/EtlMode.java index 65a0162e5..eeb63f16c 100644 --- a/src/main/java/com/gooddata/dataset/EtlMode.java +++ b/src/main/java/com/gooddata/dataset/EtlMode.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; @JsonTypeName("etlMode") @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @@ -38,4 +39,9 @@ public EtlModeType getMode() { public LookupMode getLookup() { return lookup; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataset/Pull.java b/src/main/java/com/gooddata/dataset/Pull.java index 4d5d98b75..d9c1c49e5 100644 --- a/src/main/java/com/gooddata/dataset/Pull.java +++ b/src/main/java/com/gooddata/dataset/Pull.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; /** @@ -30,4 +31,9 @@ public Pull(String remoteDir) { public String getRemoteDir() { return remoteDir; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataset/TaskState.java b/src/main/java/com/gooddata/dataset/TaskState.java index c73040024..2fb7b1af2 100644 --- a/src/main/java/com/gooddata/dataset/TaskState.java +++ b/src/main/java/com/gooddata/dataset/TaskState.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; /** * Update Project Data task status (for internal use). @@ -50,4 +51,9 @@ public boolean isSuccess() { public boolean isFinished() { return OK.equals(status) || ERROR.equals(status); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataset/Upload.java b/src/main/java/com/gooddata/dataset/Upload.java index b834e4fe1..e973aeb11 100644 --- a/src/main/java/com/gooddata/dataset/Upload.java +++ b/src/main/java/com/gooddata/dataset/Upload.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.gooddata.util.BooleanDeserializer; import com.gooddata.util.GDDateTimeDeserializer; +import com.gooddata.util.GoodDataToStringBuilder; import org.joda.time.DateTime; import org.springframework.web.util.UriTemplate; @@ -121,4 +122,9 @@ private UploadMode toUploadMode(Boolean fullUpload) { return fullUpload ? UploadMode.FULL : UploadMode.INCREMENTAL; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataset/UploadStatistics.java b/src/main/java/com/gooddata/dataset/UploadStatistics.java index 478c36698..b2d2c9c63 100644 --- a/src/main/java/com/gooddata/dataset/UploadStatistics.java +++ b/src/main/java/com/gooddata/dataset/UploadStatistics.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.HashMap; @@ -43,4 +44,9 @@ public int getUploadsCount(String uploadStatus) { return uploadsCount != null ? uploadsCount : 0; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataset/Uploads.java b/src/main/java/com/gooddata/dataset/Uploads.java index 9b386424c..193947b5e 100644 --- a/src/main/java/com/gooddata/dataset/Uploads.java +++ b/src/main/java/com/gooddata/dataset/Uploads.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -33,4 +34,9 @@ class Uploads { Collection items() { return uploads; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/dataset/UploadsInfo.java b/src/main/java/com/gooddata/dataset/UploadsInfo.java index 4b305d2c1..e59f6aa14 100644 --- a/src/main/java/com/gooddata/dataset/UploadsInfo.java +++ b/src/main/java/com/gooddata/dataset/UploadsInfo.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; import com.gooddata.md.Meta; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Collection; @@ -59,6 +60,11 @@ DataSet getDataSet(String datasetId) { } } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + /** * Contains information about dataset uploads for one dataset in the project. Information contain: *
    @@ -105,6 +111,11 @@ String getUploadsUri() { String getLastUploadUri() { return lastUpload.uri; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } /** @@ -121,5 +132,10 @@ private static class LastUpload { private LastUpload(@JsonProperty("uri") String uri) { this.uri = uri; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlag.java b/src/main/java/com/gooddata/featureflag/FeatureFlag.java index a5b008278..e84808f78 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlag.java @@ -7,6 +7,8 @@ import static com.gooddata.util.Validate.notNull; +import com.gooddata.util.GoodDataToStringBuilder; + /** * Feature flag is a boolean flag used for enabling / disabling some specific feature of GoodData platform. * It can be used in various scopes (per project, per project group, per user, global etc.). @@ -50,6 +52,6 @@ public int hashCode() { @Override public String toString() { - return "{name='" + name + '\'' + ", enabled=" + enabled + "}"; + return GoodDataToStringBuilder.defaultToString(this); } } diff --git a/src/main/java/com/gooddata/featureflag/FeatureFlags.java b/src/main/java/com/gooddata/featureflag/FeatureFlags.java index e57305609..f85eceeb8 100644 --- a/src/main/java/com/gooddata/featureflag/FeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/FeatureFlags.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Iterator; @@ -100,6 +101,6 @@ public int hashCode() { @Override public String toString() { - return "FeatureFlags{" + featureFlags + "}"; + return GoodDataToStringBuilder.defaultToString(this); } } diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java index 2b1b0e775..c76dc9dc4 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlag.java @@ -6,6 +6,7 @@ package com.gooddata.featureflag; import com.fasterxml.jackson.annotation.*; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import static com.gooddata.util.Validate.notEmpty; @@ -104,11 +105,7 @@ public int hashCode() { @Override public String toString() { - return "ProjectFeatureFlag{" + - "name='" + name + '\'' + - ", enabled=" + enabled + - ", links=" + links + - '}'; + return GoodDataToStringBuilder.defaultToString(this); } @JsonIgnoreProperties(ignoreUnknown = true) @@ -126,9 +123,7 @@ public String getSelf() { @Override public String toString() { - return "Links{" + - "self='" + self + '\'' + - '}'; + return GoodDataToStringBuilder.defaultToString(this); } } } diff --git a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java index f3db98dc2..2db961853 100644 --- a/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java +++ b/src/main/java/com/gooddata/featureflag/ProjectFeatureFlags.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.*; import com.gooddata.project.Project; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Iterator; @@ -55,4 +56,8 @@ public boolean isEnabled(final String flagName) { return false; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/gdc/AboutLinks.java b/src/main/java/com/gooddata/gdc/AboutLinks.java index de90d6726..b95f46e04 100644 --- a/src/main/java/com/gooddata/gdc/AboutLinks.java +++ b/src/main/java/com/gooddata/gdc/AboutLinks.java @@ -6,6 +6,7 @@ package com.gooddata.gdc; import com.fasterxml.jackson.annotation.*; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; import java.util.List; @@ -50,6 +51,11 @@ public Collection getLinks() { return links; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + /** * Link with metadata. * Deserialization only. @@ -101,5 +107,10 @@ public String getCategory() { public String getSummary() { return summary; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/gdc/AbstractMaql.java b/src/main/java/com/gooddata/gdc/AbstractMaql.java index e73d53ae3..940436f25 100644 --- a/src/main/java/com/gooddata/gdc/AbstractMaql.java +++ b/src/main/java/com/gooddata/gdc/AbstractMaql.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; /** * Abstract MAQL statement. @@ -31,5 +32,8 @@ public String getMaql() { return maql; } - + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/gdc/LinkEntries.java b/src/main/java/com/gooddata/gdc/LinkEntries.java index 965e0814c..5848c6138 100644 --- a/src/main/java/com/gooddata/gdc/LinkEntries.java +++ b/src/main/java/com/gooddata/gdc/LinkEntries.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.List; @@ -29,6 +30,11 @@ protected List getEntries() { return entries; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) protected static class LinkEntry { private final String uri; @@ -56,5 +62,10 @@ public String getUri() { public String getCategory() { return category; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/gdc/TaskStatus.java b/src/main/java/com/gooddata/gdc/TaskStatus.java index f36dbacdb..e7cdf02ee 100644 --- a/src/main/java/com/gooddata/gdc/TaskStatus.java +++ b/src/main/java/com/gooddata/gdc/TaskStatus.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; import java.util.Collections; @@ -64,4 +65,8 @@ public boolean isRunning() { return RUNNING.equals(status); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/gdc/UriResponse.java b/src/main/java/com/gooddata/gdc/UriResponse.java index 3c91eadf0..6a84335f2 100644 --- a/src/main/java/com/gooddata/gdc/UriResponse.java +++ b/src/main/java/com/gooddata/gdc/UriResponse.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; /** * Response containing URI string. @@ -32,6 +33,6 @@ public String getUri() { @Override public String toString() { - return uri; + return GoodDataToStringBuilder.defaultToString(this); } } diff --git a/src/main/java/com/gooddata/md/AbstractObj.java b/src/main/java/com/gooddata/md/AbstractObj.java index a3b753cbe..56930221a 100644 --- a/src/main/java/com/gooddata/md/AbstractObj.java +++ b/src/main/java/com/gooddata/md/AbstractObj.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import org.joda.time.DateTime; import java.util.Set; @@ -156,4 +157,9 @@ protected static String[] uris(T... objs) { return uris; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + } diff --git a/src/main/java/com/gooddata/md/Attachment.java b/src/main/java/com/gooddata/md/Attachment.java index a22988efe..e258dd67a 100644 --- a/src/main/java/com/gooddata/md/Attachment.java +++ b/src/main/java/com/gooddata/md/Attachment.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.gooddata.util.GoodDataToStringBuilder; /** * Common ancestor to {@link ScheduledMail} attachments. @@ -48,4 +49,9 @@ public boolean equals(Object o) { public int hashCode() { return uri != null ? uri.hashCode() : 0; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/AttributeDisplayForm.java b/src/main/java/com/gooddata/md/AttributeDisplayForm.java index c0cbb6f87..7de6e2e53 100644 --- a/src/main/java/com/gooddata/md/AttributeDisplayForm.java +++ b/src/main/java/com/gooddata/md/AttributeDisplayForm.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; /** * Display form of attribute @@ -44,6 +45,11 @@ public boolean isDefault() { return Boolean.TRUE.equals(content.isDefault()); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content extends DisplayForm.Content { @@ -62,5 +68,10 @@ private Content(@JsonProperty("formOf") String formOf, @JsonProperty("expression public Boolean isDefault() { return isDefault; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/AttributeElement.java b/src/main/java/com/gooddata/md/AttributeElement.java index 04ec0f850..4e9794276 100644 --- a/src/main/java/com/gooddata/md/AttributeElement.java +++ b/src/main/java/com/gooddata/md/AttributeElement.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; /** * Represent one element of attribute values @@ -55,4 +56,9 @@ public int hashCode() { result = 31 * result + (title != null ? title.hashCode() : 0); return result; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/AttributeElements.java b/src/main/java/com/gooddata/md/AttributeElements.java index 6f2b81177..c379a106b 100644 --- a/src/main/java/com/gooddata/md/AttributeElements.java +++ b/src/main/java/com/gooddata/md/AttributeElements.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.List; @@ -58,4 +59,9 @@ public boolean equals(Object o) { public int hashCode() { return elements != null ? elements.hashCode() : 0; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/AttributeSort.java b/src/main/java/com/gooddata/md/AttributeSort.java index d00956326..9f83bbb1b 100644 --- a/src/main/java/com/gooddata/md/AttributeSort.java +++ b/src/main/java/com/gooddata/md/AttributeSort.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; import java.io.IOException; @@ -50,6 +51,11 @@ boolean isLinkType() { return linkType; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + static class Deserializer extends JsonDeserializer { @Override diff --git a/src/main/java/com/gooddata/md/Column.java b/src/main/java/com/gooddata/md/Column.java index 9bfeb9e8c..d9b1a8ca8 100644 --- a/src/main/java/com/gooddata/md/Column.java +++ b/src/main/java/com/gooddata/md/Column.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; /** * Represents physical data model column. Doesn't implement all fields right now. @@ -88,6 +89,10 @@ public boolean isDisplayForm() { return TYPE_DISPLAY_FORM.equals(getType()); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } @JsonIgnoreProperties(ignoreUnknown = true) private static class Content { @@ -114,5 +119,10 @@ public String getColumnDBName() { public String getColumnType() { return columnType; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/DashboardAttachment.java b/src/main/java/com/gooddata/md/DashboardAttachment.java index 8a541280e..83e8c8d54 100644 --- a/src/main/java/com/gooddata/md/DashboardAttachment.java +++ b/src/main/java/com/gooddata/md/DashboardAttachment.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Arrays; import java.util.Collection; @@ -61,13 +62,9 @@ public int hashCode() { return result; } + @Override public String toString() { - return "DashboardAttachment{" + - "uri=" + getUri() + - ", allTabs=" + allTabs + - ", tabs=" + tabs + - ", executionContext='" + executionContext + '\'' + - '}'; + return new GoodDataToStringBuilder(this).append("uri", getUri()).toString(); } } diff --git a/src/main/java/com/gooddata/md/DataLoadingColumn.java b/src/main/java/com/gooddata/md/DataLoadingColumn.java index fe883011b..d7f10371e 100644 --- a/src/main/java/com/gooddata/md/DataLoadingColumn.java +++ b/src/main/java/com/gooddata/md/DataLoadingColumn.java @@ -13,6 +13,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.gooddata.gdc.UriResponse; import com.gooddata.util.BooleanDeserializer; +import com.gooddata.util.GoodDataToStringBuilder; /** * Represents datasets' loading column. @@ -88,6 +89,11 @@ public Integer getSynchronizePrecision() { return content.getColumnSynchronize() != null ? content.getColumnSynchronize().getPrecision() : null; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + private static class Content { private final UriResponse columnUri; @@ -145,6 +151,11 @@ public boolean isColumnNull() { public ColumnSynchronize getColumnSynchronize() { return columnSynchronize; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } private static class ColumnSynchronize { @@ -171,5 +182,10 @@ public Integer getLength() { public Integer getPrecision() { return precision; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/Dataset.java b/src/main/java/com/gooddata/md/Dataset.java index b04d7f332..b604e4364 100644 --- a/src/main/java/com/gooddata/md/Dataset.java +++ b/src/main/java/com/gooddata/md/Dataset.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collections; import java.util.List; @@ -113,6 +114,11 @@ public String getUploadConfigurationUri() { return notNullState(links, "links").get(UPLOAD_CONFIGURATION_LINK); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { private final List ties; @@ -162,5 +168,10 @@ public List getAttributes() { public Boolean hasUploadConfiguration() { return hasUploadConfiguration; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/Dimension.java b/src/main/java/com/gooddata/md/Dimension.java index a89cdc528..e72b2dc2b 100644 --- a/src/main/java/com/gooddata/md/Dimension.java +++ b/src/main/java/com/gooddata/md/Dimension.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; import java.util.Collections; @@ -42,6 +43,11 @@ public Collection getAttributes() { return content.getAttributes(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + private static class Content { @JsonProperty("attributes") @@ -55,5 +61,10 @@ public Content(@JsonProperty("attributes") Collection attribute public Collection getAttributes() { return attributes; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/DisplayForm.java b/src/main/java/com/gooddata/md/DisplayForm.java index 2b0d5941a..0c34a079d 100644 --- a/src/main/java/com/gooddata/md/DisplayForm.java +++ b/src/main/java/com/gooddata/md/DisplayForm.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; /** * Display form @@ -67,6 +68,11 @@ public String getElementsUri() { return links.getElements(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) protected static class Content { @@ -101,6 +107,11 @@ public String getLdmExpression() { public String getType() { return type; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } @JsonIgnoreProperties(ignoreUnknown = true) @@ -115,6 +126,11 @@ protected Links(@JsonProperty("elements") String elements) { public String getElements() { return elements; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/Entry.java b/src/main/java/com/gooddata/md/Entry.java index 361baab7f..685d68aa4 100644 --- a/src/main/java/com/gooddata/md/Entry.java +++ b/src/main/java/com/gooddata/md/Entry.java @@ -154,4 +154,9 @@ public boolean isUnlisted() { public Boolean getUnlisted() { return unlisted; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/Expression.java b/src/main/java/com/gooddata/md/Expression.java index e6582364c..3d098a2ca 100644 --- a/src/main/java/com/gooddata/md/Expression.java +++ b/src/main/java/com/gooddata/md/Expression.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; /** * Expression of fact @@ -33,4 +34,9 @@ public String getData() { public String getType() { return type; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/Fact.java b/src/main/java/com/gooddata/md/Fact.java index 06e3c40b1..672ddf1be 100644 --- a/src/main/java/com/gooddata/md/Fact.java +++ b/src/main/java/com/gooddata/md/Fact.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -53,6 +54,11 @@ public Collection getFolders() { return content.getFolders(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { @@ -75,5 +81,10 @@ public Collection getExpression() { public Collection getFolders() { return folders; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/IdentifierAndUri.java b/src/main/java/com/gooddata/md/IdentifierAndUri.java index aa7bfb1d9..bea4c87b4 100644 --- a/src/main/java/com/gooddata/md/IdentifierAndUri.java +++ b/src/main/java/com/gooddata/md/IdentifierAndUri.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; /** * Encapsulates identifier and its URI. @@ -30,4 +31,9 @@ public String getIdentifier() { public String getUri() { return uri; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/IdentifierToUri.java b/src/main/java/com/gooddata/md/IdentifierToUri.java index df0018534..d9e71f22f 100644 --- a/src/main/java/com/gooddata/md/IdentifierToUri.java +++ b/src/main/java/com/gooddata/md/IdentifierToUri.java @@ -6,6 +6,7 @@ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -45,4 +46,9 @@ public boolean equals(Object o) { public int hashCode() { return identifiers.hashCode(); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/IdentifiersAndUris.java b/src/main/java/com/gooddata/md/IdentifiersAndUris.java index 922c191bc..dd9a7f790 100644 --- a/src/main/java/com/gooddata/md/IdentifiersAndUris.java +++ b/src/main/java/com/gooddata/md/IdentifiersAndUris.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.*; @@ -40,4 +41,9 @@ public Map asMap() { } return Collections.unmodifiableMap(identifiersToUris); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/InUseMany.java b/src/main/java/com/gooddata/md/InUseMany.java index 5cf185d03..8cf257c54 100644 --- a/src/main/java/com/gooddata/md/InUseMany.java +++ b/src/main/java/com/gooddata/md/InUseMany.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; import java.util.HashSet; @@ -97,4 +98,9 @@ public Set getTypes() { public boolean isNearest() { return nearest; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/Key.java b/src/main/java/com/gooddata/md/Key.java index 666f2c39a..01989fe73 100644 --- a/src/main/java/com/gooddata/md/Key.java +++ b/src/main/java/com/gooddata/md/Key.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; /** * Key (primary/foreign) of attribute @@ -33,4 +34,9 @@ public String getData() { public String getType() { return type; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/MaqlAst.java b/src/main/java/com/gooddata/md/MaqlAst.java index 5f612ab2b..0e6dfd097 100644 --- a/src/main/java/com/gooddata/md/MaqlAst.java +++ b/src/main/java/com/gooddata/md/MaqlAst.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; /** * MAQL AST representation @@ -57,6 +58,11 @@ public void setValue(final String value) { this.value = value; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + public static class MaqlAstPosition { private final int line; @@ -75,6 +81,11 @@ public int getColumn() { public int getLine() { return line; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/Meta.java b/src/main/java/com/gooddata/md/Meta.java index d528dad7d..08ec86ac3 100644 --- a/src/main/java/com/gooddata/md/Meta.java +++ b/src/main/java/com/gooddata/md/Meta.java @@ -243,6 +243,6 @@ public void setSharedWithSomeone(final Boolean sharedWithSomeone) { @Override public String toString() { - return GoodDataToStringBuilder.toStringExclude(this); + return GoodDataToStringBuilder.defaultToString(this); } } diff --git a/src/main/java/com/gooddata/md/Metric.java b/src/main/java/com/gooddata/md/Metric.java index 3e3062d0d..a79aa44e2 100644 --- a/src/main/java/com/gooddata/md/Metric.java +++ b/src/main/java/com/gooddata/md/Metric.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -61,6 +62,11 @@ public Collection getFolders() { return content.getFolders(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { @@ -109,5 +115,10 @@ public MaqlAst getMaqlAst() { public Collection getFolders() { return folders; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/NestedAttribute.java b/src/main/java/com/gooddata/md/NestedAttribute.java index 72cbce184..c30131477 100644 --- a/src/main/java/com/gooddata/md/NestedAttribute.java +++ b/src/main/java/com/gooddata/md/NestedAttribute.java @@ -6,6 +6,7 @@ package com.gooddata.md; import com.fasterxml.jackson.annotation.*; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -169,6 +170,11 @@ public Collection getGrain() { return content.getGrain(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonInclude(JsonInclude.Include.NON_NULL) protected static class Content { private final Collection pk; @@ -306,6 +312,11 @@ public Collection getFolders() { public Collection getGrain() { return grain; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/ProjectDashboard.java b/src/main/java/com/gooddata/md/ProjectDashboard.java index 7fc345144..d6e854062 100644 --- a/src/main/java/com/gooddata/md/ProjectDashboard.java +++ b/src/main/java/com/gooddata/md/ProjectDashboard.java @@ -14,6 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; import java.util.Objects; @@ -62,6 +63,11 @@ public Tab getTabByName(String name) { return null; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) private static class Content { @@ -72,6 +78,11 @@ private static class Content { private Content(@JsonProperty("tabs") Collection tabs) { this.tabs = tabs; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } @JsonIgnoreProperties(ignoreUnknown = true) @@ -94,5 +105,10 @@ public String getIdentifier() { public String getTitle() { return title; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/Query.java b/src/main/java/com/gooddata/md/Query.java index d97217208..69904b676 100644 --- a/src/main/java/com/gooddata/md/Query.java +++ b/src/main/java/com/gooddata/md/Query.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -51,6 +52,11 @@ public String getTitle() { return meta.getTitle(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) private static class Meta { @@ -77,6 +83,11 @@ public String getSummary() { public String getTitle() { return title; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/ReportAttachment.java b/src/main/java/com/gooddata/md/ReportAttachment.java index c392843ce..7f2590e43 100644 --- a/src/main/java/com/gooddata/md/ReportAttachment.java +++ b/src/main/java/com/gooddata/md/ReportAttachment.java @@ -8,6 +8,7 @@ import com.gooddata.report.ReportExportFormat; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Arrays; import java.util.Collection; @@ -123,10 +124,6 @@ public int hashCode() { @Override public String toString() { - return "ReportAttachment{" + - "uri=" + getUri() + - ", formats=" + formats + - ", exportOptions=" + exportOptions + - '}'; + return new GoodDataToStringBuilder(this).append("uri", getUri()).toString(); } } diff --git a/src/main/java/com/gooddata/md/Restriction.java b/src/main/java/com/gooddata/md/Restriction.java index 2a87eab0d..a5358c0dc 100644 --- a/src/main/java/com/gooddata/md/Restriction.java +++ b/src/main/java/com/gooddata/md/Restriction.java @@ -5,6 +5,8 @@ */ package com.gooddata.md; +import com.gooddata.util.GoodDataToStringBuilder; + /** * Metadata query restriction. See static factory methods to get instance of desired restriction type. */ @@ -57,6 +59,11 @@ public static Restriction summary(String value) { return new Restriction(Type.SUMMARY, value); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + enum Type { IDENTIFIER, TITLE, SUMMARY } diff --git a/src/main/java/com/gooddata/md/ScheduledMail.java b/src/main/java/com/gooddata/md/ScheduledMail.java index 5e8eaaaaf..601d4b8eb 100644 --- a/src/main/java/com/gooddata/md/ScheduledMail.java +++ b/src/main/java/com/gooddata/md/ScheduledMail.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.*; import com.gooddata.md.report.ReportDefinition; import com.gooddata.report.ReportExportFormat; +import com.gooddata.util.GoodDataToStringBuilder; import org.joda.time.LocalDate; import java.util.*; @@ -164,6 +165,10 @@ public void setAttachments(Collection attachments) { this.attachments = attachments; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } @JsonIgnore @@ -252,4 +257,8 @@ public ScheduledMail addDashboardAttachment(String uri, Integer allTabs, String return this; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/ScheduledMailWhen.java b/src/main/java/com/gooddata/md/ScheduledMailWhen.java index a60a09545..130ccffc7 100644 --- a/src/main/java/com/gooddata/md/ScheduledMailWhen.java +++ b/src/main/java/com/gooddata/md/ScheduledMailWhen.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; import org.joda.time.LocalDate; /** @@ -78,4 +79,9 @@ public void setStartDate(LocalDate startDate) { public void setTimeZone(String timeZone) { this.timeZone = timeZone; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/Table.java b/src/main/java/com/gooddata/md/Table.java index 972a668dd..595c4153b 100644 --- a/src/main/java/com/gooddata/md/Table.java +++ b/src/main/java/com/gooddata/md/Table.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -57,6 +58,11 @@ public String getActiveDataLoad() { return content.getActiveDataLoad(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) private static class Content { @@ -89,5 +95,10 @@ public Collection getTableDataLoads() { public Integer getWeight() { return weight; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/TableDataLoad.java b/src/main/java/com/gooddata/md/TableDataLoad.java index 3f391bc00..b30eff24f 100644 --- a/src/main/java/com/gooddata/md/TableDataLoad.java +++ b/src/main/java/com/gooddata/md/TableDataLoad.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; /** * Represents data load of physical table. @@ -58,6 +59,11 @@ public String getType() { return content.getTypeOfLoad(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) private static class Content { @@ -77,5 +83,10 @@ public String getDataSourceLocation() { public String getTypeOfLoad() { return typeOfLoad; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/Usage.java b/src/main/java/com/gooddata/md/Usage.java index 6c99cf4a1..9a642eaca 100644 --- a/src/main/java/com/gooddata/md/Usage.java +++ b/src/main/java/com/gooddata/md/Usage.java @@ -5,6 +5,8 @@ */ package com.gooddata.md; +import com.gooddata.util.GoodDataToStringBuilder; + import java.util.Collection; /** @@ -33,4 +35,9 @@ public String getUri() { public Collection getUsedBy() { return usedBy; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/UseMany.java b/src/main/java/com/gooddata/md/UseMany.java index 0a51821a1..bb29a1525 100644 --- a/src/main/java/com/gooddata/md/UseMany.java +++ b/src/main/java/com/gooddata/md/UseMany.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -31,4 +32,9 @@ class UseMany { public Collection getUseMany() { return useMany; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/UseManyEntries.java b/src/main/java/com/gooddata/md/UseManyEntries.java index 146a0acc5..224a7939c 100644 --- a/src/main/java/com/gooddata/md/UseManyEntries.java +++ b/src/main/java/com/gooddata/md/UseManyEntries.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -34,4 +35,9 @@ public String getUri() { public Collection getEntries() { return entries; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java index c30bd877e..31b8cd20f 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdArtifact.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.*; import com.gooddata.gdc.UriResponse; +import com.gooddata.util.GoodDataToStringBuilder; /** * Partial metadata export result structure. @@ -39,4 +40,9 @@ public String getToken() { private UriResponse getStatus() { return status; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java index 34ebd6f8b..1ab179dc8 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExport.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Collection; @@ -88,4 +89,9 @@ public boolean isCrossDataCenterExport() { public boolean isExportAttributeProperties() { return exportAttributeProperties; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java index a18f9f3e9..c40644321 100644 --- a/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java +++ b/src/main/java/com/gooddata/md/maintenance/PartialMdExportToken.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; /** @@ -113,4 +114,9 @@ public void setUpdateLDMObjects(boolean updateLDMObjects) { public void setImportAttributeProperties(boolean importAttributeProperties) { this.importAttributeProperties = importAttributeProperties; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index 11cd22818..d694499db 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -14,6 +14,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.gooddata.md.Attribute; import com.gooddata.md.DisplayForm; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.ArrayList; import java.util.List; @@ -138,4 +139,9 @@ public String getUri() { public String getAlias() { return alias; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/report/Filter.java b/src/main/java/com/gooddata/md/report/Filter.java index b13551481..2b5efae31 100644 --- a/src/main/java/com/gooddata/md/report/Filter.java +++ b/src/main/java/com/gooddata/md/report/Filter.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import static com.gooddata.util.Validate.notEmpty; @@ -29,4 +30,9 @@ public Filter(@JsonProperty("expression") final String expression) { public String getExpression() { return expression; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/report/Grid.java b/src/main/java/com/gooddata/md/report/Grid.java index 764f1b160..8e94fe283 100644 --- a/src/main/java/com/gooddata/md/report/Grid.java +++ b/src/main/java/com/gooddata/md/report/Grid.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; import java.util.Collections; @@ -87,4 +88,9 @@ public Collection> getColumnWidths() { public Map> getSort() { return sort; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/report/MetricElement.java b/src/main/java/com/gooddata/md/report/MetricElement.java index 3895e3421..7ef741807 100644 --- a/src/main/java/com/gooddata/md/report/MetricElement.java +++ b/src/main/java/com/gooddata/md/report/MetricElement.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.gooddata.md.Metric; +import com.gooddata.util.GoodDataToStringBuilder; import static com.gooddata.util.Validate.notNull; @@ -81,4 +82,9 @@ public String getFormat() { public String getDrillAcrossStepAttributeDisplayFormUri() { return drillAcrossStepAttributeDisplayFormUri; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/report/Report.java b/src/main/java/com/gooddata/md/report/Report.java index 7b9a75de2..1ff274bce 100644 --- a/src/main/java/com/gooddata/md/report/Report.java +++ b/src/main/java/com/gooddata/md/report/Report.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -58,6 +59,11 @@ public Collection getDomains() { return content.getDomains(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + private static class Content { private final Collection definitions; private final Collection domains; @@ -76,5 +82,10 @@ public Collection getDefinitions() { public Collection getDomains() { return domains; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/md/report/ReportDefinition.java b/src/main/java/com/gooddata/md/report/ReportDefinition.java index 4ce2bed10..3957db5ce 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinition.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinition.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Map; @@ -78,4 +79,8 @@ public String getExplainUri() { return notNullState(links, "links").get(EXPLAIN_LINK); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java b/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java index e967aed80..8825fcda0 100644 --- a/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java +++ b/src/main/java/com/gooddata/md/report/ReportDefinitionContent.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -47,4 +48,9 @@ public Grid getGrid() { public Collection getFilters() { return filters; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/model/DiffRequest.java b/src/main/java/com/gooddata/model/DiffRequest.java index f57e7897a..d3308ae63 100644 --- a/src/main/java/com/gooddata/model/DiffRequest.java +++ b/src/main/java/com/gooddata/model/DiffRequest.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonRawValue; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import static com.gooddata.util.Validate.notNull; @@ -45,4 +46,8 @@ public String getTargetModel() { return targetModel; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/model/ModelDiff.java b/src/main/java/com/gooddata/model/ModelDiff.java index 714fe91eb..fa86ed195 100644 --- a/src/main/java/com/gooddata/model/ModelDiff.java +++ b/src/main/java/com/gooddata/model/ModelDiff.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collections; import java.util.List; @@ -101,6 +102,11 @@ private UpdateScript getUpdateScriptByFlags(final boolean preserveData, final bo return result; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + /** * Set of MAQL DDL scripts with one variant of side-effects (truncation of loaded data, drops of related objects...). */ @@ -166,5 +172,10 @@ public Boolean isPreserveData() { public Boolean isCascadeDrops() { return cascadeDrops; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/notification/ProjectEvent.java b/src/main/java/com/gooddata/notification/ProjectEvent.java index 1f1eacd01..93f2a363c 100644 --- a/src/main/java/com/gooddata/notification/ProjectEvent.java +++ b/src/main/java/com/gooddata/notification/ProjectEvent.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.HashMap; @@ -85,4 +86,9 @@ public int hashCode() { result = 31 * result + (parameters != null ? parameters.hashCode() : 0); return result; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/project/Project.java b/src/main/java/com/gooddata/project/Project.java index be003f981..f84723bbc 100644 --- a/src/main/java/com/gooddata/project/Project.java +++ b/src/main/java/com/gooddata/project/Project.java @@ -16,6 +16,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gooddata.util.GoodDataToStringBuilder; import org.joda.time.DateTime; import org.springframework.web.util.UriTemplate; @@ -422,6 +423,11 @@ public void setEnvironment(final Environment environment) { setEnvironment(environment.name()); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) private static class ProjectContent { @@ -505,6 +511,11 @@ public String getEnvironment() { public void setEnvironment(final String environment) { this.environment = environment; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } @JsonIgnoreProperties(ignoreUnknown = true) @@ -673,5 +684,10 @@ public String getProjectTemplate() { public void setProjectTemplate(String projectTemplate) { this.projectTemplate = projectTemplate; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/project/ProjectTemplate.java b/src/main/java/com/gooddata/project/ProjectTemplate.java index b8747c586..be5734c22 100644 --- a/src/main/java/com/gooddata/project/ProjectTemplate.java +++ b/src/main/java/com/gooddata/project/ProjectTemplate.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; /** * Project template. @@ -44,4 +45,8 @@ public String getVersion() { return version; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/project/ProjectTemplates.java b/src/main/java/com/gooddata/project/ProjectTemplates.java index 809edd263..6b8dd0923 100644 --- a/src/main/java/com/gooddata/project/ProjectTemplates.java +++ b/src/main/java/com/gooddata/project/ProjectTemplates.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -30,4 +31,9 @@ class ProjectTemplates { public Collection getTemplatesInfo() { return templatesInfo; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/project/ProjectValidationResult.java b/src/main/java/com/gooddata/project/ProjectValidationResult.java index a8810d73e..65f2165cf 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResult.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResult.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.List; @@ -96,4 +97,9 @@ public int hashCode() { return result; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + } diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java index 5fa88b0bb..d1396c01f 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultGdcTimeElParam.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.List; import java.util.Objects; @@ -58,6 +59,6 @@ public int hashCode() { @Override public String toString() { - return ids.toString(); + return GoodDataToStringBuilder.defaultToString(this); } } diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultItem.java b/src/main/java/com/gooddata/project/ProjectValidationResultItem.java index 554b74716..a2986d951 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultItem.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultItem.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.List; @@ -35,6 +36,11 @@ ProjectValidationType getValidation() { return validation; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) private static class Body { @@ -44,5 +50,10 @@ private static class Body { private Body(@JsonProperty("log") List logs) { this.logs = logs; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java index e258d0163..5eabf72b2 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultObjectParam.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; @JsonTypeName("object") @JsonIgnoreProperties(ignoreUnknown = true) @@ -36,7 +37,7 @@ public String getUri() { @Override public String toString() { - return name + " (" + uri + ")"; + return GoodDataToStringBuilder.defaultToString(this); } @Override diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java index 6e7ee0406..0d5b2ca40 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultSliElParam.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.LinkedHashMap; import java.util.List; @@ -109,6 +110,6 @@ public int hashCode() { @Override public String toString() { - return ids + " " + vals; + return GoodDataToStringBuilder.defaultToString(this); } } diff --git a/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java b/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java index 8e828f5f5..56167a175 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResultStringParam.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; @JsonTypeName("common") @JsonIgnoreProperties(ignoreUnknown = true) @@ -30,7 +31,7 @@ public String getValue() { @Override public String toString() { - return value; + return GoodDataToStringBuilder.defaultToString(this); } @Override diff --git a/src/main/java/com/gooddata/project/ProjectValidationResults.java b/src/main/java/com/gooddata/project/ProjectValidationResults.java index 7c08537e1..995e5569e 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationResults.java +++ b/src/main/java/com/gooddata/project/ProjectValidationResults.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.LinkedList; import java.util.List; @@ -95,4 +96,8 @@ public List getResults() { return results; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/project/ProjectValidationType.java b/src/main/java/com/gooddata/project/ProjectValidationType.java index 458f11363..bdd5c38a3 100644 --- a/src/main/java/com/gooddata/project/ProjectValidationType.java +++ b/src/main/java/com/gooddata/project/ProjectValidationType.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; +import com.gooddata.util.GoodDataToStringBuilder; /** * Represents project validation type. @@ -49,4 +50,9 @@ public boolean equals(Object o) { public int hashCode() { return value.hashCode(); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/project/ProjectValidations.java b/src/main/java/com/gooddata/project/ProjectValidations.java index 680d5f870..4b21c8ab7 100644 --- a/src/main/java/com/gooddata/project/ProjectValidations.java +++ b/src/main/java/com/gooddata/project/ProjectValidations.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.HashSet; import java.util.Set; @@ -41,4 +42,9 @@ public Set getValidations() { return validations; } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + } diff --git a/src/main/java/com/gooddata/project/Projects.java b/src/main/java/com/gooddata/project/Projects.java index b768694ec..1992c9e45 100644 --- a/src/main/java/com/gooddata/project/Projects.java +++ b/src/main/java/com/gooddata/project/Projects.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.Collection; @@ -30,4 +31,9 @@ public Projects(@JsonProperty("projects") Collection projects) { public Collection getProjects() { return projects; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index c7846719d..3b190520c 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Collections; @@ -130,4 +131,9 @@ public int hashCode() { result = 31 * result + (getIdentifier() != null ? getIdentifier().hashCode() : 0); return result; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/project/Roles.java b/src/main/java/com/gooddata/project/Roles.java index bf3cf87e1..59bb8f88b 100644 --- a/src/main/java/com/gooddata/project/Roles.java +++ b/src/main/java/com/gooddata/project/Roles.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Set; @@ -34,4 +35,9 @@ class Roles { Set getRoles() { return roles; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/project/User.java b/src/main/java/com/gooddata/project/User.java index 858c24ffd..664e911e5 100644 --- a/src/main/java/com/gooddata/project/User.java +++ b/src/main/java/com/gooddata/project/User.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import java.util.List; @@ -58,6 +59,11 @@ public String getPhoneNumber() { return content.getPhoneNumber(); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) private static class UserContent { @@ -127,5 +133,10 @@ public String getLastName() { public String getLogin() { return login; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } } diff --git a/src/main/java/com/gooddata/report/ExecuteDefinition.java b/src/main/java/com/gooddata/report/ExecuteDefinition.java index 12e352fba..99982b6c7 100644 --- a/src/main/java/com/gooddata/report/ExecuteDefinition.java +++ b/src/main/java/com/gooddata/report/ExecuteDefinition.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import static com.gooddata.util.Validate.notNull; @@ -22,4 +23,9 @@ public ExecuteDefinition(final String reportDefinitionUri) { public String getReportDefinitionUri() { return reportDefinitionUri; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/report/ExecuteReport.java b/src/main/java/com/gooddata/report/ExecuteReport.java index d97f9a2fc..2c2b63ede 100644 --- a/src/main/java/com/gooddata/report/ExecuteReport.java +++ b/src/main/java/com/gooddata/report/ExecuteReport.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import com.gooddata.util.GoodDataToStringBuilder; import static com.gooddata.util.Validate.notNull; @@ -22,4 +23,9 @@ public ExecuteReport(final String reportUri) { public String getReportUri() { return reportUri; } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/util/GoodDataToStringBuilder.java b/src/main/java/com/gooddata/util/GoodDataToStringBuilder.java new file mode 100644 index 000000000..a569f38df --- /dev/null +++ b/src/main/java/com/gooddata/util/GoodDataToStringBuilder.java @@ -0,0 +1,37 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.util; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.builder.RecursiveToStringStyle; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; + +/** + * GoodDataToStringBuilder enables to create string representation based on fields of an object and exclude specified fields. + * links field is excluded by default. + */ +public class GoodDataToStringBuilder extends ReflectionToStringBuilder { + + private static final String LINKS_FIELD_NAME = "links"; + + public GoodDataToStringBuilder(Object object) { + super(object, RecursiveToStringStyle.SHORT_PREFIX_STYLE); + setExcludeFieldNames(LINKS_FIELD_NAME); + } + + /** + * creates String representation of an object using reflection to get fields of an object. + * links field of an object is ignored by default, allows to specify more fields to be excluded + * + * @param object to create String representation for + * @param excludeFieldNames name of fields of an object to be excluded from String representation + * @return String representation, which excludes links field by default + */ + public static String defaultToString(Object object, String... excludeFieldNames) { + return new GoodDataToStringBuilder(object).setExcludeFieldNames(ArrayUtils.add(excludeFieldNames, LINKS_FIELD_NAME)) + .toString(); + } +} diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index 944c64c1f..443b46b3c 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.gooddata.project.Environment; +import com.gooddata.util.GoodDataToStringBuilder; import com.gooddata.util.ISODateTimeDeserializer; import com.gooddata.util.ISODateTimeSerializer; import com.fasterxml.jackson.annotation.JsonCreator; @@ -167,4 +168,9 @@ public String getId() { public boolean isEnabled() { return STATUS_ENABLED.equals(status); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/warehouse/WarehouseSchema.java b/src/main/java/com/gooddata/warehouse/WarehouseSchema.java index c8057f630..8b23ef65c 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseSchema.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseSchema.java @@ -13,6 +13,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Map; @@ -68,4 +69,9 @@ public String getUri() { public String getInstanceUri() { return notNullState(links, "links").get(INSTANCE_LINK); } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/main/java/com/gooddata/warehouse/WarehouseUser.java b/src/main/java/com/gooddata/warehouse/WarehouseUser.java index d695e866e..ab4a5cca1 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseUser.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseUser.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.gooddata.util.GoodDataToStringBuilder; import org.springframework.web.util.UriTemplate; import java.util.Map; @@ -85,4 +86,8 @@ public String getUri() { return notNullState(links, "links").get(SELF_LINK); } + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } } diff --git a/src/test/java/com/gooddata/account/AccountTest.java b/src/test/java/com/gooddata/account/AccountTest.java index 8e5827f92..d428990bb 100644 --- a/src/test/java/com/gooddata/account/AccountTest.java +++ b/src/test/java/com/gooddata/account/AccountTest.java @@ -12,6 +12,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class AccountTest { @@ -46,4 +47,11 @@ public void testSerializationOfCreateAccount() { assertThat(account, serializesToJson("/account/create-account.json")); } + @Test + public void testToStringFormat() { + final Account account = new Account(FIRST_NAME, LAST_NAME, null); + + assertThat(account.toString(), matchesPattern(Account.class.getSimpleName() + "\\[.*\\]")); + } + } diff --git a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java index c13bc4a47..c3a1224bc 100644 --- a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java @@ -20,6 +20,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import static org.joda.time.DateTime.now; public class IntegrationProcessStatusTest { @@ -100,4 +101,11 @@ public void testIsFailedOnUnknownCode() throws Exception { assertThat(process.isFailed(), is(false)); } + @Test + public void testToStringFormat() { + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); + + assertThat(process.toString(), matchesPattern(IntegrationProcessStatus.class.getSimpleName() + "\\[.*\\]")); + } + } diff --git a/src/test/java/com/gooddata/connector/IntegrationTest.java b/src/test/java/com/gooddata/connector/IntegrationTest.java index 00e0dccb2..0fee2cfb9 100644 --- a/src/test/java/com/gooddata/connector/IntegrationTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationTest.java @@ -13,6 +13,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class IntegrationTest { @@ -43,4 +44,11 @@ public void testSimplifiedConstructor() throws Exception { assertThat(integration.isActive(), is(true)); } + @Test + public void testToStringFormat() { + final Integration integration = new Integration("template"); + + assertThat(integration.toString(), matchesPattern(Integration.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/connector/StatusTest.java b/src/test/java/com/gooddata/connector/StatusTest.java index d8fa6d8b5..c45eb794f 100644 --- a/src/test/java/com/gooddata/connector/StatusTest.java +++ b/src/test/java/com/gooddata/connector/StatusTest.java @@ -13,6 +13,7 @@ import static com.gooddata.connector.Status.Code.USER_ERROR; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class StatusTest { @@ -66,4 +67,11 @@ public void testIsFailedOnUnknownCode() throws Exception { assertThat(new Status("unknown code", "", "").isFailed(), is(false)); } + @Test + public void testToStringFormat() { + final Status status = new Status("unknown code", "", ""); + + assertThat(status.toString(), matchesPattern(Status.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java b/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java index 27edcf41e..dcdfa46cf 100644 --- a/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/connector/Zendesk4ProcessExecutionTest.java @@ -12,6 +12,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class Zendesk4ProcessExecutionTest { @@ -52,4 +53,11 @@ public void testGetDownloadParams() throws Exception { final DownloadParams downloadParams = execution.getDownloadParams(); assertThat(downloadParams, notNullValue()); } + + @Test + public void testToStringFormat() { + final Zendesk4ProcessExecution execution = new Zendesk4ProcessExecution(); + + assertThat(execution.toString(), matchesPattern(Zendesk4ProcessExecution.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java b/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java index c47c57315..83cf5aef3 100644 --- a/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java +++ b/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java @@ -14,6 +14,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class Zendesk4SettingsTest { @@ -58,4 +59,11 @@ public void testSetApiUrl() throws Exception { settings.setApiUrl("new url"); assertThat(settings.getApiUrl(), is("new url")); } + + @Test + public void testToStringFormat() { + final Zendesk4Settings settings = new Zendesk4Settings("old url"); + + assertThat(settings.toString(), matchesPattern(Zendesk4Settings.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataload/OutputStageTest.java b/src/test/java/com/gooddata/dataload/OutputStageTest.java index c03cb1bcd..6d9cf1cd8 100644 --- a/src/test/java/com/gooddata/dataload/OutputStageTest.java +++ b/src/test/java/com/gooddata/dataload/OutputStageTest.java @@ -10,6 +10,7 @@ import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -66,7 +67,7 @@ public void testDeserialization() throws Exception { assertThat(outputStage.hasOutputStagePrefix(), is(false)); } - @Test(dependsOnMethods = "testDeserialization") + @Test public void testSerializationAfterDeserialization() throws Exception { final InputStream stream = getClass().getResourceAsStream("/dataload/outputStage.json"); final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); @@ -76,4 +77,12 @@ public void testSerializationAfterDeserialization() throws Exception { outputStage.setOutputStagePrefix(OUTPUT_STAGE_PREFIX); assertThat(outputStage, serializesToJson("/dataload/outputStageNoProcess.json")); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataload/outputStage.json"); + final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + + assertThat(outputStage.toString(), matchesPattern(OutputStage.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java index c69796763..cac3617dc 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java @@ -10,6 +10,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -42,4 +43,11 @@ public void testSerialization() { final DataloadProcess processWithPath = new DataloadProcess("testProcess", "GROOVY", "/uploads/process.zip"); assertThat(processWithPath, serializesToJson("/dataload/processes/process-input-withPath.json")); } + + @Test + public void testToStringFormat() { + final DataloadProcess process = new DataloadProcess("testProcess", "GROOVY"); + + assertThat(process.toString(), matchesPattern(DataloadProcess.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java index cf77010ef..0aabe61c4 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java @@ -12,6 +12,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class DataloadProcessesTest { @@ -24,4 +25,12 @@ public void testDeserialization() throws Exception { assertThat(processes.getItems(), hasSize(1)); } + @Test + public void testToStringFormat() throws Exception { + final DataloadProcesses processes = new ObjectMapper() + .readValue(getClass().getResourceAsStream("/dataload/processes/processes.json"), DataloadProcesses.class); + + assertThat(processes.toString(), matchesPattern(DataloadProcesses.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java index 823d68cdc..467ff2782 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java @@ -13,6 +13,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.core.Is.is; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ProcessExecutionDetailTest { @@ -37,4 +38,12 @@ public void testDeserialization() throws Exception { assertThat(executionDetail.getExecutionUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId")); } + @Test + public void testToStringFormat() throws Exception { + final ProcessExecutionDetail executionDetail = MAPPER.readValue(getClass().getResourceAsStream("/dataload/processes/executionDetail.json"), + ProcessExecutionDetail.class); + + assertThat(executionDetail.toString(), matchesPattern(ProcessExecutionDetail.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java index 98e698021..c26bc28fd 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java @@ -7,6 +7,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -31,4 +32,12 @@ public void testSerialization() throws Exception { assertThat(execution, serializesToJson("/dataload/processes/execution.json")); } + @Test + public void testToStringFormat() throws Exception { + final DataloadProcess process = new ObjectMapper().readValue(getClass().getResourceAsStream("/dataload/processes/process.json"), DataloadProcess.class); + final ProcessExecution execution = new ProcessExecution(process, "test.groovy"); + + assertThat(execution.toString(), matchesPattern(ProcessExecution.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index 7a4f89790..00e885592 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -26,6 +26,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsMapContaining.hasEntry; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; import static org.testng.Assert.fail; @@ -213,4 +214,11 @@ public void testCreateTriggeredScheduleWithNotCreatedSchedule() { final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); new Schedule(process, EXECUTABLE, schedule); } + + @Test + public void testToStringFormat() { + final Schedule schedule = new Schedule(process, EXECUTABLE, "0 0 * * *"); + + assertThat(schedule.toString(), matchesPattern(Schedule.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/DatasetManifestTest.java b/src/test/java/com/gooddata/dataset/DatasetManifestTest.java index 4a432d513..c95012832 100644 --- a/src/test/java/com/gooddata/dataset/DatasetManifestTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetManifestTest.java @@ -17,6 +17,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class DatasetManifestTest { @@ -94,4 +95,11 @@ public void shouldFailOnSetFileNull() { final DatasetManifest manifest = new DatasetManifest("dataset.name"); manifest.setFile(null); } + + @Test + public void testToStringFormat() { + final DatasetManifest manifest = new DatasetManifest("dataset.name"); + + assertThat(manifest.toString(), matchesPattern(DatasetManifest.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/dataset/PullTest.java b/src/test/java/com/gooddata/dataset/PullTest.java index b99051912..8dc8722ed 100644 --- a/src/test/java/com/gooddata/dataset/PullTest.java +++ b/src/test/java/com/gooddata/dataset/PullTest.java @@ -9,6 +9,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class PullTest { @@ -17,4 +18,11 @@ public void testSerialization() throws Exception { final Pull pull = new Pull("DIR"); assertThat(pull, serializesToJson("/dataset/pull.json")); } + + @Test + public void testToStringFormat() { + final Pull pull = new Pull("DIR"); + + assertThat(pull.toString(), matchesPattern(Pull.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/dataset/TaskStateTest.java b/src/test/java/com/gooddata/dataset/TaskStateTest.java index 593e62845..1927c9344 100644 --- a/src/test/java/com/gooddata/dataset/TaskStateTest.java +++ b/src/test/java/com/gooddata/dataset/TaskStateTest.java @@ -13,6 +13,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class TaskStateTest { @@ -23,4 +24,12 @@ public void testDeserialize() throws IOException { assertThat(taskState.getStatus(), is("OK")); assertThat(taskState.getMessage(), is("ok message")); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataset/taskStateOK.json"); + TaskState taskState = new ObjectMapper().readValue(stream, TaskState.class); + + assertThat(taskState.toString(), matchesPattern(TaskState.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java index c32cc7de3..f3a2fedfa 100644 --- a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java @@ -8,6 +8,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -28,4 +29,12 @@ public void shouldDeserialize() throws Exception { assertThat(uploadStatistics.getUploadsCount("RUNNING"), is(1)); assertThat(uploadStatistics.getUploadsCount("NOT_DEFINED"), is(0)); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-uploads-info.json"); + final UploadStatistics uploadStatistics = new ObjectMapper().readValue(input, UploadStatistics.class); + + assertThat(uploadStatistics.toString(), matchesPattern(UploadStatistics.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/UploadTest.java b/src/test/java/com/gooddata/dataset/UploadTest.java index 56b7727e8..1273b803a 100644 --- a/src/test/java/com/gooddata/dataset/UploadTest.java +++ b/src/test/java/com/gooddata/dataset/UploadTest.java @@ -9,6 +9,7 @@ import static org.hamcrest.Matchers.closeTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; @@ -34,4 +35,12 @@ public void shouldDeserialize() throws Exception { assertThat(upload.getSize(), is(130501)); assertThat(upload.getProcessedAt(), is(new DateTime(2016, 4, 8, 12, 55, 25, DateTimeZone.UTC))); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/upload.json"); + final Upload upload = new ObjectMapper().readValue(input, Upload.class); + + assertThat(upload.toString(), matchesPattern(Upload.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java index 69bf201ba..ca7c2fead 100644 --- a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java @@ -8,6 +8,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -36,4 +37,12 @@ public void shouldDeserialize() throws Exception { public void getDatasetUploadInfoFails() throws Exception { new UploadsInfo(Collections.emptyList()).getDataSet("dataset.non_existing_one"); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-sets.json"); + final UploadsInfo uploadsInfo = new ObjectMapper().readValue(input, UploadsInfo.class); + + assertThat(uploadsInfo.toString(), matchesPattern(UploadsInfo.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/dataset/UploadsTest.java b/src/test/java/com/gooddata/dataset/UploadsTest.java index 66dd73797..0b1044b8f 100644 --- a/src/test/java/com/gooddata/dataset/UploadsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsTest.java @@ -9,6 +9,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.Matchers; @@ -27,4 +28,12 @@ public void shouldDeserialize() throws Exception { assertThat(uploads.items(), not(Matchers.empty())); assertThat(uploads.items().size(), is(2)); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream input = getClass().getResourceAsStream("/dataset/uploads/uploads.json"); + final Uploads uploads = new ObjectMapper().readValue(input, Uploads.class); + + assertThat(uploads.toString(), matchesPattern(Uploads.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java index 9f035fc9f..6e948d845 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagsTest.java @@ -13,6 +13,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.isOneOf; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; @@ -74,4 +75,11 @@ public void testRemoveFlag() throws Exception { assertFalse(flags.isEnabled("enabledFlag")); assertFalse(flags.iterator().hasNext()); } + + @Test + public void testToStringFormat() { + final FeatureFlags flags = new FeatureFlags(); + + assertThat(flags.toString(), matchesPattern(FeatureFlags.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java index 187af80d2..895af1679 100644 --- a/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java +++ b/src/test/java/com/gooddata/featureflag/ProjectFeatureFlagTest.java @@ -9,6 +9,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ProjectFeatureFlagTest { @@ -33,4 +34,11 @@ public void testEmptyName() throws Exception { public void testEmptyNameWithValue() throws Exception { new ProjectFeatureFlag(" ", false); } + + @Test + public void testToStringFormat() { + final ProjectFeatureFlag flag = new ProjectFeatureFlag("test", false); + + assertThat(flag.toString(), matchesPattern(ProjectFeatureFlag.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java index 0f7390453..b7724377c 100644 --- a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java +++ b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java @@ -14,6 +14,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class LinkEntriesTest { @@ -30,4 +31,12 @@ public void testDeserialization() throws Exception { assertThat(linkEntries.getEntries().get(0).getUri(), is("URI")); assertThat(linkEntries.getEntries().get(0).getCategory(), is("tasks-status")); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/gdc/linkEntries.json"); + final LinkEntries linkEntries = new ObjectMapper().readValue(stream, LinkEntries.class); + + assertThat(linkEntries.toString(), matchesPattern(LinkEntries.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java index 9b8b54455..4324f7b40 100644 --- a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java +++ b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java @@ -14,6 +14,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class AttributeDisplayFormTest { @@ -56,4 +57,12 @@ public void shouldSerializeSameAsDeserializationInput() throws Exception { assertThat(attrDF, serializesToJson("/md/attributeDisplayForm-inputOrig.json")); } + @Test + public void testToStringFormat() { + final DisplayForm attrDF = new AttributeDisplayForm("Person Name", FORM_OF, EXPRESSION, DEFAULT, + LDM_EXPRESSION, TYPE, ELEMENTS_LINK); + + assertThat(attrDF.toString(), matchesPattern(AttributeDisplayForm.class.getSimpleName() + "\\[.*\\]")); + } + } diff --git a/src/test/java/com/gooddata/md/AttributeElementTest.java b/src/test/java/com/gooddata/md/AttributeElementTest.java index adda94868..4fa6b4b6b 100644 --- a/src/test/java/com/gooddata/md/AttributeElementTest.java +++ b/src/test/java/com/gooddata/md/AttributeElementTest.java @@ -8,6 +8,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -29,4 +30,11 @@ public void shouldDeserialize() throws Exception { assertThat(element.getTitle(), is(TITLE)); } + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/attributeElement.json"); + final AttributeElement element = new ObjectMapper().readValue(stream, AttributeElement.class); + + assertThat(element.toString(), matchesPattern(AttributeElement.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/AttributeSortTest.java b/src/test/java/com/gooddata/md/AttributeSortTest.java index 56e0bd309..a52c86126 100644 --- a/src/test/java/com/gooddata/md/AttributeSortTest.java +++ b/src/test/java/com/gooddata/md/AttributeSortTest.java @@ -7,6 +7,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.JsonMatchers; @@ -41,4 +42,11 @@ public void testDeserializeLink() throws Exception { assertThat(attributeSort, is(notNullValue())); assertThat(attributeSort.getValue(), is("/gdc/md/PROJECT_ID/obj/1806")); } + + @Test + public void testToStringFormat() { + final AttributeSort attributeSort = new AttributeSort("/gdc/md/PROJECT_ID/obj/1806", true); + + assertThat(attributeSort.toString(), matchesPattern(AttributeSort.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/ColumnTest.java b/src/test/java/com/gooddata/md/ColumnTest.java index 0d85a3352..5d0b9872d 100644 --- a/src/test/java/com/gooddata/md/ColumnTest.java +++ b/src/test/java/com/gooddata/md/ColumnTest.java @@ -8,6 +8,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -32,4 +33,12 @@ public void shouldDeserialize() throws Exception { assertThat(column.isDisplayForm(), is(false)); } + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/column.json"); + final Column column = new ObjectMapper().readValue(stream, Column.class); + + assertThat(column.toString(), matchesPattern(Column.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java index 6defc2e50..933ec30e0 100644 --- a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java +++ b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java @@ -9,6 +9,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -40,5 +41,13 @@ public void shouldDeserialize() throws Exception { assertThat(column.getSynchronizePrecision(), is(0)); } + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/dataLoadingColumn.json"); + final DataLoadingColumn column = new ObjectMapper().readValue(stream, DataLoadingColumn.class); + + assertThat(column.toString(), matchesPattern(DataLoadingColumn.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/DatasetTest.java b/src/test/java/com/gooddata/md/DatasetTest.java index 114e37c73..b85e52743 100644 --- a/src/test/java/com/gooddata/md/DatasetTest.java +++ b/src/test/java/com/gooddata/md/DatasetTest.java @@ -11,6 +11,7 @@ import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -59,4 +60,11 @@ public void shouldSerialize() throws Exception { assertThat(dataset, serializesToJson("/md/dataset-input.json")); } + @Test + public void testToStringFormat() { + final Dataset dataset = new Dataset("Dataset"); + + assertThat(dataset.toString(), matchesPattern(Dataset.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/DimensionTest.java b/src/test/java/com/gooddata/md/DimensionTest.java index a4b2047f4..769afbb5a 100644 --- a/src/test/java/com/gooddata/md/DimensionTest.java +++ b/src/test/java/com/gooddata/md/DimensionTest.java @@ -10,6 +10,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -36,4 +37,11 @@ public void shouldSerialize() throws Exception { assertThat(dimension, serializesToJson("/md/dimension-input.json")); } + + @Test + public void testToStringFormat() { + final Dimension dimension = new Dimension("Dimension"); + + assertThat(dimension.toString(), matchesPattern(Dimension.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/DisplayFormTest.java b/src/test/java/com/gooddata/md/DisplayFormTest.java index 81e15b09f..bf8979d32 100644 --- a/src/test/java/com/gooddata/md/DisplayFormTest.java +++ b/src/test/java/com/gooddata/md/DisplayFormTest.java @@ -15,6 +15,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class DisplayFormTest { @@ -46,4 +47,12 @@ public void testSerialization() throws Exception { assertThat(displayForm, serializesToJson("/md/displayForm-input.json")); } + @Test + public void testToStringFormat() { + final DisplayForm displayForm = new DisplayForm(new Meta("Person Name"), + new DisplayForm.Content(FORM_OF, EXPRESSION, LDM_EXPRESSION, null), new DisplayForm.Links(ELEMENTS_LINK)); + + assertThat(displayForm.toString(), matchesPattern(DisplayForm.class.getSimpleName() + "\\[.*\\]")); + } + } diff --git a/src/test/java/com/gooddata/md/EntryTest.java b/src/test/java/com/gooddata/md/EntryTest.java index 176f2e0bf..1174d274c 100644 --- a/src/test/java/com/gooddata/md/EntryTest.java +++ b/src/test/java/com/gooddata/md/EntryTest.java @@ -17,6 +17,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class EntryTest { @@ -63,4 +64,12 @@ public void testSerialization() throws Exception { assertThat(entry, serializesToJson("/md/entry.json")); } + @Test + public void testToStringFormat() { + final Entry entry = new Entry(URI, TITLE, SUMMARY, CATEGORY, AUTHOR, CONTRIBUTOR, DEPRECATED, IDENTIFIER, TAGS, + CREATED, UPDATED, LOCKED, UNLISTED); + + assertThat(entry.toString(), matchesPattern(Entry.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/ExpressionTest.java b/src/test/java/com/gooddata/md/ExpressionTest.java index d7db2b6ac..786b2e047 100644 --- a/src/test/java/com/gooddata/md/ExpressionTest.java +++ b/src/test/java/com/gooddata/md/ExpressionTest.java @@ -11,6 +11,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ExpressionTest { @@ -32,4 +33,11 @@ public void testSerialize() throws Exception { final Expression expression = new Expression(DATA, TYPE); assertThat(MAPPER.writeValueAsString(expression), is(JSON)); } + + @Test + public void testToStringFormat() { + final Expression expression = new Expression(DATA, TYPE); + + assertThat(expression.toString(), matchesPattern(Expression.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/FactTest.java b/src/test/java/com/gooddata/md/FactTest.java index 40b09636a..4decd7e40 100644 --- a/src/test/java/com/gooddata/md/FactTest.java +++ b/src/test/java/com/gooddata/md/FactTest.java @@ -13,6 +13,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class FactTest { @@ -32,4 +33,11 @@ public void testSerialization() throws Exception { assertThat(fact, serializesToJson("/md/fact-input.json")); } + @Test + public void testToStringFormat() { + final Fact fact = new Fact("Person Shoe Size", "/gdc/md/PROJECT_ID/obj/COL_ID", "col", "/gdc/md/PROJECT_ID/obj/FOLDER_ID"); + + assertThat(fact.toString(), matchesPattern(Fact.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/KeyTest.java b/src/test/java/com/gooddata/md/KeyTest.java index aaec5d682..24be70932 100644 --- a/src/test/java/com/gooddata/md/KeyTest.java +++ b/src/test/java/com/gooddata/md/KeyTest.java @@ -11,6 +11,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class KeyTest { @@ -33,4 +34,11 @@ public void testSerialize() throws Exception { final String json = MAPPER.writeValueAsString(key); assertThat(json, is(JSON)); } + + @Test + public void testToStringFormat() { + final Key key = new Key(DATA, TYPE); + + assertThat(key.toString(), matchesPattern(Key.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/MetaTest.java b/src/test/java/com/gooddata/md/MetaTest.java index 8078fa164..c91271be6 100644 --- a/src/test/java/com/gooddata/md/MetaTest.java +++ b/src/test/java/com/gooddata/md/MetaTest.java @@ -18,6 +18,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class MetaTest { @@ -66,4 +67,12 @@ public void testSerialization() throws Exception { assertThat(meta, serializesToJson("/md/meta.json")); } + @Test + public void testToStringFormat() { + final Meta meta = new Meta(AUTHOR, CONTRIBUTOR, CREATED, UPDATED, SUMMARY, TITLE, CATEGORY, TAGS, URI, IDENTIFIER, + DEPRECATED, PRODUCTION, LOCKED, UNLISTED, SHARED_WITH_SOMEONE); + + assertThat(meta.toString(), matchesPattern(Meta.class.getSimpleName() + "\\[.*\\]")); + } + } diff --git a/src/test/java/com/gooddata/md/MetricTest.java b/src/test/java/com/gooddata/md/MetricTest.java index a3ce4160a..7e16e70b5 100644 --- a/src/test/java/com/gooddata/md/MetricTest.java +++ b/src/test/java/com/gooddata/md/MetricTest.java @@ -12,6 +12,7 @@ import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import org.testng.annotations.Test; @@ -66,4 +67,12 @@ public void shouldIgnoreLinksProperty() throws Exception { .readValue(getClass().getResourceAsStream("/md/metric-links.json"), Metric.class); assertThat(metric, serializesToJson("/md/metric-out.json")); } + + @Test + public void testToStringFormat() throws Exception { + final Metric metric = new ObjectMapper() + .readValue(getClass().getResourceAsStream("/md/metric-out.json"), Metric.class); + + assertThat(metric.toString(), matchesPattern(Metric.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/NestedAttributeTest.java b/src/test/java/com/gooddata/md/NestedAttributeTest.java index 9098a0218..302a70c9b 100644 --- a/src/test/java/com/gooddata/md/NestedAttributeTest.java +++ b/src/test/java/com/gooddata/md/NestedAttributeTest.java @@ -9,6 +9,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.Matchers; @@ -56,4 +57,11 @@ public void testDeserialization() throws Exception { assertThat(attribute.getDimensionLink(), is("/gdc/md/PROJECT_ID/obj/DIM_ID")); assertThat(attribute.getDimensionUri(), is("/gdc/md/PROJECT_ID/obj/DIM_ID")); } + + @Test + public void testToStringFormat() throws Exception { + final NestedAttribute attribute = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/dimensionAttribute.json"), NestedAttribute.class); + + assertThat(attribute.toString(), matchesPattern(NestedAttribute.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/ProjectDashboardTest.java b/src/test/java/com/gooddata/md/ProjectDashboardTest.java index f83300d39..166d15558 100644 --- a/src/test/java/com/gooddata/md/ProjectDashboardTest.java +++ b/src/test/java/com/gooddata/md/ProjectDashboardTest.java @@ -9,6 +9,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; @@ -31,4 +32,11 @@ public void testDeserialization() throws Exception { assertThat(dashboard.getTabByName("Undefined"), nullValue()); } + + @Test + public void testToStringFormat() throws Exception { + final ProjectDashboard dashboard = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/projectDashboard.json"), ProjectDashboard.class); + + assertThat(dashboard.toString(), matchesPattern(ProjectDashboard.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/QueryTest.java b/src/test/java/com/gooddata/md/QueryTest.java index 4b29b6dfa..b4963d67f 100644 --- a/src/test/java/com/gooddata/md/QueryTest.java +++ b/src/test/java/com/gooddata/md/QueryTest.java @@ -11,6 +11,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class QueryTest { @@ -22,4 +23,11 @@ public void testDeserialization() throws Exception { assertThat(query.getTitle(), is("List of allTypes")); assertThat(query.getSummary(), is("Metadata Query Resources for project 'PROJ_ID'")); } + + @Test + public void testToStringFormat() throws Exception { + final Query query = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/query.json"), Query.class); + + assertThat(query.toString(), matchesPattern(Query.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/RestrictionTest.java b/src/test/java/com/gooddata/md/RestrictionTest.java index da0ad4acf..29a326735 100644 --- a/src/test/java/com/gooddata/md/RestrictionTest.java +++ b/src/test/java/com/gooddata/md/RestrictionTest.java @@ -10,6 +10,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class RestrictionTest { @@ -36,4 +37,10 @@ public void testSummary() throws Exception { assertThat(id.getType(), is(Restriction.Type.SUMMARY)); assertThat(id.getValue(), is("my summary")); } + + @Test + public void testToStringFormat() { + final Restriction id = Restriction.summary("my summary"); + assertThat(id.toString(), matchesPattern(Restriction.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/ScheduledMailTest.java b/src/test/java/com/gooddata/md/ScheduledMailTest.java index 9f7ac5246..5d845e0d5 100644 --- a/src/test/java/com/gooddata/md/ScheduledMailTest.java +++ b/src/test/java/com/gooddata/md/ScheduledMailTest.java @@ -17,6 +17,7 @@ import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ScheduledMailTest { @@ -64,4 +65,11 @@ public void testSerialization() throws Exception { assertThat(scheduledMail, JsonMatchers.serializesToJson("/md/scheduledMail.json")); } + @Test + public void testToStringFormat() throws Exception { + final ScheduledMail scheduledMail = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/scheduledMail.json"), ScheduledMail.class); + + assertThat(scheduledMail.toString(), matchesPattern(ScheduledMail.class.getSimpleName() + "\\[.*\\]")); + } + } diff --git a/src/test/java/com/gooddata/md/TableDataLoadTest.java b/src/test/java/com/gooddata/md/TableDataLoadTest.java index e73196f97..b00bf22d8 100644 --- a/src/test/java/com/gooddata/md/TableDataLoadTest.java +++ b/src/test/java/com/gooddata/md/TableDataLoadTest.java @@ -8,6 +8,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -28,4 +29,12 @@ public void shouldDeserialize() throws Exception { assertThat(load.isIncremental(), is(true)); } + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/tableDataLoad.json"); + final TableDataLoad load = new ObjectMapper().readValue(stream, TableDataLoad.class); + + assertThat(load.toString(), matchesPattern(TableDataLoad.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/TableTest.java b/src/test/java/com/gooddata/md/TableTest.java index adfe2a93c..783cbbf65 100644 --- a/src/test/java/com/gooddata/md/TableTest.java +++ b/src/test/java/com/gooddata/md/TableTest.java @@ -9,6 +9,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -30,4 +31,12 @@ public void shouldDeserialize() throws Exception { "/gdc/md/PROJECT_ID/obj/625412")); } + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/md/table.json"); + final Table table = new ObjectMapper().readValue(stream, Table.class); + + assertThat(table.toString(), matchesPattern(Table.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java index 8eae923a2..0da3e56be 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java @@ -8,6 +8,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.gdc.UriResponse; @@ -32,4 +33,11 @@ public void shouldSerialize() throws Exception { assertThat(partialMdArtifact, serializesToJson("/md/maintenance/partialMDArtifact.json")); } + + @Test + public void testToStringFormat() { + final PartialMdArtifact partialMdArtifact = new PartialMdArtifact(new UriResponse("/gdc/md/projectId/tasks/taskId/status"), "TOKEN123"); + + assertThat(partialMdArtifact.toString(), matchesPattern(PartialMdArtifact.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java index 308b66bcd..c307aa93c 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTest.java @@ -7,6 +7,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import org.testng.annotations.Test; @@ -32,4 +33,12 @@ public void shouldNotSerializeDefaultValues() { public void testEmptyUris() throws Exception { new PartialMdExport(); } + + @Test + public void testToStringFormat() { + final PartialMdExport partialMdExport = + new PartialMdExport(false, false, "/gdc/md/projectId/obj/123", "/gdc/md/projectId/obj/234"); + + assertThat(partialMdExport.toString(), matchesPattern(PartialMdExport.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java index f31b7957f..218fe2675 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdExportTokenTest.java @@ -7,6 +7,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import org.testng.annotations.Test; @@ -20,4 +21,11 @@ public void shouldSerialize() throws Exception { assertThat(partialMdExportToken, serializesToJson("/md/maintenance/partialMDImport.json")); } + + @Test + public void testToStringFormat() { + final PartialMdExportToken partialMdExportToken = new PartialMdExportToken("TOKEN123"); + + assertThat(partialMdExportToken.toString(), matchesPattern(PartialMdExportToken.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java index 464fc7e05..c4a581ec9 100644 --- a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java +++ b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java @@ -20,6 +20,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -81,4 +82,12 @@ public void testCreateFromDisplayForm() throws Exception { assertThat(attrInGrid.getUri(), is(URI)); assertThat(attrInGrid.getAlias(), is(ALIAS)); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream is = getClass().getResourceAsStream("/md/report/attributeInGrid.json"); + final AttributeInGrid attr = new ObjectMapper().readValue(is, AttributeInGrid.class); + + assertThat(attr.toString(), matchesPattern(AttributeInGrid.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index de1d7044b..525c84b9e 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -21,6 +21,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class GridTest { @@ -66,4 +67,13 @@ public void testSerialization() throws Exception { assertThat(grid, serializesToJson("/md/report/grid-input.json")); } + + @Test + public void testToStringFormat() throws Exception { + final Grid grid = new ObjectMapper() + .readValue(getClass().getResourceAsStream("/md/report/grid.json"), Grid.class); + + assertThat(grid.toString(), matchesPattern(Grid.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/MetricElementTest.java b/src/test/java/com/gooddata/md/report/MetricElementTest.java index dc5aa71af..6b337f556 100644 --- a/src/test/java/com/gooddata/md/report/MetricElementTest.java +++ b/src/test/java/com/gooddata/md/report/MetricElementTest.java @@ -15,6 +15,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -52,4 +53,11 @@ public void testCreateFromMetric() throws Exception { assertThat(element.getUri(), is(URI)); assertThat(element.getAlias(), is(ALIAS)); } + + @Test + public void testToStringFormat() { + final MetricElement element = new MetricElement(URI, ALIAS, FORMAT, DRILL_URI); + + assertThat(element.toString(), matchesPattern(MetricElement.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java index 55d8724ea..2904b949a 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java @@ -15,6 +15,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ReportDefinitionContentTest { @@ -35,4 +36,13 @@ public void testSerialization() throws Exception { assertThat(def, serializesToJson("/md/report/gridReportDefinitionContent-input.json")); } + @Test + public void testToStringFormat() { + final ReportDefinitionContent def = new GridReportDefinitionContent( + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList())); + + assertThat(def.toString(), matchesPattern(GridReportDefinitionContent.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java index 421553ef8..b9e61cb89 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java @@ -16,6 +16,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ReportDefinitionTest { @@ -41,4 +42,12 @@ public void testSerialization() throws Exception { assertThat(def, serializesToJson("/md/report/oneNumberReportDefinition-input.json")); } + @Test + public void testToStringFormat() throws Exception { + final InputStream is = getClass().getResourceAsStream("/md/report/oneNumberReportDefinition.json"); + final ReportDefinition def = new ObjectMapper().readValue(is, ReportDefinition.class); + + assertThat(def.toString(), matchesPattern(ReportDefinition.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/md/report/ReportTest.java b/src/test/java/com/gooddata/md/report/ReportTest.java index 2ce04d5a1..847d09b29 100644 --- a/src/test/java/com/gooddata/md/report/ReportTest.java +++ b/src/test/java/com/gooddata/md/report/ReportTest.java @@ -13,6 +13,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -43,4 +44,11 @@ public void testSerialization() throws Exception { assertThat(report, serializesToJson("/md/report/report-input.json")); } + @Test + public void testToStringFormat() throws Exception { + final Report report = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/report/report.json"), Report.class); + + assertThat(report.toString(), matchesPattern(Report.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/model/ModelDiffTest.java b/src/test/java/com/gooddata/model/ModelDiffTest.java index cac5e5945..e345e5aae 100644 --- a/src/test/java/com/gooddata/model/ModelDiffTest.java +++ b/src/test/java/com/gooddata/model/ModelDiffTest.java @@ -18,6 +18,7 @@ import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ModelDiffTest { @@ -86,4 +87,11 @@ public void testDeserialization() throws Exception { assertThat(diff.getUpdateScripts().get(0).getMaqlChunks(), contains( "CREATE FOLDER {ffld.employee} VISUAL(TITLE \"Employee\") TYPE FACT;\nCREATE FACT {fact.employee.age} VISUAL(TITLE \"Employee Age\", FOLDER {ffld.employee}) AS {f_employee.f_age};\nALTER DATASET {dataset.employee} ADD {fact.employee.age};\nSYNCHRONIZE {dataset.employee} PRESERVE DATA;")); } + + @Test + public void testToStringFormat() { + final ModelDiff diff = new ModelDiff(new UpdateScript(true, false, Collections.emptyList())); + + assertThat(diff.toString(), matchesPattern(ModelDiff.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/notification/ProjectEventTest.java b/src/test/java/com/gooddata/notification/ProjectEventTest.java index fc6601808..3d729cbcc 100644 --- a/src/test/java/com/gooddata/notification/ProjectEventTest.java +++ b/src/test/java/com/gooddata/notification/ProjectEventTest.java @@ -7,6 +7,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import org.testng.annotations.Test; @@ -19,4 +20,10 @@ public void testSerialization() { assertThat(projectEvent, serializesToJson("/notification/projectEvent.json")); } + @Test + public void testToStringFormat() { + final ProjectEvent projectEvent = new ProjectEvent("etl.test"); + + assertThat(projectEvent.toString(), matchesPattern(ProjectEvent.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectTemplateTest.java b/src/test/java/com/gooddata/project/ProjectTemplateTest.java index 1ba53c021..a770eec07 100644 --- a/src/test/java/com/gooddata/project/ProjectTemplateTest.java +++ b/src/test/java/com/gooddata/project/ProjectTemplateTest.java @@ -11,6 +11,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ProjectTemplateTest { @@ -24,4 +25,12 @@ public void shouldDeserialize() throws Exception { assertThat(template.getUrn(), is("urn:gooddata:ZendeskAnalytics")); assertThat(template.getVersion(), is("11")); } + + @Test + public void testToStringFormat() throws Exception { + final ProjectTemplate template = new ObjectMapper() + .readValue(getClass().getResource("/project/project-template.json"), ProjectTemplate.class); + + assertThat(template.toString(), matchesPattern(ProjectTemplate.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectTest.java b/src/test/java/com/gooddata/project/ProjectTest.java index cdb0e39b5..7b57e6c8b 100644 --- a/src/test/java/com/gooddata/project/ProjectTest.java +++ b/src/test/java/com/gooddata/project/ProjectTest.java @@ -14,6 +14,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.StringContains.containsString; import static org.hamcrest.core.StringStartsWith.startsWith; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ProjectTest { @@ -125,4 +126,11 @@ public void testSerializeVerticaProject() throws Exception { assertThat(serializedProject, startsWith("{\"project\"")); assertThat(serializedProject, containsString("\"driver\":\"vertica\"")); } + + @Test + public void testToStringFormat() { + final Project project = new Project("TITLE", "SUMMARY", "TOKEN"); + + assertThat(project.toString(), matchesPattern(Project.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java index b2f7dd1d1..143f5ec99 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java @@ -11,6 +11,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ProjectValidationResultTest { @@ -25,4 +26,12 @@ public void testDeserialize() throws Exception { assertThat(log.getParams(), hasSize(7)); } + + @Test + public void testToStringFormat() throws Exception { + final ProjectValidationResult log = new ObjectMapper() + .readValue(getClass().getResourceAsStream("/project/project-validationResultLog.json"), ProjectValidationResult.class); + + assertThat(log.toString(), matchesPattern(ProjectValidationResult.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/RolesTest.java b/src/test/java/com/gooddata/project/RolesTest.java index b93225cbc..4d878869c 100644 --- a/src/test/java/com/gooddata/project/RolesTest.java +++ b/src/test/java/com/gooddata/project/RolesTest.java @@ -14,6 +14,7 @@ import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class RolesTest { @@ -27,4 +28,12 @@ public void testDeserialization() throws Exception { assertThat(roles.getRoles(), hasItem("/gdc/projects/PROJECT_ID/roles/ROLE1")); assertThat(roles.getRoles(), hasItem("/gdc/projects/PROJECT_ID/roles/ROLE2")); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/project/project-roles.json"); + final Roles roles = new ObjectMapper().readValue(stream, Roles.class); + + assertThat(roles.toString(), matchesPattern(Roles.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/UserTest.java b/src/test/java/com/gooddata/project/UserTest.java index e23d65459..46f48beed 100644 --- a/src/test/java/com/gooddata/project/UserTest.java +++ b/src/test/java/com/gooddata/project/UserTest.java @@ -14,6 +14,7 @@ import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class UserTest { @@ -32,4 +33,12 @@ public void testDeserialization() throws Exception { assertThat(user.getLogin(), is("ateam+ads-testing@gooddata.com")); } + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/project/project-user.json"); + final User user = new ObjectMapper().readValue(stream, User.class); + + assertThat(user.toString(), matchesPattern(User.class.getSimpleName() + "\\[.*\\]")); + } + } \ No newline at end of file diff --git a/src/test/java/com/gooddata/report/ExecuteDefinitionTest.java b/src/test/java/com/gooddata/report/ExecuteDefinitionTest.java index 2d3e6e5f4..2803457f4 100644 --- a/src/test/java/com/gooddata/report/ExecuteDefinitionTest.java +++ b/src/test/java/com/gooddata/report/ExecuteDefinitionTest.java @@ -9,6 +9,7 @@ import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ExecuteDefinitionTest { @@ -17,4 +18,11 @@ public void testSerialization() throws Exception { final ReportRequest request = new ExecuteDefinition("DEF-URI"); assertThat(request, JsonMatchers.serializesToJson("/report/executeDefinition.json")); } + + @Test + public void testToStringFormat() { + final ReportRequest request = new ExecuteDefinition("DEF-URI"); + + assertThat(request.toString(), matchesPattern(ExecuteDefinition.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/report/ExecuteReportTest.java b/src/test/java/com/gooddata/report/ExecuteReportTest.java index 493a4b667..fa65c542c 100644 --- a/src/test/java/com/gooddata/report/ExecuteReportTest.java +++ b/src/test/java/com/gooddata/report/ExecuteReportTest.java @@ -9,6 +9,7 @@ import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class ExecuteReportTest { @@ -17,4 +18,11 @@ public void testSerialization() throws Exception { final ReportRequest request = new ExecuteReport("DEF-URI"); assertThat(request, JsonMatchers.serializesToJson("/report/executeReport.json")); } + + @Test + public void testToStringFormat() { + final ReportRequest request = new ExecuteReport("DEF-URI"); + + assertThat(request.toString(), matchesPattern(ExecuteReport.class.getSimpleName() + "\\[.*\\]")); + } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/GoodDataToStringBuilderTest.java b/src/test/java/com/gooddata/util/GoodDataToStringBuilderTest.java new file mode 100644 index 000000000..e3b038e6c --- /dev/null +++ b/src/test/java/com/gooddata/util/GoodDataToStringBuilderTest.java @@ -0,0 +1,149 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.util; + +import static java.lang.String.format; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.core.Is.is; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.testng.annotations.Test; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * two nested classes have toString() method implemented using {@link GoodDataToStringBuilder} and check if + * output of their toString() methods are as expected + */ +public class GoodDataToStringBuilderTest { + + //static nested classes are denoted with outer class, we need a name of outer class in this test + private static final String OUTER_CLASS_NAME = GoodDataToStringBuilderTest.class.getSimpleName(); + + private static final String TEST_CLASS_NAME = TestClass.class.getSimpleName(); + + private static final String ANOTHER_TEST_CLASS_NAME = AnotherTestClass.class.getSimpleName(); + + private static final String CLASS_WITH_ADDITIONAL_PARAM = ClassWithAdditionalParam.class.getSimpleName(); + + private static final String STRING_FIELD_VALUE = "STRING_FIELD"; + + private static final Long LONG_FIELD_VALUE = 10L; + + private static final List LIST_VALUE = Arrays.asList(1, 2, 3); + + private static final String ANOTHER_TEST_CLASS_STRING_EXPECTED = format("%s.%s[stringField=%s]", + OUTER_CLASS_NAME, ANOTHER_TEST_CLASS_NAME, STRING_FIELD_VALUE); + + @Test + public void testDefaultToStringNonRecursive() throws Exception { + final AnotherTestClass anotherTestClass = new AnotherTestClass(); + + final String toStringResult = anotherTestClass.toString(); + + assertThat(toStringResult, is(notNullValue())); + assertThat(toStringResult, is(ANOTHER_TEST_CLASS_STRING_EXPECTED)); + + } + + /** + * TestClass have field reference to {@link AnotherTestClass} + */ + @Test + public void testDefaultToStringRecursive() { + final TestClass testClass = new TestClass(); + + final String toStringResult = testClass.toString(); + + assertThat(toStringResult, is(notNullValue())); + assertThat(toStringResult, is(format("%s.%s[stringField=%s,longField=%d,list=%s,anotherTestClass=%s]", + OUTER_CLASS_NAME, TEST_CLASS_NAME, STRING_FIELD_VALUE, LONG_FIELD_VALUE, LIST_VALUE.toString(), + ANOTHER_TEST_CLASS_STRING_EXPECTED))); + } + + @Test + public void testToStringIncludeAdditionalParam() { + final ClassWithAdditionalParam classWithAdditionalParam = new ClassWithAdditionalParam(); + + final String toStringResult = classWithAdditionalParam.toString(); + + assertThat(toStringResult, is(notNullValue())); + assertThat(toStringResult, is(format("%s.%s[newField=%s]", + OUTER_CLASS_NAME, CLASS_WITH_ADDITIONAL_PARAM, STRING_FIELD_VALUE))); + } + + static class TestClass { + private Map links = new LinkedHashMap() {{ + put("self", "/gdc/link"); + }}; + private String stringField = STRING_FIELD_VALUE; + private Long longField = LONG_FIELD_VALUE; + private String toBeExcludedField = "SHOULD_NOT_BE_THERE"; + private String anotherToBeExcludedField = "ALSO_SHOULD_NOT_BE_THERE"; + private List list = LIST_VALUE; + private AnotherTestClass anotherTestClass = new AnotherTestClass(); + + public Map getLinks() { + return links; + } + + public String getStringField() { + return stringField; + } + + public Long getLongField() { + return longField; + } + + public String getToBeExcludedField() { + return toBeExcludedField; + } + + public String getAnotherToBeExcludedField() { + return anotherToBeExcludedField; + } + + public List getList() { + return list; + } + + public AnotherTestClass getTestClass2() { + return anotherTestClass; + } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this, "toBeExcludedField", "anotherToBeExcludedField"); + } + } + + static class AnotherTestClass { + private Map links = new LinkedHashMap() {{ + put("self", "/gdc/link2"); + }}; + + private String stringField = STRING_FIELD_VALUE; + + public String getStringField() { + return stringField; + } + + @Override + public String toString() { + return GoodDataToStringBuilder.defaultToString(this); + } + } + + static class ClassWithAdditionalParam { + @Override + public String toString() { + return new GoodDataToStringBuilder(this).append("newField", STRING_FIELD_VALUE).toString(); + } + } +} diff --git a/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java b/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java index fe5f12a85..e8ea543ad 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java @@ -8,6 +8,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; @@ -38,4 +39,12 @@ public void testDeserialization() throws Exception { assertThat(warehouseSchema.getDescription(), is(DESCRIPTION)); assertThat(warehouseSchema.getLinks(), is(equalTo(LINKS))); } + + @Test + public void testToStringFormat() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/warehouse/schema.json"); + final WarehouseSchema warehouseSchema = new ObjectMapper().readValue(stream, WarehouseSchema.class); + + assertThat(warehouseSchema.toString(), matchesPattern(WarehouseSchema.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTest.java index bd77c543a..62007685e 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTest.java @@ -9,6 +9,7 @@ import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.core.Is.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; import com.gooddata.project.Environment; import com.fasterxml.jackson.databind.ObjectMapper; @@ -93,4 +94,11 @@ public void testDeserializationWithNullToken() throws Exception { assertThat(warehouse.getLinks(), is(LINKS)); assertThat(warehouse.getConnectionUrl(), is(CONNECTION_URL)); } + + @Test + public void testToStringFormat() { + final Warehouse warehouse = new Warehouse(TITLE, null, DESCRIPTION, CREATED, UPDATED, CREATED_BY, UPDATED_BY, STATUS, ENVIRONMENT, CONNECTION_URL, LINKS); + + assertThat(warehouse.toString(), matchesPattern(Warehouse.class.getSimpleName() + "\\[.*\\]")); + } } diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java index 396397d60..a4555edd3 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java @@ -14,6 +14,7 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class WarehouseUserTest { @@ -61,4 +62,12 @@ public void testGetId() throws Exception { final WarehouseUser user = new WarehouseUser(ROLE, PROFILE, LOGIN, LINKS); assertThat(user.getId(), is("{profile-id}")); } + + @Test + public void testToStringFormat() throws Exception { + final WarehouseUser user = new ObjectMapper() + .readValue(getClass().getResourceAsStream("/warehouse/user.json"), WarehouseUser.class); + + assertThat(user.toString(), matchesPattern(WarehouseUser.class.getSimpleName() + "\\[.*\\]")); + } } From a8e8cd0036e0e112b2f49083cc08dccebdd4bccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Mon, 19 Dec 2016 20:01:09 +0100 Subject: [PATCH 211/934] migrate old constructs to java 8 constructs --- src/main/java/com/gooddata/AbstractService.java | 7 +------ .../dataload/processes/ProcessExecution.java | 4 ++-- .../java/com/gooddata/dataset/DatasetService.java | 7 ++----- .../java/com/gooddata/md/IdentifiersAndUris.java | 7 ++----- src/main/java/com/gooddata/md/MetadataService.java | 9 +++------ .../com/gooddata/md/report/AttributeInGrid.java | 9 +++------ .../com/gooddata/notification/ProjectEvent.java | 2 +- src/main/java/com/gooddata/project/Role.java | 13 ++++--------- .../com/gooddata/warehouse/WarehouseService.java | 2 +- .../gooddata/connector/ProcessExecutionTest.java | 7 +------ .../java/com/gooddata/md/MetadataServiceAT.java | 5 ++--- 11 files changed, 22 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/gooddata/AbstractService.java b/src/main/java/com/gooddata/AbstractService.java index 642d42b32..ef8b170fc 100644 --- a/src/main/java/com/gooddata/AbstractService.java +++ b/src/main/java/com/gooddata/AbstractService.java @@ -35,12 +35,7 @@ public abstract class AbstractService { protected final ObjectMapper mapper = new ObjectMapper(); - private final ResponseExtractor reusableResponseExtractor = new ResponseExtractor() { - @Override - public ClientHttpResponse extractData(final ClientHttpResponse response) throws IOException { - return new ReusableClientHttpResponse(response); - } - }; + private final ResponseExtractor reusableResponseExtractor = ReusableClientHttpResponse::new; /** diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java index 2426599bf..cfa4cf3df 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessExecution.java @@ -32,11 +32,11 @@ public class ProcessExecution { private final Map hiddenParams; public ProcessExecution(DataloadProcess process, String executable) { - this(process, executable, new HashMap(), new HashMap()); + this(process, executable, new HashMap<>(), new HashMap<>()); } public ProcessExecution(DataloadProcess process, String executable, Map params) { - this(process, executable, params, new HashMap()); + this(process, executable, params, new HashMap<>()); } public ProcessExecution(DataloadProcess process, String executable, Map params, Map hiddenParams) { diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 53ef7ecda..eef92c864 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -26,6 +26,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; +import java.util.stream.Collectors; import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; @@ -223,11 +224,7 @@ protected void onFinish() { */ @Deprecated public Collection listDatasets(Project project) { - final HashSet datasets = new HashSet<>(); - for (final Link link : listDatasetLinks(project)) { - datasets.add(new Dataset(link.getIdentifier(), link.getUri(), link.getTitle())); - } - return datasets; + return listDatasetLinks(project).stream().map(link -> new Dataset(link.getIdentifier(), link.getUri(), link.getTitle())).collect(Collectors.toCollection(HashSet::new)); } /** diff --git a/src/main/java/com/gooddata/md/IdentifiersAndUris.java b/src/main/java/com/gooddata/md/IdentifiersAndUris.java index dd9a7f790..ebb77e500 100644 --- a/src/main/java/com/gooddata/md/IdentifiersAndUris.java +++ b/src/main/java/com/gooddata/md/IdentifiersAndUris.java @@ -10,6 +10,7 @@ import com.gooddata.util.GoodDataToStringBuilder; import java.util.*; +import java.util.stream.Collectors; /** * Encapsulates list of identifiers and their URIs. @@ -27,11 +28,7 @@ class IdentifiersAndUris { } public List getUris() { - final List uris = new ArrayList<>(); - for (IdentifierAndUri idAndUri : identifiersAndUris) { - uris.add(idAndUri.getUri()); - } - return uris; + return identifiersAndUris.stream().map(IdentifierAndUri::getUri).collect(Collectors.toList()); } public Map asMap() { diff --git a/src/main/java/com/gooddata/md/MetadataService.java b/src/main/java/com/gooddata/md/MetadataService.java index b66a6b981..044de2928 100644 --- a/src/main/java/com/gooddata/md/MetadataService.java +++ b/src/main/java/com/gooddata/md/MetadataService.java @@ -16,6 +16,7 @@ import org.springframework.web.client.RestTemplate; import java.util.*; +import java.util.stream.Collectors; import static com.gooddata.util.Validate.noNullElements; import static com.gooddata.util.Validate.notNull; @@ -287,9 +288,7 @@ public Collection findUris(Project project, Restriction... restrictions) { final Collection entries = find(project, cls, restrictions); final Collection result = new ArrayList<>(entries.size()); - for (Entry entry : entries) { - result.add(entry.getUri()); - } + result.addAll(entries.stream().map(Entry::getUri).collect(Collectors.toList())); return result; } @@ -350,9 +349,7 @@ public Collection usedBy(Project project, Collection uris, boolea } final List usages = new ArrayList<>(uris.size()); final Collection useManyEntries = response.getUseMany(); - for (UseManyEntries useMany : useManyEntries) { - usages.add(new Usage(useMany.getUri(), useMany.getEntries())); - } + usages.addAll(useManyEntries.stream().map(useMany -> new Usage(useMany.getUri(), useMany.getEntries())).collect(Collectors.toList())); return usages; } diff --git a/src/main/java/com/gooddata/md/report/AttributeInGrid.java b/src/main/java/com/gooddata/md/report/AttributeInGrid.java index d694499db..ee48bc83e 100644 --- a/src/main/java/com/gooddata/md/report/AttributeInGrid.java +++ b/src/main/java/com/gooddata/md/report/AttributeInGrid.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import static com.gooddata.util.Validate.notNull; @@ -73,9 +74,7 @@ public AttributeInGrid(String uri, String alias, List> totals) { notNull(totals, "totals"); for (List totalList : totals) { final List totalStringList = new ArrayList<>(totalList.size()); - for (Total total : totalList) { - totalStringList.add(total.toString()); - } + totalStringList.addAll(totalList.stream().map(Total::toString).collect(Collectors.toList())); this.totals.add(totalStringList); } } @@ -124,9 +123,7 @@ public List> getTotals() { final List> enumTotals = new ArrayList<>(totals.size()); for (List totalList : totals) { final List totalEnumList = new ArrayList<>(totalList.size()); - for (String total : totalList) { - totalEnumList.add(Total.of(total)); - } + totalEnumList.addAll(totalList.stream().map(Total::of).collect(Collectors.toList())); enumTotals.add(totalEnumList); } return enumTotals; diff --git a/src/main/java/com/gooddata/notification/ProjectEvent.java b/src/main/java/com/gooddata/notification/ProjectEvent.java index 93f2a363c..4b4e1f25c 100644 --- a/src/main/java/com/gooddata/notification/ProjectEvent.java +++ b/src/main/java/com/gooddata/notification/ProjectEvent.java @@ -34,7 +34,7 @@ public class ProjectEvent { private final Map parameters; public ProjectEvent(final String type) { - this(type, new HashMap()); + this(type, new HashMap<>()); } public ProjectEvent(final String type, final Map parameters) { diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index 3b190520c..e423d40ff 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.stream.Collectors; /** * Project Role @@ -52,9 +53,9 @@ public class Role { Role(@JsonProperty("permissions") final Map permissions, @JsonProperty("meta") final Meta meta, @JsonProperty("links") final Map links) { - this.permissions = permissions == null ? new HashMap() : permissions; + this.permissions = permissions == null ? new HashMap<>() : permissions; this.meta = meta == null ? new Meta(null) : meta; - this.links = links == null ? new HashMap() : links; + this.links = links == null ? new HashMap<>() : links; } /** @@ -72,13 +73,7 @@ public Set getPermissions() { * @return set of granted permissions */ public Set getGrantedPermissions() { - final Set permissions = new HashSet<>(); - for (Entry entry : this.permissions.entrySet()) { - if (entry.getValue()) { - permissions.add(entry.getKey()); - } - } - return permissions; + return permissions.entrySet().stream().filter(Entry::getValue).map(Entry::getKey).collect(Collectors.toSet()); } /** diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index 95d9d680c..4538d8189 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -186,7 +186,7 @@ public PageableList listWarehouseUsers(final Warehouse warehouse, final UriComponentsBuilder builder = UriComponentsBuilder.fromUri(WarehouseUsers.TEMPLATE.expand(warehouse.getId())); final URI uri = page.getPageUri(builder); final WarehouseUsers result = restTemplate.getForObject(uri, WarehouseUsers.class); - return result != null ? result : new PageableList(); + return result != null ? result : new PageableList<>(); } catch (GoodDataException | RestClientException e) { throw new GoodDataException("Unable to list users of warehouse " + warehouse.getId(), e); } diff --git a/src/test/java/com/gooddata/connector/ProcessExecutionTest.java b/src/test/java/com/gooddata/connector/ProcessExecutionTest.java index 776644b45..a33984b9b 100644 --- a/src/test/java/com/gooddata/connector/ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/connector/ProcessExecutionTest.java @@ -15,12 +15,7 @@ public class ProcessExecutionTest { @Test public void shouldSerialize() throws Exception { - final ProcessExecution execution = new ProcessExecution(){ - @Override - public ConnectorType getConnectorType() { - return ZENDESK4; - } - }; + final ProcessExecution execution = () -> ZENDESK4; assertThat(execution, serializesToJson("/connector/process-execution-empty.json")); } diff --git a/src/test/java/com/gooddata/md/MetadataServiceAT.java b/src/test/java/com/gooddata/md/MetadataServiceAT.java index 86a331a28..5d9f9202d 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceAT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceAT.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** * Metadata acceptance tests. @@ -172,9 +173,7 @@ public void getAttributeElements() throws Exception { final List elements = gd.getMetadataService().getAttributeElements(attr); assertThat("there should be 2 elements", elements, hasSize(2)); final Set titles = new HashSet<>(elements.size()); - for (AttributeElement element : elements) { - titles.add(element.getTitle()); - } + titles.addAll(elements.stream().map(AttributeElement::getTitle).collect(Collectors.toList())); assertThat(titles, hasItems("DevOps", "HR")); } } From a22541485c8a4be7ac59802316941aeb62fd602e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Mon, 19 Dec 2016 20:01:37 +0100 Subject: [PATCH 212/934] redudant toString() call --- src/main/java/com/gooddata/warehouse/WarehouseService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/warehouse/WarehouseService.java b/src/main/java/com/gooddata/warehouse/WarehouseService.java index 4538d8189..74ab47c80 100644 --- a/src/main/java/com/gooddata/warehouse/WarehouseService.java +++ b/src/main/java/com/gooddata/warehouse/WarehouseService.java @@ -350,7 +350,7 @@ public WarehouseSchema getWarehouseSchemaByUri(final String uri) { return restTemplate.getForObject(uri, WarehouseSchema.class); } catch (GoodDataRestException e) { if (HttpStatus.NOT_FOUND.value() == e.getStatusCode()) { - throw new WarehouseSchemaNotFoundException(uri.toString(), e); + throw new WarehouseSchemaNotFoundException(uri, e); } else { throw e; } From d4213e32a90c0803aab49190e8efc27135077ec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Mon, 19 Dec 2016 20:02:44 +0100 Subject: [PATCH 213/934] redundant type arguments --- .../com/gooddata/connector/IntegrationProcessStatusTest.java | 2 +- .../com/gooddata/md/report/ReportDefinitionContentTest.java | 4 ++-- src/test/java/com/gooddata/model/ModelDiffTest.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java index c3a1224bc..95efece28 100644 --- a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java @@ -103,7 +103,7 @@ public void testIsFailedOnUnknownCode() throws Exception { @Test public void testToStringFormat() { - final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); + final IntegrationProcessStatus process = new IntegrationProcessStatus(new Status("unknown code", "", ""), now(), now(), Collections.emptyMap()); assertThat(process.toString(), matchesPattern(IntegrationProcessStatus.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java index 2904b949a..a33690ac4 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java @@ -39,8 +39,8 @@ public void testSerialization() throws Exception { @Test public void testToStringFormat() { final ReportDefinitionContent def = new GridReportDefinitionContent( - new Grid(Collections.emptyList(), Collections.emptyList(), - Collections.emptyList())); + new Grid(Collections.emptyList(), Collections.emptyList(), + Collections.emptyList())); assertThat(def.toString(), matchesPattern(GridReportDefinitionContent.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/model/ModelDiffTest.java b/src/test/java/com/gooddata/model/ModelDiffTest.java index e345e5aae..2a1758b56 100644 --- a/src/test/java/com/gooddata/model/ModelDiffTest.java +++ b/src/test/java/com/gooddata/model/ModelDiffTest.java @@ -90,7 +90,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() { - final ModelDiff diff = new ModelDiff(new UpdateScript(true, false, Collections.emptyList())); + final ModelDiff diff = new ModelDiff(new UpdateScript(true, false, Collections.emptyList())); assertThat(diff.toString(), matchesPattern(ModelDiff.class.getSimpleName() + "\\[.*\\]")); } From 9132e6707472ef70540c4e220267b612d21858a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Mon, 19 Dec 2016 20:13:11 +0100 Subject: [PATCH 214/934] replace jackson deprecated methods with their newer variants --- src/main/java/com/gooddata/report/ReportService.java | 4 ++-- src/main/java/com/gooddata/util/BooleanDeserializer.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gooddata/report/ReportService.java b/src/main/java/com/gooddata/report/ReportService.java index a312b88bc..5f39f5073 100644 --- a/src/main/java/com/gooddata/report/ReportService.java +++ b/src/main/java/com/gooddata/report/ReportService.java @@ -122,9 +122,9 @@ private String exportReport(final JsonNode execResult, final ReportExportFormat final ObjectNode root = mapper.createObjectNode(); final ObjectNode child = mapper.createObjectNode(); - child.put("result", execResult); + child.set("result", execResult); child.put("format", format.getValue()); - root.put("result_req", child); + root.set("result_req", child); try { return restTemplate.postForObject(EXPORTING_URI, root, UriResponse.class).getUri(); diff --git a/src/main/java/com/gooddata/util/BooleanDeserializer.java b/src/main/java/com/gooddata/util/BooleanDeserializer.java index 7b69f6b25..4973d26e6 100644 --- a/src/main/java/com/gooddata/util/BooleanDeserializer.java +++ b/src/main/java/com/gooddata/util/BooleanDeserializer.java @@ -5,13 +5,13 @@ */ package com.gooddata.util; +import static com.fasterxml.jackson.databind.JsonMappingException.from; import static com.gooddata.util.Validate.notNull; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonMappingException; import java.io.IOException; @@ -31,7 +31,7 @@ public Boolean deserialize(JsonParser jp, DeserializationContext ctx) throws IOE } else if (root.isTextual()) { return "1".equals(root.textValue()); } else { - throw new JsonMappingException("Unknown value of type: " + root.getNodeType(), jp.getCurrentLocation()); + throw from(jp, "Unknown value of type: " + root.getNodeType()); } } From 1af222e40314977f35b096589d92afcbf0289391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Mon, 19 Dec 2016 20:13:35 +0100 Subject: [PATCH 215/934] remove unused imports --- src/main/java/com/gooddata/GoodData.java | 1 - src/main/java/com/gooddata/project/Role.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index ed4f3e490..03b7d80d0 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -29,7 +29,6 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.VersionInfo; import org.springframework.http.MediaType; -import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; diff --git a/src/main/java/com/gooddata/project/Role.java b/src/main/java/com/gooddata/project/Role.java index e423d40ff..624fc9888 100644 --- a/src/main/java/com/gooddata/project/Role.java +++ b/src/main/java/com/gooddata/project/Role.java @@ -22,7 +22,6 @@ import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; From ea0443f8844811a18c3d4ed61a62aeea1d7a1811 Mon Sep 17 00:00:00 2001 From: Matej Kupciha Date: Mon, 2 Jan 2017 17:04:33 +0100 Subject: [PATCH 216/934] Use demo applications when deploying ruby processes from git in integration tests These demo applications are available on both production and staging environments. --- .../com/gooddata/dataload/processes/ProcessServiceAT.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index 9f491bac7..07af74d45 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -101,17 +101,17 @@ public void updateSchedule() { public void createProcessFromGit() { processAppstore = gd.getProcessService().createProcessFromAppstore(project, new DataloadProcess("sdktest ruby appstore " + System.getenv("BUILD_NUMBER"), ProcessType.RUBY.toString(), - "${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyHello")).get(); + "${PUBLIC_APPSTORE}:branch/demo:/test/HelloApp")).get(); assertThat(processAppstore.getExecutables(), contains("hello.rb")); } @Test(groups = "process", dependsOnMethods = "createProcessFromGit") public void updateProcessFromGit() { - processAppstore.setPath("${PUBLIC_APPSTORE}:tag/prodigy-testing:/test/rubyBonjour"); + processAppstore.setPath("${PUBLIC_APPSTORE}:branch/demo:/test/AhojApp"); processAppstore = gd.getProcessService().updateProcessFromAppstore(processAppstore).get(); - assertThat(processAppstore.getExecutables(), contains("bonjour.rb")); + assertThat(processAppstore.getExecutables(), contains("ahoj.rb")); } public void copy(final String file, final File dir) throws IOException { From 48df861e6e803383399b4373150309d543f297da Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 9 Jan 2017 16:40:16 +0100 Subject: [PATCH 217/934] fix: grab all pages before asserting --- .../com/gooddata/warehouse/WarehouseServiceAT.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java index e8d313477..fc2a0df2a 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java @@ -16,6 +16,7 @@ import org.testng.annotations.Test; import java.util.Collection; +import java.util.LinkedList; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -74,8 +75,17 @@ public void getWarehouse() throws Exception { @Test(groups = "warehouse", dependsOnMethods = "createWarehouse") public void listWarehouses() throws Exception { - final Collection warehouses = service.listWarehouses(); - assertThat(warehouses, hasItem(hasSameIdAs(warehouse))); + final LinkedList result = new LinkedList<>(); + Page page = new PageRequest(1000); + PageableList warehouses; + + do { + warehouses = service.listWarehouses(page); + result.addAll(warehouses); + page = warehouses.getNextPage(); + } while (warehouses.hasNextPage()); + + assertThat(result, hasItem(hasSameIdAs(warehouse))); } @Test(groups = "warehouse", dependsOnMethods = {"createWarehouse", "listWarehouses"}) From 27bf242db08dcf10d084ee9b3a9ade843bb2b7de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Mon, 9 Jan 2017 17:39:36 +0100 Subject: [PATCH 218/934] improve PageRequest to be usable as ModelAttribute in Controller --- .../com/gooddata/collections/PageRequest.java | 34 +++++++++++++++++-- .../gooddata/collections/PageRequestTest.java | 17 ++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gooddata/collections/PageRequest.java b/src/main/java/com/gooddata/collections/PageRequest.java index 474408f13..64cf2fd80 100644 --- a/src/main/java/com/gooddata/collections/PageRequest.java +++ b/src/main/java/com/gooddata/collections/PageRequest.java @@ -16,8 +16,17 @@ */ public class PageRequest implements Page { - private final String offset; - private final int limit; + public static final Integer DEFAULT_LIMIT = 100; + + private String offset; + private int limit; + + /** + * Creates new page definition with default values + */ + public PageRequest() { + this(null, DEFAULT_LIMIT); + } /** * Creates new page definition with provided values. @@ -48,6 +57,27 @@ public PageRequest(final int limit) { this(null, limit); } + + public String getOffset() { + return offset; + } + + public void setOffset(final String offset) { + this.offset = offset; + } + + public int getLimit() { + return limit; + } + + public int getSanitizedLimit() { + return limit > 0 ? limit : DEFAULT_LIMIT; + } + + public void setLimit(final int limit) { + this.limit = limit; + } + @Override public URI getPageUri(final UriComponentsBuilder uriBuilder) { notNull(uriBuilder, "uriBuilder"); diff --git a/src/test/java/com/gooddata/collections/PageRequestTest.java b/src/test/java/com/gooddata/collections/PageRequestTest.java index 8667fe972..4d59a2139 100644 --- a/src/test/java/com/gooddata/collections/PageRequestTest.java +++ b/src/test/java/com/gooddata/collections/PageRequestTest.java @@ -10,6 +10,7 @@ import java.net.URI; +import static com.gooddata.collections.PageRequest.DEFAULT_LIMIT; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; @@ -59,4 +60,20 @@ public void testUpdateWithPageParamsIdempotency() throws Exception { final String pageUri = uriBuilder3.build().toUriString(); assertThat(pageUri, is("test_uri/{test}?offset=12&limit=10")); } + + @Test + public void testGetPageUriDefaultValue() throws Exception { + final PageRequest pageRequest = new PageRequest(); + final UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString("test_uri"); + final URI pageUri = pageRequest.getPageUri(uriBuilder); + assertThat(pageUri, notNullValue()); + assertThat(pageUri.toString(), is("test_uri?limit=100")); + } + + @Test + public void testGetSanitizedLimit() throws Exception { + final PageRequest pageRequest = new PageRequest(); + pageRequest.setLimit(-2); + assertThat(pageRequest.getSanitizedLimit(), is(DEFAULT_LIMIT)); + } } From e6199261f4044d87b8e47a219c406211e3b079ce Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 10 Jan 2017 15:59:50 +0100 Subject: [PATCH 219/934] add javadocs links --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2e23bb377..cc858f63e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# GoodData Java SDK [![Build Status](https://travis-ci.org/martiner/gooddata-java.png?branch=master)](https://travis-ci.org/martiner/gooddata-java) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java) +# GoodData Java SDK [![Build Status](https://travis-ci.org/martiner/gooddata-java.png?branch=master)](https://travis-ci.org/martiner/gooddata-java) [![Javadocs](http://javadoc.io/badge/com.gooddata/gooddata-java.svg)](http://javadoc.io/doc/com.gooddata/gooddata-java) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java) The *GoodData Java SDK* encapsulates the REST API provided by the [GoodData](http://www.gooddata.com) platform. The first version was implemented during the [All Data Hackathon](http://hackathon.gooddata.com) April 10 - 11 2014 @@ -19,9 +19,10 @@ See [releases page](https://github.com/martiner/gooddata-java/releases) for info the [Upgrading Guide](https://github.com/martiner/gooddata-java/wiki/Upgrading-GoodData-Java-SDK) will navigate you through changes between major versions. -See [Wiki](https://github.com/martiner/gooddata-java/wiki) for +See [Javadocs](http://javadoc.io/doc/com.gooddata/gooddata-java) +or [Wiki](https://github.com/martiner/gooddata-java/wiki) for [Code Examples](https://github.com/martiner/gooddata-java/wiki/Code-Examples) -and [Extensibility How-To](https://github.com/martiner/gooddata-java/wiki/Extending-GoodData-Java-SDK). +and [Extensibility How-To](https://github.com/martiner/gooddata-java/wiki/Extending-). ### Dependencies From bf8480991dbf05c371769440397616670c551ca2 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Wed, 7 Dec 2016 14:16:39 +0100 Subject: [PATCH 220/934] introduce services as beans Enables to register services as spring beans using Bean lite mode. To use this feature register GoodData as bean in xml config and add --- pom.xml | 11 +++--- src/main/java/com/gooddata/GoodData.java | 16 ++++++++ .../spring/GoodDataBeansAsServicesTest.java | 38 +++++++++++++++++++ .../resources/spring/gd-annotationConfig.xml | 14 +++++++ 4 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/gooddata/spring/GoodDataBeansAsServicesTest.java create mode 100644 src/test/resources/spring/gd-annotationConfig.xml diff --git a/pom.xml b/pom.xml index fdfa513f4..c5b38016d 100644 --- a/pom.xml +++ b/pom.xml @@ -314,12 +314,14 @@ org.springframework spring-aop - - org.springframework - spring-context - + + org.springframework + spring-context + ${spring.version} + true + com.fasterxml.jackson.core jackson-core @@ -418,7 +420,6 @@ 0.11 test - diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 03b7d80d0..b45aa20b0 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -28,6 +28,7 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.VersionInfo; +import org.springframework.context.annotation.Bean; import org.springframework.http.MediaType; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; @@ -303,6 +304,7 @@ public void logout() { * * @return initialized service for project management */ + @Bean public ProjectService getProjectService() { return projectService; } @@ -312,6 +314,7 @@ public ProjectService getProjectService() { * * @return initialized service for account management */ + @Bean public AccountService getAccountService() { return accountService; } @@ -322,6 +325,7 @@ public AccountService getAccountService() { * * @return initialized service for metadata management */ + @Bean public MetadataService getMetadataService() { return metadataService; } @@ -331,6 +335,7 @@ public MetadataService getMetadataService() { * * @return initialized service for model management */ + @Bean public ModelService getModelService() { return modelService; } @@ -340,6 +345,7 @@ public ModelService getModelService() { * * @return initialized service for API root management */ + @Bean public GdcService getGdcService() { return gdcService; } @@ -349,6 +355,7 @@ public GdcService getGdcService() { * * @return initialized service for data store management */ + @Bean public DataStoreService getDataStoreService() { return dataStoreService; } @@ -358,6 +365,7 @@ public DataStoreService getDataStoreService() { * * @return initialized service for dataset management */ + @Bean public DatasetService getDatasetService() { return datasetService; } @@ -367,6 +375,7 @@ public DatasetService getDatasetService() { * * @return initialized service for report management */ + @Bean public ReportService getReportService() { return reportService; } @@ -376,6 +385,7 @@ public ReportService getReportService() { * * @return initialized service for dataload processes management and process executions */ + @Bean public ProcessService getProcessService() { return processService; } @@ -385,6 +395,7 @@ public ProcessService getProcessService() { * * @return initialized service for ADS management */ + @Bean public WarehouseService getWarehouseService() { return warehouseService; } @@ -394,6 +405,7 @@ public WarehouseService getWarehouseService() { * * @return initialized service for connector integration management */ + @Bean public ConnectorService getConnectorService() { return connectorService; } @@ -403,6 +415,7 @@ public ConnectorService getConnectorService() { * * @return initialized service for project notifications management */ + @Bean public NotificationService getNotificationService() { return notificationService; } @@ -412,6 +425,7 @@ public NotificationService getNotificationService() { * * @return initialized service for metadata export/import */ + @Bean public ExportImportService getExportImportService() { return exportImportService; } @@ -421,6 +435,7 @@ public ExportImportService getExportImportService() { * * @return initialized service for feature flag management */ + @Bean public FeatureFlagService getFeatureFlagService() { return featureFlagService; } @@ -430,6 +445,7 @@ public FeatureFlagService getFeatureFlagService() { * * @return initialized service for output stage management */ + @Bean public OutputStageService getOutputStageService() { return outputStageService; } diff --git a/src/test/java/com/gooddata/spring/GoodDataBeansAsServicesTest.java b/src/test/java/com/gooddata/spring/GoodDataBeansAsServicesTest.java new file mode 100644 index 000000000..e22a1de77 --- /dev/null +++ b/src/test/java/com/gooddata/spring/GoodDataBeansAsServicesTest.java @@ -0,0 +1,38 @@ +/** + * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.spring; + +import com.gooddata.GoodData; +import com.gooddata.project.ProjectService; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.Arrays; + +import static org.testng.Assert.*; + +public class GoodDataBeansAsServicesTest { + + @Test + public void servicesRegisteredFromXmlUsingAnnotationConfig() throws Exception { + final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/gd-annotationConfig.xml"); + Arrays.stream(GoodData.class.getDeclaredMethods()) + .map(Method::getReturnType) + .filter(rt -> rt.getName().endsWith("Service")) + .forEach(rt -> assertNotNull(context.getBean(rt), "Bean of type " + rt + " should be registered")); + } +} \ No newline at end of file diff --git a/src/test/resources/spring/gd-annotationConfig.xml b/src/test/resources/spring/gd-annotationConfig.xml new file mode 100644 index 000000000..e899861f4 --- /dev/null +++ b/src/test/resources/spring/gd-annotationConfig.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file From ff9505f516a9617a093a0e61ba5449d0099279e0 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 11 Jan 2017 10:10:35 +0100 Subject: [PATCH 221/934] fix link in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc858f63e..6da536a83 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ through changes between major versions. See [Javadocs](http://javadoc.io/doc/com.gooddata/gooddata-java) or [Wiki](https://github.com/martiner/gooddata-java/wiki) for [Code Examples](https://github.com/martiner/gooddata-java/wiki/Code-Examples) -and [Extensibility How-To](https://github.com/martiner/gooddata-java/wiki/Extending-). +and [Extensibility How-To](https://github.com/martiner/gooddata-java/wiki/Extending). ### Dependencies From 4e8e8da4eff6abd2b1dd0a0ffef51366ac25c707 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Wed, 11 Jan 2017 12:48:42 +0100 Subject: [PATCH 222/934] add javadoc overview --- src/main/javadoc/overview.html | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/javadoc/overview.html diff --git a/src/main/javadoc/overview.html b/src/main/javadoc/overview.html new file mode 100644 index 000000000..ba7525d61 --- /dev/null +++ b/src/main/javadoc/overview.html @@ -0,0 +1,21 @@ + + + +The GoodData Java SDK encapsulates the REST API provided by the GoodData +platform. + +

    + Entry point for GoodData SDK usage is class {@link com.gooddata.GoodData}. +

    + +

    + See Wiki for + Code Examples + and Extensibility How-To. +

    + + \ No newline at end of file From f254cbb8c8c40b6641b39d4984da03780dfb49ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Thu, 19 Jan 2017 15:19:22 +0100 Subject: [PATCH 223/934] fix occasional fails of update output stage test --- .../com/gooddata/dataload/OutputStageService.java | 12 +++++++++--- .../com/gooddata/dataload/OutputStageServiceIT.java | 6 ------ .../gooddata/dataload/OutputStageServiceTest.java | 12 +++++++++++- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/gooddata/dataload/OutputStageService.java b/src/main/java/com/gooddata/dataload/OutputStageService.java index caa5782b3..4d796d74d 100644 --- a/src/main/java/com/gooddata/dataload/OutputStageService.java +++ b/src/main/java/com/gooddata/dataload/OutputStageService.java @@ -13,6 +13,9 @@ import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; import com.gooddata.project.Project; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; @@ -66,11 +69,14 @@ public OutputStage getOutputStage(final Project project) { public OutputStage updateOutputStage(final OutputStage outputStage) { notNull(outputStage, "outputStage"); try { - restTemplate.put(outputStage.getUri(), outputStage); + HttpEntity outputStageHttpEntity = new HttpEntity<>(outputStage); + ResponseEntity response = restTemplate.exchange(outputStage.getUri(), HttpMethod.PUT, outputStageHttpEntity, OutputStage.class); + if (response.getBody() == null) { + throw new RestClientException("unexpected response body"); + } + return response.getBody(); } catch (GoodDataRestException | RestClientException e) { throw new GoodDataException("Unable to update output stage, uri: " + outputStage.getUri()); } - - return getOutputStageByUri(outputStage.getUri()); } } diff --git a/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java b/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java index 10ef69fe1..a6e593d31 100644 --- a/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java +++ b/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java @@ -86,12 +86,6 @@ public void shouldUpdateOutputStage() throws Exception { .havingPathEqualTo(outputStage.getUri()) .havingBody(jsonEquals(readStringFromResource(OUTPUT_STAGE_NO_PROCESS))) .respond() - .withStatus(200); - - onRequest() - .havingMethodEqualTo("GET") - .havingPathEqualTo(outputStage.getUri()) - .respond() .withBody(readFromResource(OUTPUT_STAGE_ALL_FIELDS)) .withStatus(200); diff --git a/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java b/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java index 081e4260e..64961660c 100644 --- a/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java +++ b/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java @@ -8,16 +8,22 @@ import static com.gooddata.util.ResourceUtils.readFromResource; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.core.Is.is; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.mockito.Matchers.any; import static org.hamcrest.MatcherAssert.assertThat; import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.project.Project; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.springframework.http.HttpMethod; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -79,8 +85,12 @@ public void testUpdateOutputStageNullOutputStage() throws Exception { @Test public void testUpdateOutputStage() throws Exception { + ResponseEntity responseEntity = mock(ResponseEntity.class); + when(restTemplate.exchange(eq(outputStage.getUri()), eq(HttpMethod.PUT), any(RequestEntity.class), eq(OutputStage.class))).thenReturn(responseEntity); + doReturn(outputStage).when(responseEntity).getBody(); + outputStageService.updateOutputStage(outputStage); - verify(restTemplate,times(1)).put(outputStage.getUri(), outputStage); + verify(restTemplate, times(1)).exchange(eq(outputStage.getUri()), eq(HttpMethod.PUT), any(RequestEntity.class), eq(OutputStage.class)); } } \ No newline at end of file From 570c74fe30689a3ba4849a5d216ddf0192b91680 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 27 Jan 2017 13:28:00 +0100 Subject: [PATCH 224/934] chg: change wording, pronounce the project as official --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 6da536a83..267efa107 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # GoodData Java SDK [![Build Status](https://travis-ci.org/martiner/gooddata-java.png?branch=master)](https://travis-ci.org/martiner/gooddata-java) [![Javadocs](http://javadoc.io/badge/com.gooddata/gooddata-java.svg)](http://javadoc.io/doc/com.gooddata/gooddata-java) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java) -The *GoodData Java SDK* encapsulates the REST API provided by the [GoodData](http://www.gooddata.com) platform. -The first version was implemented during the [All Data Hackathon](http://hackathon.gooddata.com) April 10 - 11 2014 -and currently the SDK is transitioned to be an official GoodData project. +The *GoodData Java SDK* encapsulates the REST API of the **GoodData Platform**. +The first version was implemented during the [All Data Hackathon](http://hackathon.gooddata.com) April 10 - 11 2014. +It is free and open-source software provided "as-is" under the [BSD License](LICENSE.txt) as an official project by [GoodData Corporation](http://www.gooddata.com). ## Usage @@ -33,10 +33,6 @@ The *GoodData Java SDK* uses: * the *Jackson JSON Processor* version 2.8.* * the *Java Development Kit (JDK)* version 8 or later -## License and conditions - -The *GoodData Java SDK* is free and open-source software provided by GoodData Corporation "as-is" under [BSD License](LICENSE.txt). - ## Development Build the library with `mvn package`, see the From d753396656c9e1fa5aba438576d3bc67699404e5 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 27 Jan 2017 14:36:00 +0100 Subject: [PATCH 225/934] chg: rename martiner to gooddata --- CONTRIBUTING.md | 4 ++-- README.md | 16 ++++++++-------- pom.xml | 6 +++--- .../java/com/gooddata/gdc/DataStoreService.java | 6 +++--- src/main/javadoc/overview.html | 6 +++--- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8fb045d98..97095c70e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,7 @@ Below are few **rules, recommendations and best practices** we try to follow whe * Every closed non-rejected pull request and issue must be marked with exactly **one milestone version**. * Issue must be **properly labeled** (bug/enhancement/backward incompatible/...). * Add usage examples of new high level functionality to -[documentation](https://github.com/martiner/gooddata-java/wiki/Code-Examples). +[documentation](https://github.com/gooddata/gooddata-java/wiki/Code-Examples). ## Design @@ -52,7 +52,7 @@ is specific enough. * `remove*()` (i.e. `remove(Project project)`) instead od `delete*()` * Write **integration tests** for services using _[Jadler](https://github.com/jadler-mocking/jadler/wiki)_. * If it is possible write **acceptance tests** to be run with the real backend. -* Update [documentation](https://github.com/martiner/gooddata-java/wiki/Code-Examples) with usage examples. +* Update [documentation](https://github.com/gooddata/gooddata-java/wiki/Code-Examples) with usage examples. ## Best practices * **Test class naming**: diff --git a/README.md b/README.md index 267efa107..b00b7e0c8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# GoodData Java SDK [![Build Status](https://travis-ci.org/martiner/gooddata-java.png?branch=master)](https://travis-ci.org/martiner/gooddata-java) [![Javadocs](http://javadoc.io/badge/com.gooddata/gooddata-java.svg)](http://javadoc.io/doc/com.gooddata/gooddata-java) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java) +# GoodData Java SDK [![Build Status](https://travis-ci.org/gooddata/gooddata-java.png?branch=master)](https://travis-ci.org/gooddata/gooddata-java) [![Javadocs](http://javadoc.io/badge/com.gooddata/gooddata-java.svg)](http://javadoc.io/doc/com.gooddata/gooddata-java) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.gooddata/gooddata-java) The *GoodData Java SDK* encapsulates the REST API of the **GoodData Platform**. The first version was implemented during the [All Data Hackathon](http://hackathon.gooddata.com) April 10 - 11 2014. @@ -15,14 +15,14 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from 2.2.0 ``` -See [releases page](https://github.com/martiner/gooddata-java/releases) for information about versions and notable changes, -the [Upgrading Guide](https://github.com/martiner/gooddata-java/wiki/Upgrading-GoodData-Java-SDK) will navigate you +See [releases page](https://github.com/gooddata/gooddata-java/releases) for information about versions and notable changes, +the [Upgrading Guide](https://github.com/gooddata/gooddata-java/wiki/Upgrading-GoodData-Java-SDK) will navigate you through changes between major versions. See [Javadocs](http://javadoc.io/doc/com.gooddata/gooddata-java) -or [Wiki](https://github.com/martiner/gooddata-java/wiki) for -[Code Examples](https://github.com/martiner/gooddata-java/wiki/Code-Examples) -and [Extensibility How-To](https://github.com/martiner/gooddata-java/wiki/Extending). +or [Wiki](https://github.com/gooddata/gooddata-java/wiki) for +[Code Examples](https://github.com/gooddata/gooddata-java/wiki/Code-Examples) +and [Extensibility How-To](https://github.com/gooddata/gooddata-java/wiki/Extending). ### Dependencies @@ -36,9 +36,9 @@ The *GoodData Java SDK* uses: ## Development Build the library with `mvn package`, see the -[Testing](https://github.com/martiner/gooddata-java/wiki/Testing) page for different testing methods. +[Testing](https://github.com/gooddata/gooddata-java/wiki/Testing) page for different testing methods. ## Contribute -Found a bug? Please create an [issue](https://github.com/martiner/gooddata-java/issues). Missing functionality? +Found a bug? Please create an [issue](https://github.com/gooddata/gooddata-java/issues). Missing functionality? [Contribute your code](CONTRIBUTING.md). diff --git a/pom.xml b/pom.xml index c5b38016d..ba354ec7d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ 2.2.1-SNAPSHOT ${project.artifactId} GoodData Java SDK - https://github.com/martiner/gooddata-java + https://github.com/gooddata/gooddata-java org.sonatype.oss @@ -22,8 +22,8 @@ - git@github.com:martiner/gooddata-java.git - scm:git:git@github.com:martiner/gooddata-java.git + git@github.com:gooddata/gooddata-java.git + scm:git:git@github.com:gooddata/gooddata-java.git scm:git:${basedir} diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index 54c4b1baa..bfd75ff57 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -106,7 +106,7 @@ private void upload(URI url, InputStream stream) { if (HttpStatus.INTERNAL_SERVER_ERROR.value() == e.getStatusCode()) { // this error may occur when user issues request to WebDAV before SST and TT were obtained // and WebDAV is deployed on a separate hostname - // see https://github.com/martiner/gooddata-java/wiki/Known-limitations + // see https://github.com/gooddata/gooddata-java/wiki/Known-limitations throw new DataStoreException(createUnAuthRequestWarningMessage(url), e); } else { throw new DataStoreException("Unable to upload to " + url + " got status " + e.getStatusCode(), e); @@ -114,7 +114,7 @@ private void upload(URI url, InputStream stream) { } catch (IOException e) { // this error may occur when user issues request to WebDAV before SST and TT were obtained // and WebDAV deployed on the same hostname - // see https://github.com/martiner/gooddata-java/wiki/Known-limitations + // see https://github.com/gooddata/gooddata-java/wiki/Known-limitations if (e.getCause() instanceof NonRepeatableRequestException) { throw new DataStoreException(createUnAuthRequestWarningMessage(url), e); } else { @@ -125,7 +125,7 @@ private void upload(URI url, InputStream stream) { private String createUnAuthRequestWarningMessage(final URI url) { return "Got 500 while uploading to " + url + "." - + "\nThis can be known limitation, see https://github.com/martiner/gooddata-java/wiki/Known-limitations"; + + "\nThis can be known limitation, see https://github.com/gooddata/gooddata-java/wiki/Known-limitations"; } /** diff --git a/src/main/javadoc/overview.html b/src/main/javadoc/overview.html index ba7525d61..cd5b8b207 100644 --- a/src/main/javadoc/overview.html +++ b/src/main/javadoc/overview.html @@ -13,9 +13,9 @@

    - See Wiki for - Code Examples - and Extensibility How-To. + See Wiki for + Code Examples + and Extensibility How-To.

    \ No newline at end of file From 4602547b9060c9b3f7bf89929b411a04288fe4e8 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 30 Jan 2017 10:34:45 +0100 Subject: [PATCH 226/934] [maven-release-plugin] prepare release gooddata-java-2.3.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba354ec7d..9ed3975f3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.2.1-SNAPSHOT + 2.3.0 ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From e2cf8168c20db9906a0a36e465e03f0e3e70dca0 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 30 Jan 2017 10:34:45 +0100 Subject: [PATCH 227/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9ed3975f3..cfb71affc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.3.0 + 2.3.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From e3fb985c1ef3f6713bec2082e13d23a160dfbc2d Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 30 Jan 2017 12:53:47 +0100 Subject: [PATCH 228/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b00b7e0c8..365996701 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.2.0 + 2.3.0 ``` See [releases page](https://github.com/gooddata/gooddata-java/releases) for information about versions and notable changes, From 9c355d9db1a61e31011f775e88dd0a2c72cb06b8 Mon Sep 17 00:00:00 2001 From: Petr Vales Date: Wed, 8 Feb 2017 12:59:43 +0100 Subject: [PATCH 229/934] use endpoint uri in UriPrefixer --- src/main/java/com/gooddata/GoodData.java | 4 +--- .../UriPrefixingClientHttpRequestFactory.java | 17 +++++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index b45aa20b0..7a575c319 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -220,9 +220,7 @@ static RestTemplate createRestTemplate(GoodDataEndpoint endpoint, HttpClient htt final UriPrefixingClientHttpRequestFactory factory = new UriPrefixingClientHttpRequestFactory( new HttpComponentsClientHttpRequestFactory(httpClient), - endpoint.getHostname(), - endpoint.getPort(), - endpoint.getProtocol() + endpoint ); final RestTemplate restTemplate = new RestTemplate(factory); restTemplate.setInterceptors(Arrays.asList( diff --git a/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java b/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java index e3428cf04..a5f17d4e2 100644 --- a/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java +++ b/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java @@ -8,7 +8,6 @@ import org.springframework.http.HttpMethod; import org.springframework.http.client.ClientHttpRequest; import org.springframework.http.client.ClientHttpRequestFactory; -import org.springframework.web.util.UriComponentsBuilder; import java.io.IOException; import java.net.URI; @@ -33,8 +32,7 @@ class UriPrefixingClientHttpRequestFactory implements ClientHttpRequestFactory { * @param uriPrefix the URI for setting hostname and port of all HTTP requests */ UriPrefixingClientHttpRequestFactory(ClientHttpRequestFactory factory, URI uriPrefix) { - this.wrapped = notNull(factory, "factory"); - this.prefixer = new UriPrefixer(uriPrefix); + this(factory, new UriPrefixer(uriPrefix)); } /** @@ -42,12 +40,15 @@ class UriPrefixingClientHttpRequestFactory implements ClientHttpRequestFactory { * and use the given hostname, port, and protocol for all HTTP requests * * @param factory the factory to be wrapped - * @param hostname the hostname for all HTTP requests - * @param port the port for all HTTP requests - * @param protocol the protocol for all HTTP requests + * @param endpoint GoodData Platform's endpoint */ - UriPrefixingClientHttpRequestFactory(ClientHttpRequestFactory factory, String hostname, int port, String protocol) { - this(factory, UriComponentsBuilder.newInstance().scheme(protocol).host(hostname).port(port).build().toUri()); + UriPrefixingClientHttpRequestFactory(ClientHttpRequestFactory factory, GoodDataEndpoint endpoint) { + this(factory, new UriPrefixer(notNull(endpoint, "prefixer").toUri())); + } + + private UriPrefixingClientHttpRequestFactory(final ClientHttpRequestFactory factory, final UriPrefixer prefixer) { + this.wrapped = notNull(factory, "factory"); + this.prefixer = notNull(prefixer, "prefixer"); } @Override From 92e9b866e214f516455f5ffccdc48b27dde54d37 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 10 Feb 2017 15:29:37 +0100 Subject: [PATCH 230/934] [maven-release-plugin] prepare release gooddata-java-2.4.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cfb71affc..9f8423618 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.3.1-SNAPSHOT + 2.4.0 ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From 40187e3aab198a0375afb7108eeff99e6be26584 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 10 Feb 2017 15:29:37 +0100 Subject: [PATCH 231/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9f8423618..3e7907c7e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.4.0 + 2.4.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From ccd070216725d0b178d834f0326fb45ab5053c12 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 10 Feb 2017 15:37:57 +0100 Subject: [PATCH 232/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 365996701..6621f77e1 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.3.0 + 2.4.0 ``` See [releases page](https://github.com/gooddata/gooddata-java/releases) for information about versions and notable changes, From dcdc0ee7f6fdef14d1d7555de924fb07aadf508d Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Thu, 2 Mar 2017 21:50:31 +0100 Subject: [PATCH 233/934] fix: enable ResponseErrorHandler to read both known gdc error json structures Resolves #395. Custom deserializer for ErrorStructure and descendant GdcError created. Unfortunately it's not possible to deserialize exactly the ErrorStructure instance - the on purpose descendant is returned instead. The ErrorStructure descendants must use JsonDeserializer.None in order to work correctly. --- .../com/gooddata/GoodDataRestException.java | 6 +- .../java/com/gooddata/gdc/ErrorStructure.java | 4 +- .../gdc/ErrorStructureDeserializer.java | 68 ++++++++++++++ src/main/java/com/gooddata/gdc/GdcError.java | 3 + .../gooddata/util/ResponseErrorHandler.java | 10 +- .../util/ResponseErrorHandlerTest.java | 92 +++++++++++++++++++ 6 files changed, 174 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/gooddata/gdc/ErrorStructureDeserializer.java create mode 100644 src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java diff --git a/src/main/java/com/gooddata/GoodDataRestException.java b/src/main/java/com/gooddata/GoodDataRestException.java index 8d5fffdcd..804e72e4f 100644 --- a/src/main/java/com/gooddata/GoodDataRestException.java +++ b/src/main/java/com/gooddata/GoodDataRestException.java @@ -1,11 +1,11 @@ /** - * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. * This source code is licensed under the BSD-style license found in the * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata; -import com.gooddata.gdc.GdcError; +import com.gooddata.gdc.ErrorStructure; /** * Signals client or server error during communication with GoodData REST API. @@ -66,7 +66,7 @@ public GoodDataRestException(int statusCode, String requestId, String message, S * @param statusText the HTTP status text of the response * @param error the GoodData REST API error structure */ - public GoodDataRestException(int statusCode, String requestId, String statusText, GdcError error) { + public GoodDataRestException(int statusCode, String requestId, String statusText, ErrorStructure error) { this(statusCode, error != null && error.getRequestId() != null ? error.getRequestId() : requestId, error != null && error.getMessage() != null ? error.getFormattedMessage() : statusText, diff --git a/src/main/java/com/gooddata/gdc/ErrorStructure.java b/src/main/java/com/gooddata/gdc/ErrorStructure.java index 1f10f2a77..7147fb1b5 100644 --- a/src/main/java/com/gooddata/gdc/ErrorStructure.java +++ b/src/main/java/com/gooddata/gdc/ErrorStructure.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. * This source code is licensed under the BSD-style license found in the * LICENSE.txt file in the root directory of this source tree. */ @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import static com.gooddata.util.Validate.notNull; import static java.util.Arrays.copyOf; @@ -18,6 +19,7 @@ * Deserialization only. */ @JsonIgnoreProperties(ignoreUnknown = true) +@JsonDeserialize(using = ErrorStructureDeserializer.class) public class ErrorStructure { protected final String message; protected final Object[] parameters; diff --git a/src/main/java/com/gooddata/gdc/ErrorStructureDeserializer.java b/src/main/java/com/gooddata/gdc/ErrorStructureDeserializer.java new file mode 100644 index 000000000..b5dd73d40 --- /dev/null +++ b/src/main/java/com/gooddata/gdc/ErrorStructureDeserializer.java @@ -0,0 +1,68 @@ +/** + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.gdc; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.util.TokenBuffer; + +import java.io.IOException; + +/** + * Common deserializer for {@link ErrorStructure} and {@link GdcError}. + */ +class ErrorStructureDeserializer extends JsonDeserializer { + + private static final String GDC_ERROR_TYPE_NAME = "error"; + + @Override + public ErrorStructure deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { + final TokenBuffer tokenBuffer = new TokenBuffer(jp); + tokenBuffer.copyCurrentStructure(jp); + + final TreeNode treeNode = tokenBuffer.asParser().readValueAsTree(); + + Class clazz; + if (treeNode.isObject()) { + if (((ObjectNode) treeNode).has(GDC_ERROR_TYPE_NAME)) { + clazz = GdcError.class; + } else { + clazz = DefaultDeserializerErrorStructure.class; + } + } else { + throw ctxt.mappingException("Unknown type of ErrorStructure"); + } + + final JsonParser nextParser = tokenBuffer.asParser(); + nextParser.nextToken(); // just created parser points before the first token + + return ctxt.readValue(nextParser, clazz); + } + + /** + * This class actually represents deserialized {@link ErrorStructure}. + * We need to override deserializer to break the cycle while deserialize. + */ + @JsonDeserialize(using = None.class) + private static class DefaultDeserializerErrorStructure extends ErrorStructure { + + protected DefaultDeserializerErrorStructure(@JsonProperty("errorClass") String errorClass, + @JsonProperty("component") String component, + @JsonProperty("parameters") Object[] parameters, + @JsonProperty("message") String message, + @JsonProperty("errorCode") String errorCode, + @JsonProperty("errorId") String errorId, + @JsonProperty("trace") String trace, + @JsonProperty("requestId") String requestId) { + super(errorClass, component, parameters, message, errorCode, errorId, trace, requestId); + } + } +} diff --git a/src/main/java/com/gooddata/gdc/GdcError.java b/src/main/java/com/gooddata/gdc/GdcError.java index d524ce845..2a7693392 100644 --- a/src/main/java/com/gooddata/gdc/GdcError.java +++ b/src/main/java/com/gooddata/gdc/GdcError.java @@ -11,6 +11,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; /** * GoodData REST API error structure. @@ -20,6 +22,7 @@ @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonDeserialize(using = JsonDeserializer.None.class) public class GdcError extends ErrorStructure { @JsonCreator diff --git a/src/main/java/com/gooddata/util/ResponseErrorHandler.java b/src/main/java/com/gooddata/util/ResponseErrorHandler.java index c9d0a3f72..1abeb2de2 100644 --- a/src/main/java/com/gooddata/util/ResponseErrorHandler.java +++ b/src/main/java/com/gooddata/util/ResponseErrorHandler.java @@ -1,12 +1,12 @@ /** - * Copyright (C) 2004-2016, GoodData(R) Corporation. All rights reserved. + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. * This source code is licensed under the BSD-style license found in the * LICENSE.txt file in the root directory of this source tree. */ package com.gooddata.util; import com.gooddata.GoodDataRestException; -import com.gooddata.gdc.GdcError; +import com.gooddata.gdc.ErrorStructure; import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.client.DefaultResponseErrorHandler; @@ -24,16 +24,16 @@ */ public class ResponseErrorHandler extends DefaultResponseErrorHandler { - private final HttpMessageConverterExtractor gdcErrorExtractor; + private final HttpMessageConverterExtractor gdcErrorExtractor; public ResponseErrorHandler(List> messageConverters) { - gdcErrorExtractor = new HttpMessageConverterExtractor<>(GdcError.class, + gdcErrorExtractor = new HttpMessageConverterExtractor<>(ErrorStructure.class, noNullElements(messageConverters, "messageConverters")); } @Override public void handleError(ClientHttpResponse response) { - GdcError error = null; + ErrorStructure error = null; try { error = gdcErrorExtractor.extractData(response); } catch (RestClientException | IOException ignored) { diff --git a/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java b/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java new file mode 100644 index 000000000..34d58644e --- /dev/null +++ b/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java @@ -0,0 +1,92 @@ +/** + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.gooddata.GoodData; +import com.gooddata.GoodDataRestException; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.io.IOException; + +import static java.util.Collections.singletonList; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.testng.Assert.assertEquals; + +public class ResponseErrorHandlerTest { + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private ResponseErrorHandler responseErrorHandler; + + @BeforeMethod + public void setUp() throws Exception { + responseErrorHandler = new ResponseErrorHandler(singletonList(new MappingJackson2HttpMessageConverter(OBJECT_MAPPER))); + } + + @Test + public void testHandleGdcError() throws Exception { + final ClientHttpResponse response = prepareResponse("/gdc/gdcError.json"); + + final GoodDataRestException exc = assertException(() -> responseErrorHandler.handleError(response)); + + assertThat("GoodDataRestException should have been thrown!", exc, is(notNullValue())); + assertEquals(exc.getStatusCode(), 500); + assertEquals(exc.getRequestId(), "REQ"); + assertEquals(exc.getComponent(), "COMPONENT"); + assertEquals(exc.getErrorClass(), "CLASS"); + assertEquals(exc.getErrorCode(), "CODE"); + assertEquals(exc.getText(), "MSG"); + } + + @Test + public void testHandleErrorStructure() throws Exception { + final ClientHttpResponse response = prepareResponse("/gdc/errorStructure.json"); + + final GoodDataRestException exc = assertException(() -> responseErrorHandler.handleError(response)); + + assertThat("GoodDataRestException should have been thrown!", exc, is(notNullValue())); + assertEquals(exc.getStatusCode(), 500); + assertEquals(exc.getRequestId(), "REQ"); + assertEquals(exc.getComponent(), "COMPONENT"); + assertEquals(exc.getErrorClass(), "CLASS"); + assertEquals(exc.getErrorCode(), "CODE"); + assertEquals(exc.getText(), "MSG PARAM1 PARAM2 3"); + } + + private ClientHttpResponse prepareResponse(String resourcePath) throws IOException { + final ClientHttpResponse response = mock(ClientHttpResponse.class); + when(response.getStatusCode()).thenReturn(HttpStatus.INTERNAL_SERVER_ERROR); + when(response.getRawStatusCode()).thenReturn(500); + final HttpHeaders headers = new HttpHeaders(); + headers.set(GoodData.GDC_REQUEST_ID_HEADER, "requestId"); + headers.setContentType(MediaType.APPLICATION_JSON); + when(response.getHeaders()).thenReturn(headers); + when(response.getBody()).thenReturn(getClass().getResourceAsStream(resourcePath)); + + return response; + } + + private static GoodDataRestException assertException(Runnable runnable) { + try { + runnable.run(); + return null; + } catch (GoodDataRestException e) { + return e; + } + } + +} \ No newline at end of file From fe95cf589f3189a02db4c4555135dca57620217b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C5=A0tumpf?= Date: Tue, 14 Mar 2017 13:00:26 +0100 Subject: [PATCH 234/934] eliminate double escaping in UriPage (fixes #428) --- src/main/java/com/gooddata/collections/UriPage.java | 8 +++++++- src/test/java/com/gooddata/collections/UriPageTest.java | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/collections/UriPage.java b/src/main/java/com/gooddata/collections/UriPage.java index 139b75bbd..7078caa19 100644 --- a/src/main/java/com/gooddata/collections/UriPage.java +++ b/src/main/java/com/gooddata/collections/UriPage.java @@ -7,7 +7,9 @@ import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; +import org.springframework.web.util.UriUtils; +import java.io.UnsupportedEncodingException; import java.net.URI; import java.util.List; import java.util.Map.Entry; @@ -27,7 +29,11 @@ class UriPage implements Page { * @param pageUri page URI */ public UriPage(final String pageUri) { - this.pageUri = UriComponentsBuilder.fromUriString(notNull(pageUri, "pageUri")).build(); + try { + this.pageUri = UriComponentsBuilder.fromUriString(UriUtils.decode(notNull(pageUri, "pageUri"), "UTF-8")).build(); + } catch (final UnsupportedEncodingException e) { + throw new IllegalStateException(e); + } } /** diff --git a/src/test/java/com/gooddata/collections/UriPageTest.java b/src/test/java/com/gooddata/collections/UriPageTest.java index b0080510a..bb65557eb 100644 --- a/src/test/java/com/gooddata/collections/UriPageTest.java +++ b/src/test/java/com/gooddata/collections/UriPageTest.java @@ -63,4 +63,10 @@ public void testIdempotency() throws Exception { assertThat(components.getQueryParams(), hasEntry("offset", singletonList("god"))); assertThat(components.getQueryParams(), hasEntry("limit", singletonList("10"))); } + + @Test + public void testEncoding() throws Exception { + final UriPage uri = new UriPage("uri?test=foo%20bar"); + assertThat(uri.getPageUri(null).toString(), is("uri?test=foo%20bar")); + } } From 06feb5474d282e89a4b987f0c71e6af43c75e138 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 14 Mar 2017 13:32:47 +0100 Subject: [PATCH 235/934] update contributing guide --- CONTRIBUTING.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 97095c70e..df24c472b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,9 +3,16 @@ Below are few **rules, recommendations and best practices** we try to follow when developing the _GoodData Java SDK_. ## Paperwork -* Every pull request with non-trivial change must be **associated with an issue**. -* Every closed non-rejected pull request and issue must be marked with exactly **one milestone version**. -* Issue must be **properly labeled** (bug/enhancement/backward incompatible/...). +* The **commit message**: + * must be written in the **imperative mood** + * must clearly **explain rationale** behind this change (describe _why_ you are doing the change rather than _what_ you are changing) +* The **pull request**: + * must be **properly labeled** (trivial/bug/enhancement/backward incompatible/...) + * with non-trivial change must be **[associated with an issue](https://help.github.com/articles/closing-issues-via-commit-messages/)** + * must be marked with exactly one **milestone version** +* The **issue** + * must be **properly labeled** (bug/enhancement/backward incompatible/...). + * must be marked with exactly one **milestone version** * Add usage examples of new high level functionality to [documentation](https://github.com/gooddata/gooddata-java/wiki/Code-Examples). From f6d4043a2006e078cd203ff4a08da5da86466091 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 16 Mar 2017 10:57:26 +0100 Subject: [PATCH 236/934] [maven-release-plugin] prepare release gooddata-java-2.4.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3e7907c7e..ba1d57705 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.4.1-SNAPSHOT + 2.4.1 ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From 5cef5f93295ae3d06c29849910c8603a64f6480d Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 16 Mar 2017 10:57:27 +0100 Subject: [PATCH 237/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba1d57705..036deea6a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.4.1 + 2.4.2-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From 8235d5408c5e64d668d24c7450cf6a2d94e06b0a Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 16 Mar 2017 11:03:45 +0100 Subject: [PATCH 238/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6621f77e1..743664849 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.4.0 + 2.4.1 ``` See [releases page](https://github.com/gooddata/gooddata-java/releases) for information about versions and notable changes, From ed211a07ef02a3bba99d96e958026878fd2d8fd2 Mon Sep 17 00:00:00 2001 From: Libor Rysavy Date: Thu, 23 Mar 2017 11:42:02 +0100 Subject: [PATCH 239/934] Remove extra string from Implementation-Title --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 036deea6a..082ae922f 100644 --- a/pom.xml +++ b/pom.xml @@ -71,7 +71,7 @@ ${project.description} ${project.version} GoodData - HttpComponents ${project.description} + ${project.description} ${project.version} GoodData com.gooddata From 7401bb38017ea44f5811382a15caa9e0bf7675b4 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 3 Apr 2017 13:08:36 +0200 Subject: [PATCH 240/934] remove file input/output stream usage, close streams in try block https://www.cloudbees.com/blog/fileinputstream-fileoutputstream-considered-harmful --- .../gooddata/dataload/processes/ProcessService.java | 13 ++++++------- src/main/java/com/gooddata/util/ZipHelper.java | 11 ++++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index 6cb3e2575..59bb3e8ce 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -33,12 +33,11 @@ import org.springframework.web.util.UriComponentsBuilder; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.net.URI; +import java.nio.file.Files; import java.util.Collection; import static com.gooddata.util.Validate.notEmpty; @@ -524,7 +523,7 @@ private static URI getProcessesUri(Project project) { private DataloadProcess postProcess(DataloadProcess process, File processData, URI postUri) { File tempFile = createTempFile("process", ".zip"); - try (FileOutputStream output = new FileOutputStream(tempFile)) { + try (OutputStream output = Files.newOutputStream(tempFile.toPath())) { ZipHelper.zip(processData, output); } catch (IOException e) { throw new GoodDataException("Unable to zip process data", e); @@ -533,14 +532,14 @@ private DataloadProcess postProcess(DataloadProcess process, File processData, U Object processToSend; HttpMethod method = HttpMethod.POST; if (tempFile.length() > MAX_MULTIPART_SIZE) { - try { + try (final InputStream input = Files.newInputStream(tempFile.toPath())) { process.setPath(dataStoreService.getUri(tempFile.getName()).getPath()); - dataStoreService.upload(tempFile.getName(), new FileInputStream(tempFile)); + dataStoreService.upload(tempFile.getName(), input); processToSend = process; if (DataloadProcess.TEMPLATE.matches(postUri.toString())) { method = HttpMethod.PUT; } - } catch (FileNotFoundException e) { + } catch (IOException e) { throw new GoodDataException("Unable to access zipped process data at " + tempFile.getAbsolutePath(), e); } diff --git a/src/main/java/com/gooddata/util/ZipHelper.java b/src/main/java/com/gooddata/util/ZipHelper.java index 397bab6d2..86196a4e4 100644 --- a/src/main/java/com/gooddata/util/ZipHelper.java +++ b/src/main/java/com/gooddata/util/ZipHelper.java @@ -10,9 +10,10 @@ import org.springframework.util.StreamUtils; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; import java.nio.file.Path; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -50,7 +51,7 @@ public static void zip(File file, OutputStream output, boolean includeRoot) thro notNull(output, "output"); if (isZipped(file)) { - try (FileInputStream fis = new FileInputStream(file)) { + try (InputStream fis = Files.newInputStream(file.toPath())) { StreamUtils.copy(fis, output); } } else { @@ -77,15 +78,15 @@ private static void zipDir(Path rootPath, File dir, ZipOutputStream zos) throws private static void zipFile(Path rootPath, File file, ZipOutputStream zos) throws IOException { ZipEntry ze = new ZipEntry(rootPath.relativize(file.toPath()).toString()); zos.putNextEntry(ze); - try (FileInputStream fis = new FileInputStream(file)) { + try (InputStream fis = Files.newInputStream(file.toPath())) { StreamUtils.copy(fis, zos); } zos.closeEntry(); } private static boolean isZipped(File file) { - try { - return new ZipInputStream(new FileInputStream(file)).getNextEntry() != null; + try (final InputStream stream = Files.newInputStream(file.toPath())) { + return new ZipInputStream(stream).getNextEntry() != null; } catch (IOException e) { return false; } From b3d31c2a536a53b3db63c310fbe699e088fa9f59 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 19 Apr 2017 16:45:49 +0200 Subject: [PATCH 241/934] change test - use hamcrest, simplify exception extraction --- .../util/ResponseErrorHandlerTest.java | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java b/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java index 34d58644e..ae0f9e24b 100644 --- a/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java +++ b/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java @@ -24,7 +24,6 @@ import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.testng.Assert.assertEquals; public class ResponseErrorHandlerTest { @@ -41,30 +40,30 @@ public void setUp() throws Exception { public void testHandleGdcError() throws Exception { final ClientHttpResponse response = prepareResponse("/gdc/gdcError.json"); - final GoodDataRestException exc = assertException(() -> responseErrorHandler.handleError(response)); + final GoodDataRestException exc = assertException(response); assertThat("GoodDataRestException should have been thrown!", exc, is(notNullValue())); - assertEquals(exc.getStatusCode(), 500); - assertEquals(exc.getRequestId(), "REQ"); - assertEquals(exc.getComponent(), "COMPONENT"); - assertEquals(exc.getErrorClass(), "CLASS"); - assertEquals(exc.getErrorCode(), "CODE"); - assertEquals(exc.getText(), "MSG"); + assertThat(exc.getStatusCode(), is(500)); + assertThat(exc.getRequestId(), is("REQ")); + assertThat(exc.getComponent(), is("COMPONENT")); + assertThat(exc.getErrorClass(), is("CLASS")); + assertThat(exc.getErrorCode(), is("CODE")); + assertThat(exc.getText(), is("MSG")); } @Test public void testHandleErrorStructure() throws Exception { final ClientHttpResponse response = prepareResponse("/gdc/errorStructure.json"); - final GoodDataRestException exc = assertException(() -> responseErrorHandler.handleError(response)); + final GoodDataRestException exc = assertException(response); assertThat("GoodDataRestException should have been thrown!", exc, is(notNullValue())); - assertEquals(exc.getStatusCode(), 500); - assertEquals(exc.getRequestId(), "REQ"); - assertEquals(exc.getComponent(), "COMPONENT"); - assertEquals(exc.getErrorClass(), "CLASS"); - assertEquals(exc.getErrorCode(), "CODE"); - assertEquals(exc.getText(), "MSG PARAM1 PARAM2 3"); + assertThat(exc.getStatusCode(), is(500)); + assertThat(exc.getRequestId(), is("REQ")); + assertThat(exc.getComponent(), is("COMPONENT")); + assertThat(exc.getErrorClass(), is("CLASS")); + assertThat(exc.getErrorCode(), is("CODE")); + assertThat(exc.getText(), is("MSG PARAM1 PARAM2 3")); } private ClientHttpResponse prepareResponse(String resourcePath) throws IOException { @@ -80,10 +79,10 @@ private ClientHttpResponse prepareResponse(String resourcePath) throws IOExcepti return response; } - private static GoodDataRestException assertException(Runnable runnable) { + private GoodDataRestException assertException(ClientHttpResponse response) { try { - runnable.run(); - return null; + responseErrorHandler.handleError(response); + throw new AssertionError("Expected GoodDataRestException"); } catch (GoodDataRestException e) { return e; } From abf072930f0b5988acf496968550070cb96ef5d6 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 19 Apr 2017 17:08:32 +0200 Subject: [PATCH 242/934] fix: handle invalid error response --- .../java/com/gooddata/GoodDataRestException.java | 4 +++- .../com/gooddata/util/ResponseErrorHandler.java | 3 ++- .../com/gooddata/GoodDataRestExceptionTest.java | 10 ++++++++++ .../gooddata/util/ResponseErrorHandlerTest.java | 16 ++++++++++++++++ src/test/resources/gdc/invalidError.json | 8 ++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/test/resources/gdc/invalidError.json diff --git a/src/main/java/com/gooddata/GoodDataRestException.java b/src/main/java/com/gooddata/GoodDataRestException.java index 804e72e4f..3d2ac2985 100644 --- a/src/main/java/com/gooddata/GoodDataRestException.java +++ b/src/main/java/com/gooddata/GoodDataRestException.java @@ -35,7 +35,9 @@ public class GoodDataRestException extends GoodDataException { */ public GoodDataRestException(int statusCode, String requestId, String message, String component, String errorClass, String errorCode) { - super(statusCode + (requestId != null ? ": [requestId=" + requestId + "] " : ": ") + message); + super(statusCode + + (requestId != null ? ": [requestId=" + requestId + "] " : ": ") + + (message != null ? message : "Unknown error")); this.statusCode = statusCode; this.requestId = requestId; this.component = component; diff --git a/src/main/java/com/gooddata/util/ResponseErrorHandler.java b/src/main/java/com/gooddata/util/ResponseErrorHandler.java index 1abeb2de2..a2245c48b 100644 --- a/src/main/java/com/gooddata/util/ResponseErrorHandler.java +++ b/src/main/java/com/gooddata/util/ResponseErrorHandler.java @@ -8,6 +8,7 @@ import com.gooddata.GoodDataRestException; import com.gooddata.gdc.ErrorStructure; import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.converter.HttpMessageConversionException; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.client.DefaultResponseErrorHandler; import org.springframework.web.client.HttpMessageConverterExtractor; @@ -36,7 +37,7 @@ public void handleError(ClientHttpResponse response) { ErrorStructure error = null; try { error = gdcErrorExtractor.extractData(response); - } catch (RestClientException | IOException ignored) { + } catch (RestClientException | IOException | HttpMessageConversionException ignored) { } final String requestId = response.getHeaders().getFirst(GDC_REQUEST_ID_HEADER); int statusCode; diff --git a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java index 22c133197..c69afe096 100644 --- a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java +++ b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java @@ -12,6 +12,7 @@ import java.io.InputStream; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.*; public class GoodDataRestExceptionTest { @@ -57,6 +58,15 @@ public void shouldCreateInstanceWithNullGdcError() throws Exception { assertThat(e.getText(), is("message")); } + @Test + public void shouldCreateInstanceWithNullStatusAndGdcError() throws Exception { + final GoodDataRestException e = new GoodDataRestException(500, "a123", null, null); + assertThat(e.getMessage(), is("500: [requestId=a123] Unknown error")); + assertThat(e.getStatusCode(), is(500)); + assertThat(e.getRequestId(), is("a123")); + assertThat(e.getText(), is(nullValue())); + } + @Test public void shouldCreateInstanceWithGdcError() throws Exception { final InputStream inputStream = getClass().getResourceAsStream("/gdc/gdcError.json"); diff --git a/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java b/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java index ae0f9e24b..3d4addcc1 100644 --- a/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java +++ b/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java @@ -20,6 +20,7 @@ import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.mock; @@ -66,6 +67,21 @@ public void testHandleErrorStructure() throws Exception { assertThat(exc.getText(), is("MSG PARAM1 PARAM2 3")); } + @Test + public void testHandleInvalidError() throws Exception { + final ClientHttpResponse response = prepareResponse("/gdc/invalidError.json"); + + final GoodDataRestException exc = assertException(response); + + assertThat("GoodDataRestException should have been thrown!", exc, is(notNullValue())); + assertThat(exc.getStatusCode(), is(500)); + assertThat(exc.getRequestId(), is("requestId")); + assertThat(exc.getComponent(), is(nullValue())); + assertThat(exc.getErrorClass(), is(nullValue())); + assertThat(exc.getErrorCode(), is(nullValue())); + assertThat(exc.getText(), is(nullValue())); + } + private ClientHttpResponse prepareResponse(String resourcePath) throws IOException { final ClientHttpResponse response = mock(ClientHttpResponse.class); when(response.getStatusCode()).thenReturn(HttpStatus.INTERNAL_SERVER_ERROR); diff --git a/src/test/resources/gdc/invalidError.json b/src/test/resources/gdc/invalidError.json new file mode 100644 index 000000000..e3ba3752c --- /dev/null +++ b/src/test/resources/gdc/invalidError.json @@ -0,0 +1,8 @@ +{ + "timestamp": 1492609090612, + "status": 500, + "error": "Internal Server Error", + "exception": "java.lang.NoSuchFieldError", + "message": "fail", + "path": "/foo" +} From d72fb15d19c551f58f8c99cee56584abf2736724 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Fri, 21 Apr 2017 08:16:31 +0200 Subject: [PATCH 243/934] fix: upgrading link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 743664849..d0ad3201b 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from ``` See [releases page](https://github.com/gooddata/gooddata-java/releases) for information about versions and notable changes, -the [Upgrading Guide](https://github.com/gooddata/gooddata-java/wiki/Upgrading-GoodData-Java-SDK) will navigate you +the [Upgrading Guide](https://github.com/gooddata/gooddata-java/wiki/Upgrading) will navigate you through changes between major versions. See [Javadocs](http://javadoc.io/doc/com.gooddata/gooddata-java) From 096c7e8bbf98c189e373a91879f64289ebcbd0f3 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 26 Apr 2017 13:59:34 +0200 Subject: [PATCH 244/934] fix: double uri encoding close: #436 --- src/main/java/com/gooddata/UriPrefixer.java | 16 +++++++++-- .../java/com/gooddata/UriPrefixerTest.java | 28 +++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gooddata/UriPrefixer.java b/src/main/java/com/gooddata/UriPrefixer.java index 9b8a82148..9ae63f7ff 100644 --- a/src/main/java/com/gooddata/UriPrefixer.java +++ b/src/main/java/com/gooddata/UriPrefixer.java @@ -8,6 +8,7 @@ import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; +import java.util.List; import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; @@ -55,12 +56,21 @@ public URI getUriPrefix() { */ public URI mergeUris(URI uri) { notNull(uri, "uri"); - final String path = trimLeadingCharacter(uri.getRawPath(), '/'); + return UriComponentsBuilder.fromUri(uriPrefix) - .pathSegment(path) + .pathSegment(getPathSegments(uri)) .query(uri.getRawQuery()) .fragment(uri.getRawFragment()) - .build().toUri(); + .build(true) // we have an URI as the input, so it is already encoded + .toUri(); + } + + private static String[] getPathSegments(final URI uri) { + final List pathSegments = UriComponentsBuilder + .fromPath(uri.getRawPath()) + .build(true) + .getPathSegments(); + return pathSegments.toArray(new String[pathSegments.size()]); } /** diff --git a/src/test/java/com/gooddata/UriPrefixerTest.java b/src/test/java/com/gooddata/UriPrefixerTest.java index 719b4e646..93b995238 100644 --- a/src/test/java/com/gooddata/UriPrefixerTest.java +++ b/src/test/java/com/gooddata/UriPrefixerTest.java @@ -5,6 +5,7 @@ */ package com.gooddata; +import org.springframework.web.util.UriComponentsBuilder; import org.testng.annotations.Test; import java.net.URI; @@ -21,10 +22,37 @@ public void testMergeUrisWithSlash() throws Exception { assertThat(result.toString(), is("http://localhost:1/uploads/test")); } + @Test + public void testMergeUrisWithSlashes() throws Exception { + final UriPrefixer prefixer = new UriPrefixer("http://localhost:1/uploads/"); + final URI result = prefixer.mergeUris("/test"); + assertThat(result.toString(), is("http://localhost:1/uploads/test")); + } + @Test public void testMergeUrisWithoutSlash() throws Exception { + final UriPrefixer prefixer = new UriPrefixer("http://localhost:1/uploads/"); + final URI result = prefixer.mergeUris("test"); + assertThat(result.toString(), is("http://localhost:1/uploads/test")); + } + + @Test + public void testMergeUrisWithoutSlashes() throws Exception { final UriPrefixer prefixer = new UriPrefixer("http://localhost:1/uploads"); final URI result = prefixer.mergeUris("test"); assertThat(result.toString(), is("http://localhost:1/uploads/test")); } + + @Test + public void shouldNotDoubleEncodeQueryParam() throws Exception { + final UriPrefixer prefixer = new UriPrefixer("http://localhost:1/uploads"); + + final URI uri = UriComponentsBuilder.fromPath("/foo") + .queryParam("bar", "\n") // some crazy value which needs encoding + .build() + .toUri(); + + final URI result = prefixer.mergeUris(uri); + assertThat(result.toString(), is("http://localhost:1/uploads/foo?bar=%0A")); + } } \ No newline at end of file From 31cae73fdee79918c6e11391302301c5d8c38752 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 26 Apr 2017 14:23:58 +0200 Subject: [PATCH 245/934] [maven-release-plugin] prepare release gooddata-java-2.4.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 082ae922f..2054c927d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.4.2-SNAPSHOT + 2.4.2 ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From 89b40061eb362229d1823231cdfb96ede5fb037a Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 26 Apr 2017 14:23:58 +0200 Subject: [PATCH 246/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2054c927d..8b3e89a90 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.4.2 + 2.4.3-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From 63f4ade03e4a70690e8f2b1eaf2775283cc4a607 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 26 Apr 2017 14:33:03 +0200 Subject: [PATCH 247/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d0ad3201b..cd895dcb8 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.4.1 + 2.4.2 ``` See [releases page](https://github.com/gooddata/gooddata-java/releases) for information about versions and notable changes, From 284151918a7cf6528388a1155e6389150d872dd0 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 27 Apr 2017 15:25:47 +0200 Subject: [PATCH 248/934] fix: don't let uriprefixer to strip trailing slash close: #438 --- src/main/java/com/gooddata/UriPrefixer.java | 20 +++++++++++++------ .../UriPrefixingClientHttpRequestFactory.java | 3 ++- .../java/com/gooddata/UriPrefixerTest.java | 14 +++++++++++++ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gooddata/UriPrefixer.java b/src/main/java/com/gooddata/UriPrefixer.java index 9ae63f7ff..618b3bfc7 100644 --- a/src/main/java/com/gooddata/UriPrefixer.java +++ b/src/main/java/com/gooddata/UriPrefixer.java @@ -5,6 +5,7 @@ */ package com.gooddata; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; @@ -12,7 +13,6 @@ import static com.gooddata.util.Validate.notEmpty; import static com.gooddata.util.Validate.notNull; -import static org.springframework.util.StringUtils.trimLeadingCharacter; /** * Used internally by GoodData SDK to hold and set URI prefix (hostname and port) of all requests. @@ -57,17 +57,25 @@ public URI getUriPrefix() { public URI mergeUris(URI uri) { notNull(uri, "uri"); - return UriComponentsBuilder.fromUri(uriPrefix) - .pathSegment(getPathSegments(uri)) + final String path = uri.getRawPath(); + final String[] pathSegments = getPathSegments(path); + + final UriComponentsBuilder builder = UriComponentsBuilder.fromUri(uriPrefix) + .pathSegment(pathSegments) .query(uri.getRawQuery()) - .fragment(uri.getRawFragment()) + .fragment(uri.getRawFragment()); + if (StringUtils.endsWith(path, "/")) { + builder.path("/"); + } + + return builder .build(true) // we have an URI as the input, so it is already encoded .toUri(); } - private static String[] getPathSegments(final URI uri) { + private static String[] getPathSegments(final String path) { final List pathSegments = UriComponentsBuilder - .fromPath(uri.getRawPath()) + .fromPath(path) .build(true) .getPathSegments(); return pathSegments.toArray(new String[pathSegments.size()]); diff --git a/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java b/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java index a5f17d4e2..fd7cb7015 100644 --- a/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java +++ b/src/main/java/com/gooddata/UriPrefixingClientHttpRequestFactory.java @@ -53,7 +53,8 @@ private UriPrefixingClientHttpRequestFactory(final ClientHttpRequestFactory fact @Override public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException { - return wrapped.createRequest(prefixer.mergeUris(uri), httpMethod); + final URI merged = prefixer.mergeUris(uri); + return wrapped.createRequest(merged, httpMethod); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/UriPrefixerTest.java b/src/test/java/com/gooddata/UriPrefixerTest.java index 93b995238..65c564ee1 100644 --- a/src/test/java/com/gooddata/UriPrefixerTest.java +++ b/src/test/java/com/gooddata/UriPrefixerTest.java @@ -29,6 +29,13 @@ public void testMergeUrisWithSlashes() throws Exception { assertThat(result.toString(), is("http://localhost:1/uploads/test")); } + @Test + public void testMergeUrisWithAllSlashes() throws Exception { + final UriPrefixer prefixer = new UriPrefixer("http://localhost:1/uploads/"); + final URI result = prefixer.mergeUris("/test/"); + assertThat(result.toString(), is("http://localhost:1/uploads/test/")); + } + @Test public void testMergeUrisWithoutSlash() throws Exception { final UriPrefixer prefixer = new UriPrefixer("http://localhost:1/uploads/"); @@ -55,4 +62,11 @@ public void shouldNotDoubleEncodeQueryParam() throws Exception { final URI result = prefixer.mergeUris(uri); assertThat(result.toString(), is("http://localhost:1/uploads/foo?bar=%0A")); } + + @Test + public void shouldName() throws Exception { + final UriPrefixer prefixer = new UriPrefixer("https://localhost:1"); + final URI result = prefixer.mergeUris("http://localhost:1/uploads/test/"); + assertThat(result.toString(), is("https://localhost:1/uploads/test/")); + } } \ No newline at end of file From f70ddb2219e80cd5f61f72575a05a228972aef98 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 28 Apr 2017 15:12:18 +0200 Subject: [PATCH 249/934] include ADS license to the Warehouse object --- .../com/gooddata/warehouse/Warehouse.java | 30 +++++++++++++------ .../com/gooddata/warehouse/WarehouseTest.java | 26 ++++++++++++++++ .../warehouse/warehouse-withLicense.json | 21 +++++++++++++ 3 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 src/test/resources/warehouse/warehouse-withLicense.json diff --git a/src/main/java/com/gooddata/warehouse/Warehouse.java b/src/main/java/com/gooddata/warehouse/Warehouse.java index 443b46b3c..261582d27 100644 --- a/src/main/java/com/gooddata/warehouse/Warehouse.java +++ b/src/main/java/com/gooddata/warehouse/Warehouse.java @@ -56,6 +56,7 @@ public class Warehouse { private String environment; private Map links; private String connectionUrl; + private String license; public Warehouse(String title, String authToken) { this(title, authToken, null); @@ -67,15 +68,9 @@ public Warehouse(String title, String authToken, String description) { this.description = description; } - @JsonCreator - public Warehouse(@JsonProperty("title") String title, @JsonProperty("authorizationToken") String authToken, - @JsonProperty("description") String description, - @JsonProperty("created") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime created, - @JsonProperty("updated") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime updated, - @JsonProperty("createdBy") String createdBy, @JsonProperty("updatedBy") String updatedBy, - @JsonProperty("status") String status, @JsonProperty("environment") String environment, - @JsonProperty("connectionUrl") String connectionUrl, - @JsonProperty("links") Map links) { + public Warehouse(String title, String authToken, String description, DateTime created, DateTime updated, + String createdBy, String updatedBy, String status, String environment, String connectionUrl, + Map links) { this(title, authToken, description); this.created = created; this.updated = updated; @@ -87,6 +82,21 @@ public Warehouse(@JsonProperty("title") String title, @JsonProperty("authorizati this.links = links; } + @JsonCreator + public Warehouse(@JsonProperty("title") String title, @JsonProperty("authorizationToken") String authToken, + @JsonProperty("description") String description, + @JsonProperty("created") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime created, + @JsonProperty("updated") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime updated, + @JsonProperty("createdBy") String createdBy, @JsonProperty("updatedBy") String updatedBy, + @JsonProperty("status") String status, @JsonProperty("environment") String environment, + @JsonProperty("connectionUrl") String connectionUrl, + @JsonProperty("links") Map links, + @JsonProperty("license") String license) { + this(title, authToken, description, created, updated, createdBy, updatedBy, status, environment, connectionUrl, + links); + this.license = license; + } + public String getTitle() { return title; } @@ -144,6 +154,8 @@ public void setEnvironment(final String environment) { this.environment = environment; } + public String getLicense() { return license; } + @JsonIgnore public void setEnvironment(final Environment environment) { notNull(environment, "environment"); diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTest.java index 62007685e..f16042035 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTest.java @@ -33,6 +33,7 @@ public class WarehouseTest { public static final String UPDATED_BY = "/gdc/account/profile/updatedBy"; public static final String STATUS = "ENABLED"; public static final String CONNECTION_URL = "CONNECTION_URL"; + public static final String PREMIUM_LICENSE = "PREMIUM"; public static final Map LINKS = new LinkedHashMap() {{ put("self", "/gdc/datawarehouse/instances/instanceId"); put("parent", "/gdc/datawarehouse/instances"); @@ -59,6 +60,12 @@ public void testSerializationWithNullToken() throws Exception { assertThat(warehouse, serializesToJson("/warehouse/warehouse-null-token.json")); } + @Test + public void testSerializationWithLicense() throws Exception { + final Warehouse warehouse = new Warehouse(TITLE, TOKEN, DESCRIPTION, CREATED, UPDATED, CREATED_BY, UPDATED_BY, STATUS, ENVIRONMENT, CONNECTION_URL, LINKS, PREMIUM_LICENSE); + assertThat(warehouse, serializesToJson("/warehouse/warehouse-withLicense.json")); + } + @Test public void testDeserialization() throws Exception { final InputStream stream = getClass().getResourceAsStream("/warehouse/warehouse.json"); @@ -77,6 +84,25 @@ public void testDeserialization() throws Exception { assertThat(warehouse.getConnectionUrl(), is(CONNECTION_URL)); } + @Test + public void testDeserializationWithLicense() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/warehouse/warehouse-withLicense.json"); + final Warehouse warehouse = new ObjectMapper().readValue(stream, Warehouse.class); + + assertThat(warehouse.getTitle(), is(TITLE)); + assertThat(warehouse.getDescription(), is(DESCRIPTION)); + assertThat(warehouse.getAuthorizationToken(), is(TOKEN)); + assertThat(warehouse.getEnvironment(), is(ENVIRONMENT)); + assertThat(warehouse.getCreatedBy(), is(CREATED_BY)); + assertThat(warehouse.getUpdatedBy(), is(UPDATED_BY)); + assertThat(warehouse.getCreated(), is(CREATED)); + assertThat(warehouse.getUpdated(), is(UPDATED)); + assertThat(warehouse.getStatus(), is(STATUS)); + assertThat(warehouse.getLinks(), is(LINKS)); + assertThat(warehouse.getConnectionUrl(), is(CONNECTION_URL)); + assertThat(warehouse.getLicense(), is(PREMIUM_LICENSE)); + } + @Test public void testDeserializationWithNullToken() throws Exception { final InputStream stream = getClass().getResourceAsStream("/warehouse/warehouse-null-token.json"); diff --git a/src/test/resources/warehouse/warehouse-withLicense.json b/src/test/resources/warehouse/warehouse-withLicense.json new file mode 100644 index 000000000..1e2fe9746 --- /dev/null +++ b/src/test/resources/warehouse/warehouse-withLicense.json @@ -0,0 +1,21 @@ +{ + "instance" : { + "title" : "Test", + "description" : "Storage", + "status" : "ENABLED", + "authorizationToken" : "{Token}", + "created" : "2014-05-05T08:27:33.000Z", + "updated" : "2014-05-05T08:27:34.000Z", + "createdBy" : "/gdc/account/profile/createdBy", + "updatedBy" : "/gdc/account/profile/updatedBy", + "environment" : "TESTING", + "connectionUrl" : "CONNECTION_URL", + "license": "PREMIUM", + "links" : { + "self" : "/gdc/datawarehouse/instances/instanceId", + "parent" : "/gdc/datawarehouse/instances", + "users" : "/gdc/datawarehouse/instances/instanceId/users", + "jdbc" : "/gdc/datawarehouse/instances/instanceId/jdbc" + } + } +} From 2bc251d7f4a406eeeb4b374c25378d4bd339b680 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 2 May 2017 14:57:40 +0200 Subject: [PATCH 250/934] [maven-release-plugin] prepare release gooddata-java-2.5.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8b3e89a90..6a19b9b8b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.4.3-SNAPSHOT + 2.5.0 ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From c81238f10bf8d672d1d8e7e36d6a5ad12c287473 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 2 May 2017 14:57:40 +0200 Subject: [PATCH 251/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6a19b9b8b..667ebad1e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.5.0 + 2.5.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From fa6919f84902f308fa373b13a59917ec7f30cb85 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 2 May 2017 16:07:49 +0200 Subject: [PATCH 252/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cd895dcb8..f1dc8c023 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.4.2 + 2.5.0 ``` See [releases page](https://github.com/gooddata/gooddata-java/releases) for information about versions and notable changes, From 62f267695b40610797ac8016846bf92954118f88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Wed, 10 May 2017 00:59:22 +0200 Subject: [PATCH 253/934] Add feature to execute schedule manually --- .../dataload/processes/ProcessService.java | 34 +++++++ .../gooddata/dataload/processes/Schedule.java | 6 ++ .../dataload/processes/ScheduleExecution.java | 95 +++++++++++++++++++ .../processes/ScheduleExecutionException.java | 23 +++++ .../dataload/processes/ProcessServiceAT.java | 9 ++ .../dataload/processes/ProcessServiceIT.java | 34 +++++++ .../processes/ProcessServiceTest.java | 35 +++++++ .../processes/ScheduleExecutionTest.java | 46 +++++++++ .../processes/emptyScheduleExecution.json | 4 + .../dataload/processes/scheduleExecution.json | 11 +++ 10 files changed, 297 insertions(+) create mode 100644 src/main/java/com/gooddata/dataload/processes/ScheduleExecution.java create mode 100644 src/main/java/com/gooddata/dataload/processes/ScheduleExecutionException.java create mode 100644 src/test/java/com/gooddata/dataload/processes/ScheduleExecutionTest.java create mode 100644 src/test/resources/dataload/processes/emptyScheduleExecution.json create mode 100644 src/test/resources/dataload/processes/scheduleExecution.json diff --git a/src/main/java/com/gooddata/dataload/processes/ProcessService.java b/src/main/java/com/gooddata/dataload/processes/ProcessService.java index 59bb3e8ce..39e450e8b 100644 --- a/src/main/java/com/gooddata/dataload/processes/ProcessService.java +++ b/src/main/java/com/gooddata/dataload/processes/ProcessService.java @@ -470,6 +470,40 @@ public void removeSchedule(Schedule schedule) { } } + /** + * Executes given schedule + * + * @param schedule to execute + * @return schedule execution + */ + public FutureResult executeSchedule(final Schedule schedule) { + notNull(schedule, "schedule"); + ScheduleExecution scheduleExecution; + try { + scheduleExecution = restTemplate.postForObject(schedule.getExecutionsUri(), new ScheduleExecution(), ScheduleExecution.class); + } catch (GoodDataException | RestClientException e) { + throw new ScheduleExecutionException("Cannot execute schedule", e); + } + + return new PollResult<>(this, new AbstractPollHandler(scheduleExecution.getUri(), ScheduleExecution.class, ScheduleExecution.class) { + @Override + public boolean isFinished(ClientHttpResponse response) throws IOException { + final ScheduleExecution pollResult = extractData(response, ScheduleExecution.class); + return pollResult.isFinished(); + } + + @Override + public void handlePollResult(final ScheduleExecution pollResult) { + setResult(pollResult); + } + + @Override + public void handlePollException(final GoodDataRestException e) { + throw new ScheduleExecutionException("Cannot execute schedule", e); + } + }); + } + private PageableList listSchedules(URI uri) { try { final Schedules schedules = restTemplate.getForObject(uri, Schedules.class); diff --git a/src/main/java/com/gooddata/dataload/processes/Schedule.java b/src/main/java/com/gooddata/dataload/processes/Schedule.java index 4fe94cb93..bbd7586ff 100644 --- a/src/main/java/com/gooddata/dataload/processes/Schedule.java +++ b/src/main/java/com/gooddata/dataload/processes/Schedule.java @@ -41,6 +41,7 @@ public class Schedule { public static final UriTemplate TEMPLATE = new UriTemplate(URI); private static final String SELF_LINK = "self"; + private static final String EXECUTIONS_LINK = "executions"; private static final String MSETL_TYPE = "MSETL"; private static final String PROCESS_ID = "PROCESS_ID"; @@ -254,6 +255,11 @@ public String getId() { return TEMPLATE.match(getUri()).get("scheduleId"); } + @JsonIgnore + public String getExecutionsUri() { + return notNullState(links, "links").get(EXECUTIONS_LINK); + } + @Override public String toString() { return GoodDataToStringBuilder.defaultToString(this); diff --git a/src/main/java/com/gooddata/dataload/processes/ScheduleExecution.java b/src/main/java/com/gooddata/dataload/processes/ScheduleExecution.java new file mode 100644 index 000000000..255989ea5 --- /dev/null +++ b/src/main/java/com/gooddata/dataload/processes/ScheduleExecution.java @@ -0,0 +1,95 @@ +/** + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload.processes; + +import static com.gooddata.util.Validate.notNullState; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gooddata.util.ISODateTimeDeserializer; +import org.joda.time.DateTime; +import org.springframework.web.util.UriTemplate; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Schedule execution + */ +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) +@JsonTypeName("execution") +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ScheduleExecution { + + public static final String URI = "/gdc/projects/{projectId}/schedules/{scheduleId}/executions/{executionId}"; + public static final UriTemplate TEMPLATE = new UriTemplate(URI); + private static final Set FINISHED_STATUSES = new HashSet<>(Arrays.asList("OK", "ERROR", "CANCELED", "TIMEOUT")); + + private DateTime created; + private String status; + private String trigger; + private String processLastDeployedBy; + + private Map links; + + ScheduleExecution() {} + + @JsonCreator + private ScheduleExecution(@JsonProperty("createdTime") @JsonDeserialize(using = ISODateTimeDeserializer.class) DateTime created, + @JsonProperty("status") String executionStatus, + @JsonProperty("trigger") String trigger, + @JsonProperty("processLastDeployedBy") String processLastDeployedBy, + @JsonProperty("links") Map links) { + this.created = created; + this.status = executionStatus; + this.trigger = trigger; + this.processLastDeployedBy = processLastDeployedBy; + this.links = links; + } + + public String getStatus() { + return status; + } + + public Map getLinks() { + return links; + } + + public DateTime getCreated() { + return created; + } + + public String getTrigger() { + return trigger; + } + + public String getProcessLastDeployedBy() { + return processLastDeployedBy; + } + + @JsonIgnore + public String getUri() { + return notNullState(links, "links").get("self"); + } + + /** + * + * @return whether schedule execution is finished + */ + @JsonIgnore + public boolean isFinished() { + return FINISHED_STATUSES.contains(getStatus()); + } +} diff --git a/src/main/java/com/gooddata/dataload/processes/ScheduleExecutionException.java b/src/main/java/com/gooddata/dataload/processes/ScheduleExecutionException.java new file mode 100644 index 000000000..0a4dcc476 --- /dev/null +++ b/src/main/java/com/gooddata/dataload/processes/ScheduleExecutionException.java @@ -0,0 +1,23 @@ +/** + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload.processes; + +import com.gooddata.GoodDataException; + +/** + * Represents error during schedule execution + */ +public class ScheduleExecutionException extends GoodDataException { + + public ScheduleExecutionException(String message) { + super(message); + } + + public ScheduleExecutionException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java index 07af74d45..cbbd8d5e1 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceAT.java @@ -6,6 +6,7 @@ package com.gooddata.dataload.processes; import com.gooddata.AbstractGoodDataAT; +import com.gooddata.FutureResult; import com.gooddata.collections.PageableList; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -68,6 +69,14 @@ public void createSchedule() { assertThat(schedule.getRescheduleInMinutes(), is(15)); } + @Test(groups = "process", dependsOnMethods = "createSchedule") + public void executeSchedule() { + final FutureResult future = gd.getProcessService().executeSchedule(schedule); + final ScheduleExecution scheduleExecution = future.get(); + + assertThat(scheduleExecution.getStatus(), is("OK")); + } + @Test(groups = "process", dependsOnMethods = "createSchedule") public void createTriggeredSchedule() { triggeredSchedule = gd.getProcessService().createSchedule(project, new Schedule(process, "sdktest.grf", schedule)); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java index 948ad6b4b..68b09fc4b 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java @@ -44,6 +44,7 @@ public class ProcessServiceIT extends AbstractGoodDataIT { private static final String SCHEDULE_PATH = Schedule.TEMPLATE.expand(PROJECT_ID, SCHEDULE_ID).toString(); private static final String EXECUTABLE = "test.groovy"; private static final String PROCESS_DEPLOYMENT_POLLING_URI = "/gdc/projects/PROJECT_ID/dataload/processesDeploy/uri"; + private static final String EXECUTION_ID = "EXECUTION_ID"; private Project project; @@ -369,4 +370,37 @@ public void shouldUpdateProcessFromAppstore() { assertThat(updatedProcess.getType(), is(equalTo(ProcessType.RUBY.toString()))); assertThat(updatedProcess.getExecutables(), contains("hello.rb") ); } + + @Test + public void shouldExecuteSchedule() { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(schedule.getExecutionsUri()) + .respond() + .withBody(readFromResource("/dataload/processes/scheduleExecution.json")) + .withStatus(200); + + onRequest() + .havingMethodEqualTo("GET") + .havingPathEqualTo(ScheduleExecution.TEMPLATE.expand(PROJECT_ID, SCHEDULE_ID, EXECUTION_ID).toString()) + .respond() + .withBody(readFromResource("/dataload/processes/scheduleExecution.json")) + .withStatus(200); + + FutureResult futureResult = gd.getProcessService().executeSchedule(schedule); + ScheduleExecution scheduleExecution = futureResult.get(); + + assertThat(scheduleExecution.getStatus(), is("OK")); + } + + @Test(expectedExceptions = ScheduleExecutionException.class) + public void shouldNotExecuteSchedule() { + onRequest() + .havingMethodEqualTo("POST") + .havingPathEqualTo(schedule.getExecutionsUri()) + .respond() + .withStatus(409); + + gd.getProcessService().executeSchedule(schedule); + } } diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java index 39092b899..418ed6469 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceTest.java @@ -5,6 +5,7 @@ */ package com.gooddata.dataload.processes; +import com.gooddata.FutureResult; import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; import com.gooddata.account.Account; @@ -43,9 +44,11 @@ import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.notNull; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; +import static org.springframework.http.HttpMethod.GET; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; @@ -54,6 +57,8 @@ public class ProcessServiceTest { private static final String PROCESS_ID = "PROCESS_ID"; private static final String PROJECT_ID = "PROJECT_ID"; private static final String ACCOUNT_ID = "ACCOUNT_ID"; + private static final String SCHEDULE_EXECUTIONS_URI = "/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID/executions"; + private static final String SCHEDULE_EXECUTION_URI = "/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID/executions/EXECUTION_ID"; private static final String PROCESS_URI = "/gdc/projects/PROJECT_ID/dataload/processes/PROCESS_ID"; private static final String USER_PROCESS_URI = "/gdc/account/profile/ACCOUNT_ID/dataload/processes"; @@ -224,4 +229,34 @@ public void testListUserProcessesWithOneProcesses() throws Exception { assertThat(result, hasSize(1)); assertThat(result, contains(process)); } + + @Test(expectedExceptions = ScheduleExecutionException.class) + public void testExecuteScheduleException() throws Exception { + when(restTemplate.postForObject(eq(SCHEDULE_EXECUTIONS_URI), any(ScheduleExecution.class), eq(ScheduleExecution.class))) + .thenThrow(new RestClientException("")); + + final Schedule schedule = mock(Schedule.class); + + when(schedule.getExecutionsUri()).thenReturn(SCHEDULE_EXECUTIONS_URI); + + processService.executeSchedule(schedule); + } + + @Test(expectedExceptions = ScheduleExecutionException.class) + public void testExecuteScheduleExceptionDuringPolling() throws Exception { + final ScheduleExecution execution = mock(ScheduleExecution.class); + when(execution.getUri()).thenReturn(SCHEDULE_EXECUTION_URI); + + final Schedule schedule = mock(Schedule.class); + when(schedule.getExecutionsUri()).thenReturn(SCHEDULE_EXECUTIONS_URI); + + when(restTemplate.postForObject(eq(SCHEDULE_EXECUTIONS_URI), any(ScheduleExecution.class), eq(ScheduleExecution.class))) + .thenReturn(execution); + + when(restTemplate.execute(eq(SCHEDULE_EXECUTION_URI), eq(GET), any(), any())) + .thenThrow(mock(GoodDataRestException.class)); + + FutureResult futureResult = processService.executeSchedule(schedule); + futureResult.get(); + } } diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleExecutionTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleExecutionTest.java new file mode 100644 index 000000000..0f935a7c9 --- /dev/null +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleExecutionTest.java @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.dataload.processes; + + +import static com.gooddata.JsonMatchers.serializesToJson; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.core.Is.is; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.testng.annotations.Test; + +import java.io.InputStream; +import java.util.HashMap; + +public class ScheduleExecutionTest { + + @Test + public void testEmptyScheduleExecutionSerialization() throws Exception { + final ScheduleExecution scheduleExecution = new ScheduleExecution(); + + assertThat(scheduleExecution, serializesToJson("/dataload/processes/emptyScheduleExecution.json")); + } + + @Test + public void testDeserialization() throws Exception { + final InputStream stream = getClass().getResourceAsStream("/dataload/processes/scheduleExecution.json"); + final ScheduleExecution scheduleExecution = new ObjectMapper().readValue(stream, ScheduleExecution.class); + + assertThat(scheduleExecution, notNullValue()); + assertThat(scheduleExecution.getLinks(), is(equalTo(new HashMap() {{ + put("self", "/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID/executions/EXECUTION_ID"); + }}))); + assertThat(scheduleExecution.getStatus(), is("OK")); + assertThat(scheduleExecution.getTrigger(), is("MANUAL")); + assertThat(scheduleExecution.getProcessLastDeployedBy(), is("bear@gooddata.com")); + assertThat(scheduleExecution.getCreated(), is(new DateTime(2017, 5, 9, 21, 54, 50, 924, DateTimeZone.UTC))); + } +} diff --git a/src/test/resources/dataload/processes/emptyScheduleExecution.json b/src/test/resources/dataload/processes/emptyScheduleExecution.json new file mode 100644 index 000000000..dcbad84f1 --- /dev/null +++ b/src/test/resources/dataload/processes/emptyScheduleExecution.json @@ -0,0 +1,4 @@ +{ + "execution" : { + } +} diff --git a/src/test/resources/dataload/processes/scheduleExecution.json b/src/test/resources/dataload/processes/scheduleExecution.json new file mode 100644 index 000000000..89fd13e2e --- /dev/null +++ b/src/test/resources/dataload/processes/scheduleExecution.json @@ -0,0 +1,11 @@ +{ + "execution" : { + "createdTime" : "2017-05-09T21:54:50.924Z", + "status" : "OK", + "trigger" : "MANUAL", + "processLastDeployedBy" : "bear@gooddata.com", + "links" : { + "self" : "/gdc/projects/PROJECT_ID/schedules/SCHEDULE_ID/executions/EXECUTION_ID" + } + } +} From ed6e5b66d8360953cb3817dcd4523353545b7ccd Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Mon, 15 May 2017 15:37:40 +0200 Subject: [PATCH 254/934] chg: split duties of reviewer and committer --- CONTRIBUTING.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df24c472b..c61a4f09f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,19 +3,21 @@ Below are few **rules, recommendations and best practices** we try to follow when developing the _GoodData Java SDK_. ## Paperwork + +### Committer * The **commit message**: * must be written in the **imperative mood** * must clearly **explain rationale** behind this change (describe _why_ you are doing the change rather than _what_ you are changing) * The **pull request**: - * must be **properly labeled** (trivial/bug/enhancement/backward incompatible/...) * with non-trivial change must be **[associated with an issue](https://help.github.com/articles/closing-issues-via-commit-messages/)** - * must be marked with exactly one **milestone version** -* The **issue** - * must be **properly labeled** (bug/enhancement/backward incompatible/...). - * must be marked with exactly one **milestone version** * Add usage examples of new high level functionality to [documentation](https://github.com/gooddata/gooddata-java/wiki/Code-Examples). +### Reviewer +Ensure pull request and issues are + * **properly labeled** (trivial/bug/enhancement/backward incompatible/...) + * marked with exactly one **milestone version** + ## Design ### Structure From 71aae8d9213ceb036bc064f23cc09f2de27a9d20 Mon Sep 17 00:00:00 2001 From: Matej Plch Date: Fri, 12 May 2017 17:06:17 +0200 Subject: [PATCH 255/934] FEATURE: Enable to customize user-agent --- src/main/java/com/gooddata/GoodData.java | 3 ++- .../java/com/gooddata/GoodDataSettings.java | 19 +++++++++++++++++++ .../com/gooddata/GoodDataSettingsTest.java | 11 +++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 7a575c319..7d872bbbe 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -22,6 +22,7 @@ import com.gooddata.model.ModelService; import com.gooddata.project.ProjectService; import com.gooddata.report.ReportService; +import org.apache.commons.lang3.StringUtils; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.config.SocketConfig; @@ -246,7 +247,7 @@ private HttpClientBuilder createHttpClientBuilder(final GoodDataSettings setting requestConfig.setSocketTimeout(settings.getSocketTimeout()); return HttpClientBuilder.create() - .setUserAgent(getUserAgent()) + .setUserAgent(StringUtils.isNotBlank(settings.getUserAgent()) ? String.format("%s %s", settings.getUserAgent(), getUserAgent()) : getUserAgent()) .setConnectionManager(connectionManager) .setDefaultRequestConfig(requestConfig.build()); } diff --git a/src/main/java/com/gooddata/GoodDataSettings.java b/src/main/java/com/gooddata/GoodDataSettings.java index 46ccd30ff..f35a09145 100644 --- a/src/main/java/com/gooddata/GoodDataSettings.java +++ b/src/main/java/com/gooddata/GoodDataSettings.java @@ -5,6 +5,8 @@ */ package com.gooddata; +import org.apache.commons.lang.StringUtils; + import java.util.concurrent.TimeUnit; import static org.springframework.util.Assert.isTrue; @@ -22,6 +24,7 @@ public class GoodDataSettings { private int connectionTimeout = secondsToMillis(10); private int connectionRequestTimeout = secondsToMillis(10); private int socketTimeout = secondsToMillis(60); + private String userAgent; /** @@ -155,6 +158,22 @@ public int getSocketTimeout() { return socketTimeout; } + /** + * User agent + * @return user agent string + */ + public String getUserAgent() { + return userAgent; + } + + /** + * Set custom user agent as prefix for default user agent + * @param userAgent user agent string + */ + public void setUserAgent(String userAgent) { + this.userAgent = userAgent; + } + @Override public boolean equals(final Object o) { if (this == o) return true; diff --git a/src/test/java/com/gooddata/GoodDataSettingsTest.java b/src/test/java/com/gooddata/GoodDataSettingsTest.java index 42bffade7..d4d6a7c45 100644 --- a/src/test/java/com/gooddata/GoodDataSettingsTest.java +++ b/src/test/java/com/gooddata/GoodDataSettingsTest.java @@ -8,6 +8,9 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; @@ -26,6 +29,7 @@ public void testHasDefaults() throws Exception { assertTrue(settings.getConnectionTimeout() >= 0); assertTrue(settings.getConnectionRequestTimeout() >= 0); assertTrue(settings.getSocketTimeout() >= 0); + assertThat(settings.getUserAgent(), is(nullValue())); } @Test @@ -58,4 +62,11 @@ public void setNegativeSocketTimeoutFails() throws Exception { public void setZeroMaxConnectionsFails() throws Exception { settings.setMaxConnections(0); } + + @Test + public void customUserAgentShouldBePrefixOfDefault() { + GoodDataSettings goodDataSettings = new GoodDataSettings(); + goodDataSettings.setUserAgent("customAgent/X.Y"); + assertThat(goodDataSettings.getUserAgent(), is("customAgent/X.Y")); + } } \ No newline at end of file From a4c70d90dbf10c7d469a3151aedc868fefe8d75c Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 16 May 2017 11:23:44 +0200 Subject: [PATCH 256/934] [maven-release-plugin] prepare release gooddata-java-2.6.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 667ebad1e..a5d020cf0 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.5.1-SNAPSHOT + 2.6.0 ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From 5c8da9d636d32cd17f783bbf30ac519fc09b1fd4 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 16 May 2017 11:23:44 +0200 Subject: [PATCH 257/934] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a5d020cf0..a95081d36 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.gooddata gooddata-java - 2.6.0 + 2.6.1-SNAPSHOT ${project.artifactId} GoodData Java SDK https://github.com/gooddata/gooddata-java From 8cd98172e820624403297ff1a57a939910f5afb1 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 16 May 2017 11:30:36 +0200 Subject: [PATCH 258/934] bump version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f1dc8c023..218d669cc 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The *GoodData Java SDK* is available in Maven Central Repository, to use it from com.gooddata gooddata-java - 2.5.0 + 2.6.0 ``` See [releases page](https://github.com/gooddata/gooddata-java/releases) for information about versions and notable changes, From 926b0eedb28929bf468c5759ad0c9923b76b9eb4 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Wed, 17 May 2017 09:36:18 +0200 Subject: [PATCH 259/934] handle a new type of exception WebDAV throws with R136 --- src/main/java/com/gooddata/gdc/DataStoreService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/gooddata/gdc/DataStoreService.java b/src/main/java/com/gooddata/gdc/DataStoreService.java index bfd75ff57..eb6b7bbe9 100644 --- a/src/main/java/com/gooddata/gdc/DataStoreService.java +++ b/src/main/java/com/gooddata/gdc/DataStoreService.java @@ -14,6 +14,7 @@ import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; +import org.apache.http.NoHttpResponseException; import org.apache.http.ProtocolVersion; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; @@ -111,6 +112,11 @@ private void upload(URI url, InputStream stream) { } else { throw new DataStoreException("Unable to upload to " + url + " got status " + e.getStatusCode(), e); } + } catch (NoHttpResponseException e) { + // this error may occur when user issues request to WebDAV before SST and TT were obtained + // and WebDAV is deployed on a separate hostname since R136 + // see https://github.com/gooddata/gooddata-java/wiki/Known-limitations + throw new DataStoreException(createUnAuthRequestWarningMessage(url), e); } catch (IOException e) { // this error may occur when user issues request to WebDAV before SST and TT were obtained // and WebDAV deployed on the same hostname From 28101f6f6e94a627b75291bd983a05ffa4c7795f Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 23 May 2017 10:36:55 +0200 Subject: [PATCH 260/934] fix: skip test as the fix on server side is scheduled for R136 --- src/test/java/com/gooddata/gdc/DatastoreServiceAT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java index 274fbf506..c1e3e6b64 100644 --- a/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java +++ b/src/test/java/com/gooddata/gdc/DatastoreServiceAT.java @@ -92,8 +92,8 @@ public void datastoreConnectionClosedAfterSingleConnection() throws Exception { assertThat(connManager.getTotalStats().getLeased(), is(equalTo(0))); } - @Test(groups = "datastore", expectedExceptions = DataStoreException.class, - expectedExceptionsMessageRegExp = "(?s).* 500 .*https://github.com/.*/Known-limitations") + @Test(groups = "datastore", expectedExceptions = DataStoreException.class, enabled = false, + expectedExceptionsMessageRegExp = "(?s).* 500 .*https://github.com/.Known-limitations") public void shouldThrowExceptionWithMessageOnUnAuthRequest() throws Exception { final GoodData datastoreGd = new GoodData(getProperty("host"), getProperty("login"), getProperty("pass")); DataStoreService dataStoreService = datastoreGd.getDataStoreService(); From 722be536809ef2139c2591dccc24ad912faa3f07 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 23 May 2017 11:29:13 +0200 Subject: [PATCH 261/934] add windows CI build close #235 --- .appveyor.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .appveyor.yml diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 000000000..7468fa0c5 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,17 @@ +version: "{branch} {build}" + +branches: + only: + - master + +cache: + - C:\Users\appveyor\.m2 + +install: + - SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0 + +build_script: + - mvn clean test-compile + +test_script: + - mvn verify From 88e38ceb3c1704e6af6c3a6bbdcc3dafde87891c Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Tue, 23 May 2017 22:04:09 +0200 Subject: [PATCH 262/934] use ResourceUtils in tests --- .../java/com/gooddata/AbstractGoodDataIT.java | 2 - .../gooddata/GoodDataRestExceptionTest.java | 9 ++-- .../gooddata/account/AccountServiceIT.java | 5 +- .../com/gooddata/account/AccountTest.java | 5 +- .../com/gooddata/collections/PagingTest.java | 10 ++-- .../connector/ConnectorServiceIT.java | 8 ++-- .../IntegrationProcessStatusTest.java | 5 +- .../gooddata/connector/IntegrationTest.java | 5 +- .../gooddata/connector/ProcessStatusTest.java | 5 +- .../connector/Zendesk4SettingsTest.java | 5 +- .../dataload/OutputStageServiceIT.java | 20 ++++---- .../dataload/OutputStageServiceTest.java | 29 +++++------- .../gooddata/dataload/OutputStageTest.java | 25 ++++------ .../processes/DataloadProcessTest.java | 11 ++--- .../processes/DataloadProcessesTest.java | 8 ++-- .../processes/ProcessExecutionDetailTest.java | 8 ++-- .../processes/ProcessExecutionTaskTest.java | 11 ++--- .../processes/ProcessExecutionTest.java | 14 +++--- .../dataload/processes/ProcessServiceIT.java | 13 +++-- .../processes/ScheduleExecutionTest.java | 18 ++++--- .../dataload/processes/ScheduleTest.java | 8 ++-- .../dataload/processes/SchedulesTest.java | 10 ++-- .../gooddata/dataset/DatasetLinksTest.java | 6 +-- .../gooddata/dataset/DatasetManifestTest.java | 9 ++-- .../gooddata/dataset/DatasetServiceIT.java | 28 ++++++----- .../com/gooddata/dataset/DatasetTest.java | 7 +-- .../com/gooddata/dataset/DatasetsTest.java | 6 +-- .../com/gooddata/dataset/MaqlDmlTest.java | 3 +- .../com/gooddata/dataset/PullTaskTest.java | 7 +-- .../com/gooddata/dataset/TaskStateTest.java | 9 ++-- .../dataset/UploadStatisticsTest.java | 7 ++- .../java/com/gooddata/dataset/UploadTest.java | 18 +++---- .../com/gooddata/dataset/UploadsInfoTest.java | 17 +++---- .../com/gooddata/dataset/UploadsTest.java | 16 +++---- .../featureflag/FeatureFlagServiceIT.java | 10 ++-- .../java/com/gooddata/gdc/AboutLinksTest.java | 6 +-- .../java/com/gooddata/gdc/AsyncTaskTest.java | 14 ++---- .../com/gooddata/gdc/ErrorStructureTest.java | 7 +-- .../java/com/gooddata/gdc/GdcErrorTest.java | 7 +-- src/test/java/com/gooddata/gdc/GdcTest.java | 7 +-- .../com/gooddata/gdc/LinkEntriesTest.java | 12 ++--- .../java/com/gooddata/gdc/RootLinksTest.java | 7 +-- .../java/com/gooddata/gdc/TaskStatusTest.java | 13 +++-- .../com/gooddata/gdc/UriResponseTest.java | 7 +-- .../gooddata/md/AttributeDisplayFormTest.java | 10 ++-- .../com/gooddata/md/AttributeElementTest.java | 14 ++---- .../gooddata/md/AttributeElementsTest.java | 16 +++---- .../com/gooddata/md/AttributeSortTest.java | 18 +++---- .../java/com/gooddata/md/AttributeTest.java | 14 ++---- src/test/java/com/gooddata/md/ColumnTest.java | 14 ++---- .../gooddata/md/DataLoadingColumnTest.java | 14 ++---- .../java/com/gooddata/md/DatasetTest.java | 14 +++--- .../java/com/gooddata/md/DimensionTest.java | 16 +++---- .../java/com/gooddata/md/DisplayFormTest.java | 7 +-- src/test/java/com/gooddata/md/EntryTest.java | 4 +- .../java/com/gooddata/md/ExpressionTest.java | 7 ++- src/test/java/com/gooddata/md/FactTest.java | 4 +- src/test/java/com/gooddata/md/KeyTest.java | 7 ++- src/test/java/com/gooddata/md/MetaTest.java | 4 +- .../com/gooddata/md/MetadataServiceIT.java | 15 +++--- src/test/java/com/gooddata/md/MetricTest.java | 22 ++++----- .../com/gooddata/md/NestedAttributeTest.java | 19 ++++---- src/test/java/com/gooddata/md/ObjTest.java | 6 +-- .../com/gooddata/md/ProjectDashboardTest.java | 11 ++--- src/test/java/com/gooddata/md/QueryTest.java | 6 +-- .../com/gooddata/md/ScheduledMailTest.java | 10 ++-- .../com/gooddata/md/TableDataLoadTest.java | 14 ++---- src/test/java/com/gooddata/md/TableTest.java | 14 ++---- .../md/maintenance/ExportImportServiceIT.java | 3 +- .../md/maintenance/PartialMdArtifactTest.java | 15 +++--- .../md/report/AttributeInGridTest.java | 11 ++--- .../report/GridElementDeserializerTest.java | 5 +- .../GridReportDefinitionContentTest.java | 7 ++- .../java/com/gooddata/md/report/GridTest.java | 13 +++-- .../gooddata/md/report/MetricElementTest.java | 7 +-- .../OneNumberReportDefinitionContentTest.java | 8 ++-- .../report/ReportDefinitionContentTest.java | 6 +-- .../md/report/ReportDefinitionTest.java | 9 ++-- .../com/gooddata/md/report/ReportTest.java | 8 ++-- .../com/gooddata/model/DiffRequestTest.java | 6 +-- .../com/gooddata/model/MaqlDdlLinksTest.java | 7 +-- .../java/com/gooddata/model/MaqlDdlTest.java | 4 +- .../com/gooddata/model/ModelDiffTest.java | 6 +-- .../com/gooddata/model/ModelServiceIT.java | 14 +++--- .../notification/NotificationServiceIT.java | 3 +- .../gooddata/project/ProjectServiceIT.java | 47 +++++++++---------- .../gooddata/project/ProjectTemplateTest.java | 8 ++-- .../project/ProjectTemplatesTest.java | 5 +- .../com/gooddata/project/ProjectTest.java | 17 +++---- .../ProjectValidationResultItemTest.java | 5 +- .../ProjectValidationResultParamTest.java | 3 +- .../project/ProjectValidationResultTest.java | 8 ++-- .../project/ProjectValidationResultsTest.java | 5 +- .../project/ProjectValidationTypeTest.java | 6 +-- .../project/ProjectValidationsTest.java | 5 +- .../java/com/gooddata/project/RoleTest.java | 6 +-- .../java/com/gooddata/project/RolesTest.java | 10 ++-- .../java/com/gooddata/project/UserTest.java | 10 ++-- .../java/com/gooddata/project/UsersTest.java | 7 +-- .../com/gooddata/report/ReportServiceIT.java | 12 +++-- .../util/BooleanDeserializerTest.java | 27 +++++------ .../util/BooleanIntegerSerializerTest.java | 12 ++--- .../util/BooleanStringSerializerTest.java | 12 ++--- .../gooddata/util/GDDateDeserializerTest.java | 9 ++-- .../gooddata/util/GDDateSerializerTest.java | 8 ++-- .../util/GDDateTimeDeserializerTest.java | 10 ++-- .../util/GDDateTimeSerializerTest.java | 8 ++-- .../util/ISODateTimeDeserializerTest.java | 10 ++-- .../util/ISODateTimeSerializerTest.java | 8 ++-- .../util/ResponseErrorHandlerTest.java | 4 +- .../gooddata/util/TagsDeserializerTest.java | 14 +++--- .../com/gooddata/util/TagsSerializerTest.java | 10 ++-- .../warehouse/WarehouseSchemaTest.java | 19 ++++---- .../warehouse/WarehouseServiceIT.java | 16 ++++--- .../gooddata/warehouse/WarehouseTaskTest.java | 16 ++----- .../com/gooddata/warehouse/WarehouseTest.java | 10 ++-- .../gooddata/warehouse/WarehouseUserTest.java | 8 ++-- 117 files changed, 509 insertions(+), 715 deletions(-) diff --git a/src/test/java/com/gooddata/AbstractGoodDataIT.java b/src/test/java/com/gooddata/AbstractGoodDataIT.java index 86e04563d..ed958d9a9 100644 --- a/src/test/java/com/gooddata/AbstractGoodDataIT.java +++ b/src/test/java/com/gooddata/AbstractGoodDataIT.java @@ -6,7 +6,6 @@ package com.gooddata; import com.gooddata.authentication.LoginPasswordAuthentication; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; @@ -16,7 +15,6 @@ public abstract class AbstractGoodDataIT { - protected static final ObjectMapper MAPPER = new ObjectMapper(); protected GoodData gd; @BeforeMethod diff --git a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java index c69afe096..c2f9fef3c 100644 --- a/src/test/java/com/gooddata/GoodDataRestExceptionTest.java +++ b/src/test/java/com/gooddata/GoodDataRestExceptionTest.java @@ -6,14 +6,12 @@ package com.gooddata; import com.gooddata.gdc.GdcError; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; -import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.MatcherAssert.assertThat; public class GoodDataRestExceptionTest { @Test @@ -69,8 +67,7 @@ public void shouldCreateInstanceWithNullStatusAndGdcError() throws Exception { @Test public void shouldCreateInstanceWithGdcError() throws Exception { - final InputStream inputStream = getClass().getResourceAsStream("/gdc/gdcError.json"); - final GdcError err = new ObjectMapper().readValue(inputStream, GdcError.class); + final GdcError err = readObjectFromResource("/gdc/gdcError.json", GdcError.class); final GoodDataRestException e = new GoodDataRestException(500, "a123", "message", err); assertThat(e.getMessage(), is("500: [requestId=REQ] MSG")); diff --git a/src/test/java/com/gooddata/account/AccountServiceIT.java b/src/test/java/com/gooddata/account/AccountServiceIT.java index af2912354..4caaee149 100644 --- a/src/test/java/com/gooddata/account/AccountServiceIT.java +++ b/src/test/java/com/gooddata/account/AccountServiceIT.java @@ -13,6 +13,7 @@ import java.io.IOException; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; @@ -33,8 +34,8 @@ public class AccountServiceIT extends AbstractGoodDataIT { @BeforeClass public void init() throws IOException { - account = MAPPER.readValue(readFromResource(ACCOUNT), Account.class); - createAccount = MAPPER.readValue(readFromResource(CREATE_ACCOUNT), Account.class); + account = readObjectFromResource(ACCOUNT, Account.class); + createAccount = readObjectFromResource(CREATE_ACCOUNT, Account.class); } @Test diff --git a/src/test/java/com/gooddata/account/AccountTest.java b/src/test/java/com/gooddata/account/AccountTest.java index d428990bb..a6439efd7 100644 --- a/src/test/java/com/gooddata/account/AccountTest.java +++ b/src/test/java/com/gooddata/account/AccountTest.java @@ -5,10 +5,10 @@ */ package com.gooddata.account; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -23,8 +23,7 @@ public class AccountTest { @SuppressWarnings("deprecation") @Test public void testDeserialize() throws Exception { - final Account account = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/account/account.json"), Account.class); + final Account account = readObjectFromResource("/account/account.json", Account.class); assertThat(account, is(notNullValue())); assertThat(account.getFirstName(), is(FIRST_NAME)); diff --git a/src/test/java/com/gooddata/collections/PagingTest.java b/src/test/java/com/gooddata/collections/PagingTest.java index 67bf1f0fd..888debed8 100644 --- a/src/test/java/com/gooddata/collections/PagingTest.java +++ b/src/test/java/com/gooddata/collections/PagingTest.java @@ -11,6 +11,7 @@ import java.io.InputStream; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -20,8 +21,7 @@ public class PagingTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/collections/paging.json"); - final Paging paging = new ObjectMapper().readValue(stream, Paging.class); + final Paging paging = readObjectFromResource("/collections/paging.json", Paging.class); assertThat(paging.getOffset(), is("0")); assertThat(paging.getNext(), notNullValue()); @@ -30,8 +30,7 @@ public void testDeserialization() throws Exception { @Test public void testDeserializationNullNext() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/collections/paging_no_next.json"); - final Paging paging = new ObjectMapper().readValue(stream, Paging.class); + final Paging paging = readObjectFromResource("/collections/paging_no_next.json", Paging.class); assertThat(paging.getOffset(), is("0")); assertThat(paging.getNext(), nullValue()); @@ -39,8 +38,7 @@ public void testDeserializationNullNext() throws Exception { @Test public void testDeserializationWithNextOnly() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/collections/paging_only_next.json"); - final Paging paging = new ObjectMapper().readValue(stream, Paging.class); + final Paging paging = readObjectFromResource("/collections/paging_only_next.json", Paging.class); assertThat(paging.getOffset(), is(nullValue())); assertThat(paging.getNext(), notNullValue()); diff --git a/src/test/java/com/gooddata/connector/ConnectorServiceIT.java b/src/test/java/com/gooddata/connector/ConnectorServiceIT.java index 117f75e33..1356ee806 100644 --- a/src/test/java/com/gooddata/connector/ConnectorServiceIT.java +++ b/src/test/java/com/gooddata/connector/ConnectorServiceIT.java @@ -28,7 +28,7 @@ public class ConnectorServiceIT extends AbstractGoodDataIT { @BeforeMethod public void setUp() throws Exception { - project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + project = readObjectFromResource("/project/project.json", Project.class); connectors = gd.getConnectorService(); } @@ -109,7 +109,7 @@ public void shouldExecuteProcess() throws Exception { .havingMethodEqualTo("POST") .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes") .respond() - .withBody(MAPPER.writeValueAsString(new UriResponse("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS"))); + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS"))); onRequest() .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS") .respond() @@ -128,7 +128,7 @@ public void shouldFailExecuteProcessPolling() throws Exception { .havingMethodEqualTo("POST") .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes") .respond() - .withBody(MAPPER.writeValueAsString(new UriResponse("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS"))); + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS"))); onRequest() .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS") .respond() @@ -143,7 +143,7 @@ public void shouldFailExecuteProcess() throws Exception { .havingMethodEqualTo("POST") .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes") .respond() - .withBody(MAPPER.writeValueAsString(new UriResponse("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS"))); + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS"))); onRequest() .havingPathEqualTo("/gdc/projects/PROJECT_ID/connectors/zendesk4/integration/processes/PROCESS") .respond() diff --git a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java index 95efece28..812c965b7 100644 --- a/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationProcessStatusTest.java @@ -5,7 +5,6 @@ */ package com.gooddata.connector; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; @@ -16,6 +15,7 @@ import static com.gooddata.connector.Status.Code.SYNCHRONIZED; import static com.gooddata.connector.Status.Code.UPLOADING; import static com.gooddata.connector.Status.Code.USER_ERROR; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; @@ -27,8 +27,7 @@ public class IntegrationProcessStatusTest { @Test public void testShouldDeserialize() throws Exception { - final IntegrationProcessStatus process = new ObjectMapper() - .readValue(getClass().getResource("/connector/process-status-embedded.json"), IntegrationProcessStatus.class); + final IntegrationProcessStatus process = readObjectFromResource("/connector/process-status-embedded.json", IntegrationProcessStatus.class); assertThat(process, is(notNullValue())); assertThat(process.getStarted(), is(new DateTime(2014, 5, 30, 7, 50, 15, DateTimeZone.UTC))); diff --git a/src/test/java/com/gooddata/connector/IntegrationTest.java b/src/test/java/com/gooddata/connector/IntegrationTest.java index 0fee2cfb9..198b06db4 100644 --- a/src/test/java/com/gooddata/connector/IntegrationTest.java +++ b/src/test/java/com/gooddata/connector/IntegrationTest.java @@ -5,10 +5,10 @@ */ package com.gooddata.connector; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -19,8 +19,7 @@ public class IntegrationTest { @Test public void shouldDeserialize() throws Exception { - final Integration integration = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/connector/integration.json"), Integration.class); + final Integration integration = readObjectFromResource("/connector/integration.json", Integration.class); assertThat(integration, is(notNullValue())); assertThat(integration.isActive(), is(true)); diff --git a/src/test/java/com/gooddata/connector/ProcessStatusTest.java b/src/test/java/com/gooddata/connector/ProcessStatusTest.java index 861d5495e..f68ed8e83 100644 --- a/src/test/java/com/gooddata/connector/ProcessStatusTest.java +++ b/src/test/java/com/gooddata/connector/ProcessStatusTest.java @@ -5,10 +5,10 @@ */ package com.gooddata.connector; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.connector.Status.Code.ERROR; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -17,8 +17,7 @@ public class ProcessStatusTest { @Test public void shouldDeserialize() throws Exception { - final ProcessStatus process = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/connector/process-status-error.json"), ProcessStatus.class); + final ProcessStatus process = readObjectFromResource("/connector/process-status-error.json", ProcessStatus.class); assertThat(process, is(notNullValue())); assertThat(process.getFinished(), is(notNullValue())); diff --git a/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java b/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java index 83cf5aef3..2ba04dbbd 100644 --- a/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java +++ b/src/test/java/com/gooddata/connector/Zendesk4SettingsTest.java @@ -5,12 +5,12 @@ */ package com.gooddata.connector; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; import static com.gooddata.connector.ConnectorType.ZENDESK4; import static com.gooddata.connector.Zendesk4Settings.Zendesk4Type.plus; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -26,8 +26,7 @@ public void shouldSerialize() throws Exception { @Test public void shouldDeserialize() throws Exception { - final Zendesk4Settings settings = new ObjectMapper() - .readValue(getClass().getResource("/connector/settings-zendesk4.json"), Zendesk4Settings.class); + final Zendesk4Settings settings = readObjectFromResource("/connector/settings-zendesk4.json", Zendesk4Settings.class); assertThat(settings, is(notNullValue())); assertThat(settings.getApiUrl(), is("https://foo.com")); diff --git a/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java b/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java index a6e593d31..52d63cc56 100644 --- a/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java +++ b/src/test/java/com/gooddata/dataload/OutputStageServiceIT.java @@ -5,7 +5,13 @@ */ package com.gooddata.dataload; +import com.gooddata.AbstractGoodDataIT; +import com.gooddata.project.Project; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static com.gooddata.util.ResourceUtils.readStringFromResource; import static net.jadler.Jadler.onRequest; import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals; @@ -16,15 +22,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.gooddata.AbstractGoodDataIT; - -import com.gooddata.project.Project; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import java.io.InputStream; - public class OutputStageServiceIT extends AbstractGoodDataIT { private static final String OUTPUT_STAGE_ALL_FIELDS = "/dataload/outputStageAllFields.json"; @@ -41,7 +38,7 @@ public class OutputStageServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUp() throws Exception { - outputStage = MAPPER.readValue(readFromResource(OUTPUT_STAGE_ALL_FIELDS), OutputStage.class); + outputStage = readObjectFromResource(OUTPUT_STAGE_ALL_FIELDS, OutputStage.class); project = mock(Project.class); when(project.getId()).thenReturn(PROJECT_ID); } @@ -78,8 +75,7 @@ public void shouldGetOutputStage() throws Exception { @Test public void shouldUpdateOutputStage() throws Exception { - final InputStream stream = getClass().getResourceAsStream(OUTPUT_STAGE); - final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + final OutputStage outputStage = readObjectFromResource(OUTPUT_STAGE, OutputStage.class); onRequest() .havingMethodEqualTo("PUT") diff --git a/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java b/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java index 64961660c..c5de8c24a 100644 --- a/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java +++ b/src/test/java/com/gooddata/dataload/OutputStageServiceTest.java @@ -5,19 +5,6 @@ */ package com.gooddata.dataload; -import static com.gooddata.util.ResourceUtils.readFromResource; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.core.Is.is; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.Matchers.any; -import static org.hamcrest.MatcherAssert.assertThat; - -import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.project.Project; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -28,9 +15,19 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -public class OutputStageServiceTest { +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; - private final ObjectMapper MAPPER = new ObjectMapper(); +public class OutputStageServiceTest { private static final String OUTPUT_STAGE = "/dataload/outputStage.json"; @@ -45,7 +42,7 @@ public class OutputStageServiceTest { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); outputStageService = new OutputStageService(restTemplate); - outputStage = MAPPER.readValue(readFromResource(OUTPUT_STAGE), OutputStage.class); + outputStage = readObjectFromResource(OUTPUT_STAGE, OutputStage.class); } @Test(expectedExceptions = IllegalArgumentException.class) diff --git a/src/test/java/com/gooddata/dataload/OutputStageTest.java b/src/test/java/com/gooddata/dataload/OutputStageTest.java index 6d9cf1cd8..bcdf938ad 100644 --- a/src/test/java/com/gooddata/dataload/OutputStageTest.java +++ b/src/test/java/com/gooddata/dataload/OutputStageTest.java @@ -5,20 +5,19 @@ */ package com.gooddata.dataload; +import org.testng.annotations.Test; + +import java.util.LinkedHashMap; +import java.util.Map; + import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; -import java.util.LinkedHashMap; -import java.util.Map; - public class OutputStageTest { private static final String SCHEMA_URI = "/gdc/datawarehouse/instances/instanceId/schemas/default"; @@ -36,8 +35,7 @@ public class OutputStageTest { @Test public void testDeserializationAllFields() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataload/outputStageAllFields.json"); - final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + final OutputStage outputStage = readObjectFromResource("/dataload/outputStageAllFields.json", OutputStage.class); assertThat(outputStage.getSchemaUri(), is(equalTo(SCHEMA_URI))); assertThat(outputStage.getClientId(), is(equalTo(CLIENT_ID))); @@ -53,8 +51,7 @@ public void testDeserializationAllFields() throws Exception { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataload/outputStage.json"); - final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + final OutputStage outputStage = readObjectFromResource("/dataload/outputStage.json", OutputStage.class); assertThat(outputStage.getSchemaUri(), is(nullValue())); assertThat(outputStage.getClientId(), is(nullValue())); @@ -69,8 +66,7 @@ public void testDeserialization() throws Exception { @Test public void testSerializationAfterDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataload/outputStage.json"); - final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + final OutputStage outputStage = readObjectFromResource("/dataload/outputStage.json", OutputStage.class); outputStage.setSchemaUri(SCHEMA_URI); outputStage.setClientId(CLIENT_ID); @@ -80,8 +76,7 @@ public void testSerializationAfterDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataload/outputStage.json"); - final OutputStage outputStage = new ObjectMapper().readValue(stream, OutputStage.class); + final OutputStage outputStage = readObjectFromResource("/dataload/outputStage.json", OutputStage.class); assertThat(outputStage.toString(), matchesPattern(OutputStage.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java index cac3617dc..b633379e5 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessTest.java @@ -5,24 +5,23 @@ */ package com.gooddata.dataload.processes; +import org.testng.annotations.Test; + import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - public class DataloadProcessTest { @SuppressWarnings("deprecation") @Test public void testDeserialization() throws Exception { - final DataloadProcess process = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/dataload/processes/process.json"), DataloadProcess.class); + final DataloadProcess process = readObjectFromResource("/dataload/processes/process.json", DataloadProcess.class); assertThat(process, is(notNullValue())); assertThat(process.getName(), is("testProcess")); diff --git a/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java b/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java index 0aabe61c4..3fd5dccad 100644 --- a/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java +++ b/src/test/java/com/gooddata/dataload/processes/DataloadProcessesTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.dataload.processes; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -18,8 +18,7 @@ public class DataloadProcessesTest { @Test public void testDeserialization() throws Exception { - final DataloadProcesses processes = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/dataload/processes/processes.json"), DataloadProcesses.class); + final DataloadProcesses processes = readObjectFromResource("/dataload/processes/processes.json", DataloadProcesses.class); assertThat(processes, is(notNullValue())); assertThat(processes.getItems(), hasSize(1)); @@ -27,8 +26,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final DataloadProcesses processes = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/dataload/processes/processes.json"), DataloadProcesses.class); + final DataloadProcesses processes = readObjectFromResource("/dataload/processes/processes.json", DataloadProcesses.class); assertThat(processes.toString(), matchesPattern(DataloadProcesses.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java index 467ff2782..9d0635567 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionDetailTest.java @@ -5,11 +5,11 @@ */ package com.gooddata.dataload.processes; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.core.Is.is; @@ -17,11 +17,9 @@ public class ProcessExecutionDetailTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testDeserialization() throws Exception { - final ProcessExecutionDetail executionDetail = MAPPER.readValue(getClass().getResourceAsStream("/dataload/processes/executionDetail.json"), + final ProcessExecutionDetail executionDetail = readObjectFromResource("/dataload/processes/executionDetail.json", ProcessExecutionDetail.class); assertThat(executionDetail, notNullValue()); assertThat(executionDetail.getStatus(), is("ERROR")); @@ -40,7 +38,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final ProcessExecutionDetail executionDetail = MAPPER.readValue(getClass().getResourceAsStream("/dataload/processes/executionDetail.json"), + final ProcessExecutionDetail executionDetail = readObjectFromResource("/dataload/processes/executionDetail.json", ProcessExecutionDetail.class); assertThat(executionDetail.toString(), matchesPattern(ProcessExecutionDetail.class.getSimpleName() + "\\[.*\\]")); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java index 9f4a38576..24221f8e9 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTaskTest.java @@ -5,19 +5,18 @@ */ package com.gooddata.dataload.processes; -import static org.hamcrest.core.Is.is; -import static org.hamcrest.MatcherAssert.*; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + public class ProcessExecutionTaskTest { @SuppressWarnings("deprecation") @Test public void testDeserialize() throws Exception { - final ProcessExecutionTask task = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/dataload/processes/executionTask.json"), ProcessExecutionTask.class); + final ProcessExecutionTask task = readObjectFromResource("/dataload/processes/executionTask.json", ProcessExecutionTask.class); assertThat(task.getPollLink(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId")); assertThat(task.getPollUri(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId")); assertThat(task.getDetailLink(), is("/gdc/projects/PROJECT_ID/dataload/processes/processId/executions/executionId/detail")); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java index c26bc28fd..091df03a5 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessExecutionTest.java @@ -5,16 +5,16 @@ */ package com.gooddata.dataload.processes; -import static com.gooddata.JsonMatchers.serializesToJson; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.text.MatchesPattern.matchesPattern; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.util.HashMap; import java.util.Map; +import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.text.MatchesPattern.matchesPattern; + public class ProcessExecutionTest { @Test @@ -26,7 +26,7 @@ public void testSerialization() throws Exception { hidden.put("HIDDEN_PARAM1", "SENSITIVE_VALUE1"); hidden.put("HIDDEN_PARAM2", "SENSITIVE_VALUE2"); - final DataloadProcess process = new ObjectMapper().readValue(getClass().getResourceAsStream("/dataload/processes/process.json"), DataloadProcess.class); + final DataloadProcess process = readObjectFromResource("/dataload/processes/process.json", DataloadProcess.class); final ProcessExecution execution = new ProcessExecution(process, "test.groovy", params, hidden); assertThat(execution, serializesToJson("/dataload/processes/execution.json")); @@ -34,7 +34,7 @@ public void testSerialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final DataloadProcess process = new ObjectMapper().readValue(getClass().getResourceAsStream("/dataload/processes/process.json"), DataloadProcess.class); + final DataloadProcess process = readObjectFromResource("/dataload/processes/process.json", DataloadProcess.class); final ProcessExecution execution = new ProcessExecution(process, "test.groovy"); assertThat(execution.toString(), matchesPattern(ProcessExecution.class.getSimpleName() + "\\[.*\\]")); diff --git a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java index 68b09fc4b..97be55ff6 100644 --- a/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java +++ b/src/test/java/com/gooddata/dataload/processes/ProcessServiceIT.java @@ -9,7 +9,6 @@ import com.gooddata.FutureResult; import com.gooddata.collections.PageableList; import com.gooddata.project.Project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -18,6 +17,7 @@ import java.util.Collection; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.jadler.Jadler.onRequest; import static net.javacrumbs.jsonunit.JsonAssert.assertJsonEquals; import static org.hamcrest.MatcherAssert.assertThat; @@ -30,7 +30,6 @@ public class ProcessServiceIT extends AbstractGoodDataIT { - private static final ObjectMapper MAPPER = new ObjectMapper(); private static final String PROCESSES_PATH = DataloadProcesses.TEMPLATE.expand("PROJECT_ID").toString(); private static final String PROCESS_ID = "processId"; private static final String PROCESS_PATH = DataloadProcess.TEMPLATE.expand("PROJECT_ID", PROCESS_ID).toString(); @@ -56,9 +55,9 @@ public class ProcessServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUp() throws Exception { - project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); - process = MAPPER.readValue(readFromResource("/dataload/processes/process.json"), DataloadProcess.class); - schedule = MAPPER.readValue(readFromResource("/dataload/processes/schedule.json"), Schedule.class); + project = readObjectFromResource("/project/project.json", Project.class); + process = readObjectFromResource("/dataload/processes/process.json", DataloadProcess.class); + schedule = readObjectFromResource("/dataload/processes/schedule.json", Schedule.class); file = File.createTempFile("test", ".groovy"); } @@ -169,7 +168,7 @@ public void shouldGetExecutionLog() throws Exception { .withStatus(200); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - final ProcessExecutionDetail executionDetail = MAPPER.readValue(readFromResource("/dataload/processes/executionDetail.json"), ProcessExecutionDetail.class); + final ProcessExecutionDetail executionDetail = readObjectFromResource("/dataload/processes/executionDetail.json", ProcessExecutionDetail.class); gd.getProcessService().getExecutionLog(executionDetail, outputStream); assertThat(outputStream.toString(), is(log)); } @@ -200,7 +199,7 @@ public void shouldExecuteProcess() throws Exception { final FutureResult result = gd.getProcessService().executeProcess(new ProcessExecution(process, "test.groovy")); final ProcessExecutionDetail executionDetail = result.get(); - assertJsonEquals(MAPPER.readValue(readFromResource("/dataload/processes/executionDetail-success.json"), ProcessExecutionDetail.class), executionDetail); + assertJsonEquals(readObjectFromResource("/dataload/processes/executionDetail-success.json", ProcessExecutionDetail.class), executionDetail); } @Test(expectedExceptions = ProcessExecutionException.class) diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleExecutionTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleExecutionTest.java index 0f935a7c9..7b449cddb 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleExecutionTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleExecutionTest.java @@ -6,20 +6,19 @@ package com.gooddata.dataload.processes; -import static com.gooddata.JsonMatchers.serializesToJson; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.core.Is.is; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.HashMap; +import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.core.Is.is; + public class ScheduleExecutionTest { @Test @@ -31,8 +30,7 @@ public void testEmptyScheduleExecutionSerialization() throws Exception { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataload/processes/scheduleExecution.json"); - final ScheduleExecution scheduleExecution = new ObjectMapper().readValue(stream, ScheduleExecution.class); + final ScheduleExecution scheduleExecution = readObjectFromResource("/dataload/processes/scheduleExecution.json", ScheduleExecution.class); assertThat(scheduleExecution, notNullValue()); assertThat(scheduleExecution.getLinks(), is(equalTo(new HashMap() {{ diff --git a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java index 00e885592..46825a957 100644 --- a/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java +++ b/src/test/java/com/gooddata/dataload/processes/ScheduleTest.java @@ -5,7 +5,6 @@ */ package com.gooddata.dataload.processes; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.Duration; @@ -19,6 +18,7 @@ import java.util.Collections; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; @@ -53,8 +53,7 @@ public void setUp() throws Exception { @Test public void testDeserialization() throws Exception { - final Schedule schedule = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/dataload/processes/schedule.json"), Schedule.class); + final Schedule schedule = readObjectFromResource("/dataload/processes/schedule.json", Schedule.class); assertThat(schedule, is(notNullValue())); assertThat(schedule.getId(), is("SCHEDULE_ID")); @@ -74,8 +73,7 @@ public void testDeserialization() throws Exception { @Test public void testTriggeredScheduleDeserialization() throws Exception { - final Schedule schedule = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/dataload/processes/schedule-triggered.json"), Schedule.class); + final Schedule schedule = readObjectFromResource("/dataload/processes/schedule-triggered.json", Schedule.class); assertThat(schedule, is(notNullValue())); assertThat(schedule.getId(), is("SCHEDULE_ID")); diff --git a/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java b/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java index 376973542..cc11af24a 100644 --- a/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java +++ b/src/test/java/com/gooddata/dataload/processes/SchedulesTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.dataload.processes; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; @@ -20,8 +18,7 @@ public class SchedulesTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataload/processes/schedules.json"); - final Schedules schedules = new ObjectMapper().readValue(stream, Schedules.class); + final Schedules schedules = readObjectFromResource("/dataload/processes/schedules.json", Schedules.class); assertThat(schedules, notNullValue()); assertThat(schedules, hasSize(1)); @@ -32,8 +29,7 @@ public void testDeserialization() throws Exception { @Test public void testDeserializationPaging() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataload/processes/schedules_page1.json"); - final Schedules schedules = new ObjectMapper().readValue(stream, Schedules.class); + final Schedules schedules = readObjectFromResource("/dataload/processes/schedules_page1.json", Schedules.class); assertThat(schedules, notNullValue()); assertThat(schedules, hasSize(1)); diff --git a/src/test/java/com/gooddata/dataset/DatasetLinksTest.java b/src/test/java/com/gooddata/dataset/DatasetLinksTest.java index a7124ee1b..67d543796 100644 --- a/src/test/java/com/gooddata/dataset/DatasetLinksTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetLinksTest.java @@ -5,13 +5,12 @@ */ package com.gooddata.dataset; -import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.gdc.AboutLinks; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collection; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -21,8 +20,7 @@ public class DatasetLinksTest { @Test public void deserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/datasetLinks.json"); - final DatasetLinks datasetLinks = new ObjectMapper().readValue(stream, DatasetLinks.class); + final DatasetLinks datasetLinks = readObjectFromResource("/dataset/datasetLinks.json", DatasetLinks.class); assertThat(datasetLinks, is(notNullValue())); assertThat(datasetLinks.getCategory(), is("singleloadinterface")); assertThat(datasetLinks.getInstance(), is("MD::LDM::SingleLoadInterface")); diff --git a/src/test/java/com/gooddata/dataset/DatasetManifestTest.java b/src/test/java/com/gooddata/dataset/DatasetManifestTest.java index c95012832..05e93240b 100644 --- a/src/test/java/com/gooddata/dataset/DatasetManifestTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetManifestTest.java @@ -5,26 +5,23 @@ */ package com.gooddata.dataset; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.text.MatchesPattern.matchesPattern; public class DatasetManifestTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/datasetManifest.json"); - final DatasetManifest manifest = new ObjectMapper().readValue(stream, DatasetManifest.class); + final DatasetManifest manifest = readObjectFromResource("/dataset/datasetManifest.json", DatasetManifest.class); assertThat(manifest.getDataSet(), is("dataset.person")); assertThat(manifest.getFile(), is("dataset.person.csv")); diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java index cf5f5edb5..471cb9434 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceIT.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceIT.java @@ -19,7 +19,9 @@ import java.io.InputStream; import java.util.Collection; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; @@ -35,7 +37,7 @@ public class DatasetServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUpClass() throws Exception { - project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + project = readObjectFromResource("/project/project.json", Project.class); } @BeforeMethod @@ -74,7 +76,7 @@ public void shouldLoadDataset() throws Exception { .withStatus(200) .withBody(readFromResource("/dataset/pullTaskStatusOk.json")); - final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); + final DatasetManifest manifest = readObjectFromResource("/dataset/datasetManifest.json", DatasetManifest.class); gd.getDatasetService().loadDataset(project, manifest, new ByteArrayInputStream(new byte[]{})).get(); } @@ -89,7 +91,7 @@ public void shouldLoadDatasets() throws Exception { .withStatus(200) .withBody(readFromResource("/dataset/pullTaskStatusOk.json")); - final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); + final DatasetManifest manifest = readObjectFromResource("/dataset/datasetManifest.json", DatasetManifest.class); final InputStream source = new ByteArrayInputStream(new byte[]{}); manifest.setSource(source); @@ -104,7 +106,7 @@ public void shouldFailPolling() throws Exception { .respond() .withStatus(400); - final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); + final DatasetManifest manifest = readObjectFromResource("/dataset/datasetManifest.json", DatasetManifest.class); gd.getDatasetService().loadDataset(project, manifest, new ByteArrayInputStream(new byte[]{})).get(); } @@ -115,7 +117,7 @@ public void shouldFailLoading() throws Exception { .respond() .withStatus(200) .withBody(readFromResource("/dataset/pullTaskStatusError.json")); - final DatasetManifest manifest = MAPPER.readValue(readFromResource("/dataset/datasetManifest.json"), DatasetManifest.class); + final DatasetManifest manifest = readObjectFromResource("/dataset/datasetManifest.json", DatasetManifest.class); try { gd.getDatasetService().loadDataset(project, manifest, new ByteArrayInputStream(new byte[]{})).get(); fail("Exception should be thrown"); @@ -181,10 +183,10 @@ public void shouldOptimizeSliHash() throws Exception { .havingPathEqualTo(STATUS_URI) .respond() .withStatus(202) - .withBody(MAPPER.writeValueAsString(new TaskStatus("RUNNING", STATUS_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskStatus("RUNNING", STATUS_URI))) .thenRespond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(new TaskStatus("OK", STATUS_URI))); + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskStatus("OK", STATUS_URI))); gd.getDatasetService().optimizeSliHash(project).get(); } @@ -202,10 +204,10 @@ public void shouldFailOptimizeSliHash() throws Exception { .havingPathEqualTo(STATUS_URI) .respond() .withStatus(202) - .withBody(MAPPER.writeValueAsString(new TaskStatus("RUNNING", STATUS_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskStatus("RUNNING", STATUS_URI))) .thenRespond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(new TaskStatus("ERROR", STATUS_URI))); + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskStatus("ERROR", STATUS_URI))); gd.getDatasetService().optimizeSliHash(project).get(); } @@ -223,10 +225,10 @@ public void shouldUpdateProjectData() throws IOException { .havingPathEqualTo(STATUS_URI) .respond() .withStatus(200) // REST API returns HTTP 200 when task is in RUNNING state :( - .withBody(MAPPER.writeValueAsString(new TaskState("RUNNING", STATUS_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskState("RUNNING", STATUS_URI))) .thenRespond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(new TaskState("OK", STATUS_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskState("OK", STATUS_URI))) ; gd.getDatasetService().updateProjectData(project, DML_MAQL).get(); @@ -263,10 +265,10 @@ public void shouldFailUpdateProjectData() throws IOException { .havingPathEqualTo(STATUS_URI) .respond() .withStatus(202) - .withBody(MAPPER.writeValueAsString(new TaskState("RUNNING", STATUS_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskState("RUNNING", STATUS_URI))) .thenRespond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(new TaskState("ERROR", STATUS_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskState("ERROR", STATUS_URI))) ; gd.getDatasetService().updateProjectData(project, DML_MAQL).get(); diff --git a/src/test/java/com/gooddata/dataset/DatasetTest.java b/src/test/java/com/gooddata/dataset/DatasetTest.java index 53e132a2e..e5279cdff 100644 --- a/src/test/java/com/gooddata/dataset/DatasetTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.dataset; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -19,8 +17,7 @@ public class DatasetTest { @SuppressWarnings("deprecation") @Test public void deserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/dataset.json"); - final Dataset dataset = new ObjectMapper().readValue(stream, Dataset.class); + final Dataset dataset = readObjectFromResource("/dataset/dataset.json", Dataset.class); assertThat(dataset, is(notNullValue())); assertThat(dataset.getIdentifier(), is("dataset.person")); diff --git a/src/test/java/com/gooddata/dataset/DatasetsTest.java b/src/test/java/com/gooddata/dataset/DatasetsTest.java index 1e5a916f4..1e88dc817 100644 --- a/src/test/java/com/gooddata/dataset/DatasetsTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetsTest.java @@ -5,13 +5,12 @@ */ package com.gooddata.dataset; -import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.gdc.AboutLinks.Link; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collection; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -22,8 +21,7 @@ public class DatasetsTest { @SuppressWarnings("deprecation") @Test public void deserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/datasetLinks.json"); - final Datasets datasets = new ObjectMapper().readValue(stream, Datasets.class); + final Datasets datasets = readObjectFromResource("/dataset/datasetLinks.json", Datasets.class); assertThat(datasets, is(notNullValue())); assertThat(datasets.getCategory(), is("singleloadinterface")); assertThat(datasets.getInstance(), is("MD::LDM::SingleLoadInterface")); diff --git a/src/test/java/com/gooddata/dataset/MaqlDmlTest.java b/src/test/java/com/gooddata/dataset/MaqlDmlTest.java index b9a2c1f10..52eb18b07 100644 --- a/src/test/java/com/gooddata/dataset/MaqlDmlTest.java +++ b/src/test/java/com/gooddata/dataset/MaqlDmlTest.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -17,7 +18,7 @@ public class MaqlDmlTest { @Test public void testSerialization() throws Exception { final String json = IOUtils.toString(getClass().getResourceAsStream("/dataset/maqlDml.json"), "UTF-8"); - assertThat(new ObjectMapper().writeValueAsString(new MaqlDml("maqlddl")), + assertThat(OBJECT_MAPPER.writeValueAsString(new MaqlDml("maqlddl")), is(json)); } } diff --git a/src/test/java/com/gooddata/dataset/PullTaskTest.java b/src/test/java/com/gooddata/dataset/PullTaskTest.java index 7412daf9a..b952f1cc3 100644 --- a/src/test/java/com/gooddata/dataset/PullTaskTest.java +++ b/src/test/java/com/gooddata/dataset/PullTaskTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.dataset; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -17,8 +15,7 @@ public class PullTaskTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/pullTask.json"); - final PullTask task = new ObjectMapper().readValue(stream, PullTask.class); + final PullTask task = readObjectFromResource("/dataset/pullTask.json", PullTask.class); assertThat(task.getPollUri(), is("/gdc/md/PROJECT/tasks/task/ID/status")); } diff --git a/src/test/java/com/gooddata/dataset/TaskStateTest.java b/src/test/java/com/gooddata/dataset/TaskStateTest.java index 1927c9344..ada3b06ea 100644 --- a/src/test/java/com/gooddata/dataset/TaskStateTest.java +++ b/src/test/java/com/gooddata/dataset/TaskStateTest.java @@ -5,12 +5,11 @@ */ package com.gooddata.dataset; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.IOException; -import java.io.InputStream; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.text.MatchesPattern.matchesPattern; @@ -19,16 +18,14 @@ public class TaskStateTest { @Test public void testDeserialize() throws IOException { - final InputStream stream = getClass().getResourceAsStream("/dataset/taskStateOK.json"); - TaskState taskState = new ObjectMapper().readValue(stream, TaskState.class); + TaskState taskState = readObjectFromResource("/dataset/taskStateOK.json", TaskState.class); assertThat(taskState.getStatus(), is("OK")); assertThat(taskState.getMessage(), is("ok message")); } @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/taskStateOK.json"); - TaskState taskState = new ObjectMapper().readValue(stream, TaskState.class); + TaskState taskState = readObjectFromResource("/dataset/taskStateOK.json", TaskState.class); assertThat(taskState.toString(), matchesPattern(TaskState.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java index f3a2fedfa..9249af785 100644 --- a/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadStatisticsTest.java @@ -5,6 +5,7 @@ */ package com.gooddata.dataset; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -19,8 +20,7 @@ public class UploadStatisticsTest { @Test public void shouldDeserialize() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-uploads-info.json"); - final UploadStatistics uploadStatistics = new ObjectMapper().readValue(input, UploadStatistics.class); + final UploadStatistics uploadStatistics = readObjectFromResource("/dataset/uploads/data-uploads-info.json", UploadStatistics.class); assertThat(uploadStatistics, notNullValue()); @@ -32,8 +32,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-uploads-info.json"); - final UploadStatistics uploadStatistics = new ObjectMapper().readValue(input, UploadStatistics.class); + final UploadStatistics uploadStatistics = readObjectFromResource("/dataset/uploads/data-uploads-info.json", UploadStatistics.class); assertThat(uploadStatistics.toString(), matchesPattern(UploadStatistics.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/dataset/UploadTest.java b/src/test/java/com/gooddata/dataset/UploadTest.java index 1273b803a..4c2aa7b0a 100644 --- a/src/test/java/com/gooddata/dataset/UploadTest.java +++ b/src/test/java/com/gooddata/dataset/UploadTest.java @@ -5,25 +5,22 @@ */ package com.gooddata.dataset; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.closeTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.testng.annotations.Test; - -import java.io.InputStream; - public class UploadTest { @Test public void shouldDeserialize() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/upload.json"); - final Upload upload = new ObjectMapper().readValue(input, Upload.class); + final Upload upload = readObjectFromResource("/dataset/uploads/upload.json", Upload.class); assertThat(upload, notNullValue()); assertThat(upload.getMessage(), is("some upload message")); @@ -38,8 +35,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/upload.json"); - final Upload upload = new ObjectMapper().readValue(input, Upload.class); + final Upload upload = readObjectFromResource("/dataset/uploads/upload.json", Upload.class); assertThat(upload.toString(), matchesPattern(Upload.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java index ca7c2fead..a84c9d0e8 100644 --- a/src/test/java/com/gooddata/dataset/UploadsInfoTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsInfoTest.java @@ -5,23 +5,21 @@ */ package com.gooddata.dataset; +import org.testng.annotations.Test; + +import java.util.Collections; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; -import java.util.Collections; - public class UploadsInfoTest { @Test public void shouldDeserialize() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-sets.json"); - final UploadsInfo uploadsInfo = new ObjectMapper().readValue(input, UploadsInfo.class); + final UploadsInfo uploadsInfo = readObjectFromResource("/dataset/uploads/data-sets.json", UploadsInfo.class); assertThat(uploadsInfo, notNullValue()); @@ -40,8 +38,7 @@ public void getDatasetUploadInfoFails() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/data-sets.json"); - final UploadsInfo uploadsInfo = new ObjectMapper().readValue(input, UploadsInfo.class); + final UploadsInfo uploadsInfo = readObjectFromResource("/dataset/uploads/data-sets.json", UploadsInfo.class); assertThat(uploadsInfo.toString(), matchesPattern(UploadsInfo.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/dataset/UploadsTest.java b/src/test/java/com/gooddata/dataset/UploadsTest.java index 0b1044b8f..e2ad69db5 100644 --- a/src/test/java/com/gooddata/dataset/UploadsTest.java +++ b/src/test/java/com/gooddata/dataset/UploadsTest.java @@ -5,24 +5,21 @@ */ package com.gooddata.dataset; +import org.hamcrest.Matchers; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.hamcrest.Matchers; -import org.testng.annotations.Test; - -import java.io.InputStream; - public class UploadsTest { @Test public void shouldDeserialize() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/uploads.json"); - final Uploads uploads = new ObjectMapper().readValue(input, Uploads.class); + final Uploads uploads = readObjectFromResource("/dataset/uploads/uploads.json", Uploads.class); assertThat(uploads, notNullValue()); assertThat(uploads.items(), not(Matchers.empty())); @@ -31,8 +28,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream input = getClass().getResourceAsStream("/dataset/uploads/uploads.json"); - final Uploads uploads = new ObjectMapper().readValue(input, Uploads.class); + final Uploads uploads = readObjectFromResource("/dataset/uploads/uploads.json", Uploads.class); assertThat(uploads.toString(), matchesPattern(Uploads.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java index 4574f943b..a1486f7cf 100644 --- a/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java +++ b/src/test/java/com/gooddata/featureflag/FeatureFlagServiceIT.java @@ -12,7 +12,7 @@ import static com.gooddata.featureflag.ProjectFeatureFlag.PROJECT_FEATURE_FLAG_TEMPLATE; import static com.gooddata.featureflag.ProjectFeatureFlags.PROJECT_FEATURE_FLAGS_TEMPLATE; -import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static com.gooddata.util.ResourceUtils.readStringFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; @@ -35,7 +35,7 @@ public class FeatureFlagServiceIT extends AbstractGoodDataIT { @BeforeMethod public void setUp() throws Exception { service = gd.getFeatureFlagService(); - project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + project = readObjectFromResource("/project/project.json", Project.class); } @Test @@ -126,8 +126,7 @@ public void updateProjectFeatureFlagShouldUpdateAndReturnUpdatedProjectFeatureFl .withBody(readStringFromResource("/featureflag/projectFeatureFlag.json")) .withStatus(200); - final ProjectFeatureFlag flag = MAPPER - .readValue(readFromResource("/featureflag/projectFeatureFlag.json"), ProjectFeatureFlag.class); + final ProjectFeatureFlag flag = readObjectFromResource("/featureflag/projectFeatureFlag.json", ProjectFeatureFlag.class); final ProjectFeatureFlag featureFlag = service.updateProjectFeatureFlag(flag); assertThat(featureFlag, is(notNullValue())); @@ -143,8 +142,7 @@ public void deleteProjectFeatureFlagShouldRemoveIt() throws Exception { .respond() .withStatus(200); - final ProjectFeatureFlag flag = MAPPER - .readValue(readFromResource("/featureflag/projectFeatureFlag.json"), ProjectFeatureFlag.class); + final ProjectFeatureFlag flag = readObjectFromResource("/featureflag/projectFeatureFlag.json", ProjectFeatureFlag.class); service.deleteProjectFeatureFlag(flag); } diff --git a/src/test/java/com/gooddata/gdc/AboutLinksTest.java b/src/test/java/com/gooddata/gdc/AboutLinksTest.java index efe9a0955..fa28f0415 100644 --- a/src/test/java/com/gooddata/gdc/AboutLinksTest.java +++ b/src/test/java/com/gooddata/gdc/AboutLinksTest.java @@ -5,12 +5,11 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collection; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -20,8 +19,7 @@ public class AboutLinksTest { @Test public void deserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/dataset/datasetLinks.json"); - final AboutLinks aboutLinks = new ObjectMapper().readValue(stream, AboutLinks.class); + final AboutLinks aboutLinks = readObjectFromResource("/dataset/datasetLinks.json", AboutLinks.class); assertThat(aboutLinks, is(notNullValue())); assertThat(aboutLinks.getCategory(), is("singleloadinterface")); assertThat(aboutLinks.getInstance(), is("MD::LDM::SingleLoadInterface")); diff --git a/src/test/java/com/gooddata/gdc/AsyncTaskTest.java b/src/test/java/com/gooddata/gdc/AsyncTaskTest.java index 2e6275357..ae6fcd46f 100644 --- a/src/test/java/com/gooddata/gdc/AsyncTaskTest.java +++ b/src/test/java/com/gooddata/gdc/AsyncTaskTest.java @@ -5,30 +5,26 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class AsyncTaskTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testDeserialization() throws Exception { - final InputStream is = getClass().getResourceAsStream("/gdc/asyncTask.json"); - final AsyncTask asyncTask = MAPPER.readValue(is, AsyncTask.class); + final AsyncTask asyncTask = readObjectFromResource("/gdc/asyncTask.json", AsyncTask.class); assertThat(asyncTask.getUri(), is("POLL-URI")); } @Test public void testSerialization() throws Exception { - final String json = MAPPER.writeValueAsString(new AsyncTask("foo")); - final AsyncTask asyncTask = MAPPER.readValue(json, AsyncTask.class); + final String json = OBJECT_MAPPER.writeValueAsString(new AsyncTask("foo")); + final AsyncTask asyncTask = OBJECT_MAPPER.readValue(json, AsyncTask.class); assertThat(asyncTask.getUri(), is("foo")); } diff --git a/src/test/java/com/gooddata/gdc/ErrorStructureTest.java b/src/test/java/com/gooddata/gdc/ErrorStructureTest.java index 857b6c607..825ac8df0 100644 --- a/src/test/java/com/gooddata/gdc/ErrorStructureTest.java +++ b/src/test/java/com/gooddata/gdc/ErrorStructureTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -18,8 +16,7 @@ public class ErrorStructureTest { @Test public void testDeserialization() throws Exception { - final InputStream inputStream = getClass().getResourceAsStream("/gdc/errorStructure.json"); - final ErrorStructure errStructure = new ObjectMapper().readValue(inputStream, ErrorStructure.class); + final ErrorStructure errStructure = readObjectFromResource("/gdc/errorStructure.json", ErrorStructure.class); assertThat(errStructure, is(notNullValue())); assertThat(errStructure.getErrorClass(), is("CLASS")); diff --git a/src/test/java/com/gooddata/gdc/GdcErrorTest.java b/src/test/java/com/gooddata/gdc/GdcErrorTest.java index fed25c0e4..4da0420ca 100644 --- a/src/test/java/com/gooddata/gdc/GdcErrorTest.java +++ b/src/test/java/com/gooddata/gdc/GdcErrorTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -18,8 +16,7 @@ public class GdcErrorTest { @Test public void testDeserialization() throws Exception { - final InputStream inputStream = getClass().getResourceAsStream("/gdc/gdcError.json"); - final GdcError err = new ObjectMapper().readValue(inputStream, GdcError.class); + final GdcError err = readObjectFromResource("/gdc/gdcError.json", GdcError.class); assertThat(err, is(notNullValue())); assertThat(err.getErrorClass(), is("CLASS")); diff --git a/src/test/java/com/gooddata/gdc/GdcTest.java b/src/test/java/com/gooddata/gdc/GdcTest.java index 27283571e..70cc59f35 100644 --- a/src/test/java/com/gooddata/gdc/GdcTest.java +++ b/src/test/java/com/gooddata/gdc/GdcTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -19,8 +17,7 @@ public class GdcTest { @SuppressWarnings("deprecation") @Test public void deserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/gdc/gdc.json"); - final Gdc gdc = new ObjectMapper().readValue(stream, Gdc.class); + final Gdc gdc = readObjectFromResource("/gdc/gdc.json", Gdc.class); assertThat(gdc, is(notNullValue())); assertThat(gdc.getHomeLink(), is("/gdc/")); diff --git a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java index b7724377c..8218e8b7b 100644 --- a/src/test/java/com/gooddata/gdc/LinkEntriesTest.java +++ b/src/test/java/com/gooddata/gdc/LinkEntriesTest.java @@ -5,15 +5,13 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.text.MatchesPattern.matchesPattern; public class LinkEntriesTest { @@ -21,8 +19,7 @@ public class LinkEntriesTest { @SuppressWarnings("deprecation") @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/gdc/linkEntries.json"); - final LinkEntries linkEntries = new ObjectMapper().readValue(stream, LinkEntries.class); + final LinkEntries linkEntries = readObjectFromResource("/gdc/linkEntries.json", LinkEntries.class); assertThat(linkEntries, is(notNullValue())); assertThat(linkEntries.getEntries(), hasSize(1)); @@ -34,8 +31,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/gdc/linkEntries.json"); - final LinkEntries linkEntries = new ObjectMapper().readValue(stream, LinkEntries.class); + final LinkEntries linkEntries = readObjectFromResource("/gdc/linkEntries.json", LinkEntries.class); assertThat(linkEntries.toString(), matchesPattern(LinkEntries.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/gdc/RootLinksTest.java b/src/test/java/com/gooddata/gdc/RootLinksTest.java index 0e26fb683..2f145dd4f 100644 --- a/src/test/java/com/gooddata/gdc/RootLinksTest.java +++ b/src/test/java/com/gooddata/gdc/RootLinksTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -19,8 +17,7 @@ public class RootLinksTest { @SuppressWarnings("deprecation") @Test public void deserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/gdc/gdc.json"); - final RootLinks rootLinks = new ObjectMapper().readValue(stream, RootLinks.class); + final RootLinks rootLinks = readObjectFromResource("/gdc/gdc.json", RootLinks.class); assertThat(rootLinks, is(notNullValue())); assertThat(rootLinks.getHomeLink(), is("/gdc/")); diff --git a/src/test/java/com/gooddata/gdc/TaskStatusTest.java b/src/test/java/com/gooddata/gdc/TaskStatusTest.java index e2d1da35e..9c093a771 100644 --- a/src/test/java/com/gooddata/gdc/TaskStatusTest.java +++ b/src/test/java/com/gooddata/gdc/TaskStatusTest.java @@ -5,26 +5,25 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.Matchers.*; import static org.hamcrest.MatcherAssert.*; public class TaskStatusTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testDeser() throws Exception { - final TaskStatus status = MAPPER.readValue(getClass().getResourceAsStream("/gdc/task-status.json"), TaskStatus.class); + final TaskStatus status = readObjectFromResource("/gdc/task-status.json", TaskStatus.class); assertThat(status.getStatus(), is("OK")); assertThat(status.getPollUri(), is("/gdc/md/PROJECT_ID/tasks/TASK_ID/status")); } @Test public void testDeserMessages() throws Exception { - final TaskStatus status = MAPPER.readValue(getClass().getResourceAsStream("/model/maql-ddl-task-status-fail.json"), TaskStatus.class); + final TaskStatus status = readObjectFromResource("/model/maql-ddl-task-status-fail.json", TaskStatus.class); assertThat(status.getStatus(), is("ERROR")); assertThat(status.getPollUri(), is("/gdc/md/PROJECT_ID/tasks/TASK_ID/status")); assertThat(status.getMessages(), hasSize(1)); @@ -34,8 +33,8 @@ public void testDeserMessages() throws Exception { @Test public void testSerialize() throws Exception { - final String json = MAPPER.writeValueAsString(new TaskStatus("OK", "foo")); - final TaskStatus status = MAPPER.readValue(json, TaskStatus.class); + final String json = OBJECT_MAPPER.writeValueAsString(new TaskStatus("OK", "foo")); + final TaskStatus status = OBJECT_MAPPER.readValue(json, TaskStatus.class); assertThat(status.getStatus(), is("OK")); assertThat(status.getPollUri(), is("foo")); } diff --git a/src/test/java/com/gooddata/gdc/UriResponseTest.java b/src/test/java/com/gooddata/gdc/UriResponseTest.java index 4743ead86..1ef618f1a 100644 --- a/src/test/java/com/gooddata/gdc/UriResponseTest.java +++ b/src/test/java/com/gooddata/gdc/UriResponseTest.java @@ -5,12 +5,10 @@ */ package com.gooddata.gdc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -19,8 +17,7 @@ public class UriResponseTest { @Test public void testDeserialization() throws Exception { - final InputStream inputStream = getClass().getResourceAsStream("/gdc/uriResponse.json"); - final UriResponse uriResponse = new ObjectMapper().readValue(inputStream, UriResponse.class); + final UriResponse uriResponse = readObjectFromResource("/gdc/uriResponse.json", UriResponse.class); assertThat(uriResponse, is(notNullValue())); assertThat(uriResponse.getUri(), is("URI")); diff --git a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java index 4324f7b40..72d17f9ba 100644 --- a/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java +++ b/src/test/java/com/gooddata/md/AttributeDisplayFormTest.java @@ -5,12 +5,10 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -29,8 +27,7 @@ public class AttributeDisplayFormTest { @SuppressWarnings("deprecation") @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/attributeDisplayForm.json"); - final AttributeDisplayForm attrDF = new ObjectMapper().readValue(stream, AttributeDisplayForm.class); + final AttributeDisplayForm attrDF = readObjectFromResource("/md/attributeDisplayForm.json", AttributeDisplayForm.class); assertThat(attrDF, is(notNullValue())); assertThat(attrDF.getFormOf(), is(FORM_OF)); @@ -52,8 +49,7 @@ public void testSerialization() throws Exception { @Test public void shouldSerializeSameAsDeserializationInput() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/attributeDisplayForm.json"); - final AttributeDisplayForm attrDF = new ObjectMapper().readValue(stream, AttributeDisplayForm.class); + final AttributeDisplayForm attrDF = readObjectFromResource("/md/attributeDisplayForm.json", AttributeDisplayForm.class); assertThat(attrDF, serializesToJson("/md/attributeDisplayForm-inputOrig.json")); } diff --git a/src/test/java/com/gooddata/md/AttributeElementTest.java b/src/test/java/com/gooddata/md/AttributeElementTest.java index 4fa6b4b6b..81940e353 100644 --- a/src/test/java/com/gooddata/md/AttributeElementTest.java +++ b/src/test/java/com/gooddata/md/AttributeElementTest.java @@ -5,16 +5,14 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; - public class AttributeElementTest { private static final String URI = "/gdc/md/PROJECT_ID/obj/1333/elements?id=6959"; @@ -22,8 +20,7 @@ public class AttributeElementTest { @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/attributeElement.json"); - final AttributeElement element = new ObjectMapper().readValue(stream, AttributeElement.class); + final AttributeElement element = readObjectFromResource("/md/attributeElement.json", AttributeElement.class); assertThat(element, is(notNullValue())); assertThat(element.getUri(), is(URI)); @@ -32,8 +29,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/attributeElement.json"); - final AttributeElement element = new ObjectMapper().readValue(stream, AttributeElement.class); + final AttributeElement element = readObjectFromResource("/md/attributeElement.json", AttributeElement.class); assertThat(element.toString(), matchesPattern(AttributeElement.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/AttributeElementsTest.java b/src/test/java/com/gooddata/md/AttributeElementsTest.java index 3da82955d..7fbdea22a 100644 --- a/src/test/java/com/gooddata/md/AttributeElementsTest.java +++ b/src/test/java/com/gooddata/md/AttributeElementsTest.java @@ -5,24 +5,22 @@ */ package com.gooddata.md; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.List; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; + public class AttributeElementsTest { @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/attributeElements.json"); - final AttributeElements elements = new ObjectMapper().readValue(stream, AttributeElements.class); + final AttributeElements elements = readObjectFromResource("/md/attributeElements.json", AttributeElements.class); assertThat(elements, is(notNullValue())); final List elementsList = elements.getElements(); diff --git a/src/test/java/com/gooddata/md/AttributeSortTest.java b/src/test/java/com/gooddata/md/AttributeSortTest.java index a52c86126..fe6c8c498 100644 --- a/src/test/java/com/gooddata/md/AttributeSortTest.java +++ b/src/test/java/com/gooddata/md/AttributeSortTest.java @@ -5,17 +5,17 @@ */ package com.gooddata.md; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; -import static org.hamcrest.text.MatchesPattern.matchesPattern; - -import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.JsonMatchers; import org.testng.annotations.Test; -public class AttributeSortTest { +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.text.MatchesPattern.matchesPattern; - private static final ObjectMapper MAPPER = new ObjectMapper(); +public class AttributeSortTest { @Test public void testSerializePlain() throws Exception { @@ -25,7 +25,7 @@ public void testSerializePlain() throws Exception { @Test public void testDeserializePlain() throws Exception { - final AttributeSort attributeSort = MAPPER.readValue("\"pk\"", AttributeSort.class); + final AttributeSort attributeSort = OBJECT_MAPPER.readValue("\"pk\"", AttributeSort.class); assertThat(attributeSort, is(notNullValue())); assertThat(attributeSort.getValue(), is("pk")); } @@ -38,7 +38,7 @@ public void testSerializeLink() throws Exception { @Test public void testDeserializeLink() throws Exception { - final AttributeSort attributeSort = MAPPER.readValue(getClass().getResourceAsStream("/md/attributeSort.json"), AttributeSort.class); + final AttributeSort attributeSort = readObjectFromResource("/md/attributeSort.json", AttributeSort.class); assertThat(attributeSort, is(notNullValue())); assertThat(attributeSort.getValue(), is("/gdc/md/PROJECT_ID/obj/1806")); } diff --git a/src/test/java/com/gooddata/md/AttributeTest.java b/src/test/java/com/gooddata/md/AttributeTest.java index 9689fed34..db29d3ca1 100644 --- a/src/test/java/com/gooddata/md/AttributeTest.java +++ b/src/test/java/com/gooddata/md/AttributeTest.java @@ -5,18 +5,17 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.Matchers; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collection; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; public class AttributeTest { @@ -25,8 +24,7 @@ public class AttributeTest { @SuppressWarnings("deprecation") @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/attribute.json"); - final Attribute attribute = new ObjectMapper().readValue(stream, Attribute.class); + final Attribute attribute = readObjectFromResource("/md/attribute.json", Attribute.class); assertThat(attribute, is(notNullValue())); final Collection displayForms = attribute.getDisplayForms(); @@ -86,15 +84,13 @@ public void testSerialization() throws Exception { @Test public void shouldSerializeSameAsDeserializationInput() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/attribute.json"); - final Attribute attribute = new ObjectMapper().readValue(stream, Attribute.class); + final Attribute attribute = readObjectFromResource("/md/attribute.json", Attribute.class); assertThat(attribute, serializesToJson("/md/attribute-inputOrig.json")); } @Test public void shouldDeserializeAttributeWithSort() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/attribute-sortDf.json"); - final Attribute attribute = new ObjectMapper().readValue(stream, Attribute.class); + final Attribute attribute = readObjectFromResource("/md/attribute-sortDf.json", Attribute.class); assertThat(attribute.getSort(), is("/gdc/md/PROJECT_ID/obj/1806")); assertThat(attribute.isSortedByLinkedDf(), is(true)); diff --git a/src/test/java/com/gooddata/md/ColumnTest.java b/src/test/java/com/gooddata/md/ColumnTest.java index 5d0b9872d..4e7156598 100644 --- a/src/test/java/com/gooddata/md/ColumnTest.java +++ b/src/test/java/com/gooddata/md/ColumnTest.java @@ -5,22 +5,19 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; - public class ColumnTest { @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/column.json"); - final Column column = new ObjectMapper().readValue(stream, Column.class); + final Column column = readObjectFromResource("/md/column.json", Column.class); assertThat(column, is(notNullValue())); assertThat(column.getTableUri(), is("/gdc/md/PROJECT_ID/obj/9538")); @@ -35,8 +32,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/column.json"); - final Column column = new ObjectMapper().readValue(stream, Column.class); + final Column column = readObjectFromResource("/md/column.json", Column.class); assertThat(column.toString(), matchesPattern(Column.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java index 933ec30e0..baa744821 100644 --- a/src/test/java/com/gooddata/md/DataLoadingColumnTest.java +++ b/src/test/java/com/gooddata/md/DataLoadingColumnTest.java @@ -5,23 +5,20 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; - public class DataLoadingColumnTest { @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/dataLoadingColumn.json"); - final DataLoadingColumn column = new ObjectMapper().readValue(stream, DataLoadingColumn.class); + final DataLoadingColumn column = readObjectFromResource("/md/dataLoadingColumn.json", DataLoadingColumn.class); assertThat(column, is(notNullValue())); assertThat(column.getColumnUri(), is("/gdc/md/PROJECT_ID/obj/COLUMN_ID")); @@ -43,8 +40,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/dataLoadingColumn.json"); - final DataLoadingColumn column = new ObjectMapper().readValue(stream, DataLoadingColumn.class); + final DataLoadingColumn column = readObjectFromResource("/md/dataLoadingColumn.json", DataLoadingColumn.class); assertThat(column.toString(), matchesPattern(DataLoadingColumn.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/DatasetTest.java b/src/test/java/com/gooddata/md/DatasetTest.java index b85e52743..b41f0e8ad 100644 --- a/src/test/java/com/gooddata/md/DatasetTest.java +++ b/src/test/java/com/gooddata/md/DatasetTest.java @@ -5,7 +5,12 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + +import java.util.List; + import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; @@ -13,19 +18,12 @@ import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; -import java.util.List; - public class DatasetTest { @SuppressWarnings("deprecation") @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/dataset.json"); - final Dataset dataset = new ObjectMapper().readValue(stream, Dataset.class); + final Dataset dataset = readObjectFromResource("/md/dataset.json", Dataset.class); assertThat(dataset, is(notNullValue())); diff --git a/src/test/java/com/gooddata/md/DimensionTest.java b/src/test/java/com/gooddata/md/DimensionTest.java index 769afbb5a..c3f3cb207 100644 --- a/src/test/java/com/gooddata/md/DimensionTest.java +++ b/src/test/java/com/gooddata/md/DimensionTest.java @@ -5,25 +5,23 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + +import java.util.Collection; + import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; -import java.util.Collection; - public class DimensionTest { @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/dimension.json"); - final Dimension dimension = new ObjectMapper().readValue(stream, Dimension.class); + final Dimension dimension = readObjectFromResource("/md/dimension.json", Dimension.class); assertThat(dimension, is(notNullValue())); final Collection attributes = dimension.getAttributes(); diff --git a/src/test/java/com/gooddata/md/DisplayFormTest.java b/src/test/java/com/gooddata/md/DisplayFormTest.java index bf8979d32..e4b5d77d4 100644 --- a/src/test/java/com/gooddata/md/DisplayFormTest.java +++ b/src/test/java/com/gooddata/md/DisplayFormTest.java @@ -5,12 +5,10 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; @@ -27,8 +25,7 @@ public class DisplayFormTest { @SuppressWarnings("deprecation") @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/displayForm.json"); - final DisplayForm displayForm = new ObjectMapper().readValue(stream, DisplayForm.class); + final DisplayForm displayForm = readObjectFromResource("/md/displayForm.json", DisplayForm.class); assertThat(displayForm, is(notNullValue())); assertThat(displayForm.getFormOf(), is(FORM_OF)); diff --git a/src/test/java/com/gooddata/md/EntryTest.java b/src/test/java/com/gooddata/md/EntryTest.java index 1174d274c..894ba0e2a 100644 --- a/src/test/java/com/gooddata/md/EntryTest.java +++ b/src/test/java/com/gooddata/md/EntryTest.java @@ -5,7 +5,6 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; @@ -13,6 +12,7 @@ import java.util.Set; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Collections.singleton; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -38,7 +38,7 @@ public class EntryTest { @SuppressWarnings("deprecation") @Test public void testDeserialize() throws Exception { - final Entry entry = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/entry.json"), Entry.class); + final Entry entry = readObjectFromResource("/md/entry.json", Entry.class); assertThat(entry, is(notNullValue())); assertThat(entry.getLink(), is(URI)); assertThat(entry.getUri(), is(URI)); diff --git a/src/test/java/com/gooddata/md/ExpressionTest.java b/src/test/java/com/gooddata/md/ExpressionTest.java index 786b2e047..28a080c24 100644 --- a/src/test/java/com/gooddata/md/ExpressionTest.java +++ b/src/test/java/com/gooddata/md/ExpressionTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -18,11 +18,10 @@ public class ExpressionTest { public static final String DATA = "/gdc/md/PROJECT_ID/obj/EXPR_ID"; public static final String TYPE = "expr"; public static final String JSON = "{\"data\":\"/gdc/md/PROJECT_ID/obj/EXPR_ID\",\"type\":\"expr\"}"; - public static final ObjectMapper MAPPER = new ObjectMapper(); @Test public void testDeserialize() throws Exception { - final Expression expression = MAPPER.readValue(JSON, Expression.class); + final Expression expression = OBJECT_MAPPER.readValue(JSON, Expression.class); assertThat(expression, is(notNullValue())); assertThat(expression.getData(), is(DATA)); assertThat(expression.getType(), is(TYPE)); @@ -31,7 +30,7 @@ public void testDeserialize() throws Exception { @Test public void testSerialize() throws Exception { final Expression expression = new Expression(DATA, TYPE); - assertThat(MAPPER.writeValueAsString(expression), is(JSON)); + assertThat(OBJECT_MAPPER.writeValueAsString(expression), is(JSON)); } @Test diff --git a/src/test/java/com/gooddata/md/FactTest.java b/src/test/java/com/gooddata/md/FactTest.java index 4decd7e40..ce4b2b8c1 100644 --- a/src/test/java/com/gooddata/md/FactTest.java +++ b/src/test/java/com/gooddata/md/FactTest.java @@ -5,10 +5,10 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -19,7 +19,7 @@ public class FactTest { @Test public void testDeserialization() throws Exception { - final Fact fact = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/fact.json"), Fact.class); + final Fact fact = readObjectFromResource("/md/fact.json", Fact.class); assertThat(fact, is(notNullValue())); assertThat(fact.getExpressions(), is(notNullValue())); assertThat(fact.getExpressions(), hasSize(1)); diff --git a/src/test/java/com/gooddata/md/KeyTest.java b/src/test/java/com/gooddata/md/KeyTest.java index 24be70932..fc79bc57d 100644 --- a/src/test/java/com/gooddata/md/KeyTest.java +++ b/src/test/java/com/gooddata/md/KeyTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -15,14 +15,13 @@ public class KeyTest { - public static final ObjectMapper MAPPER = new ObjectMapper(); public static final String DATA = "/gdc/md/PROJECT_ID/obj/PK_ID"; public static final String TYPE = "col"; public static final String JSON = "{\"data\":\"/gdc/md/PROJECT_ID/obj/PK_ID\",\"type\":\"col\"}"; @Test public void testDeserialize() throws Exception { - final Key key = MAPPER.readValue(JSON, Key.class); + final Key key = OBJECT_MAPPER.readValue(JSON, Key.class); assertThat(key, is(notNullValue())); assertThat(key.getData(), is(DATA)); assertThat(key.getType(), is(TYPE)); @@ -31,7 +30,7 @@ public void testDeserialize() throws Exception { @Test public void testSerialize() throws Exception { final Key key = new Key(DATA, TYPE); - final String json = MAPPER.writeValueAsString(key); + final String json = OBJECT_MAPPER.writeValueAsString(key); assertThat(json, is(JSON)); } diff --git a/src/test/java/com/gooddata/md/MetaTest.java b/src/test/java/com/gooddata/md/MetaTest.java index c91271be6..c13310491 100644 --- a/src/test/java/com/gooddata/md/MetaTest.java +++ b/src/test/java/com/gooddata/md/MetaTest.java @@ -5,7 +5,6 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; @@ -14,6 +13,7 @@ import java.util.Set; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -40,7 +40,7 @@ public class MetaTest { @Test public void testDeserialization() throws Exception { - final Meta meta = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/meta.json"), Meta.class); + final Meta meta = readObjectFromResource("/md/meta.json", Meta.class); assertThat(meta, is(notNullValue())); assertThat(meta.getAuthor(), is(AUTHOR)); assertThat(meta.getContributor(), is(CONTRIBUTOR)); diff --git a/src/test/java/com/gooddata/md/MetadataServiceIT.java b/src/test/java/com/gooddata/md/MetadataServiceIT.java index e6a0e552b..8b3919714 100644 --- a/src/test/java/com/gooddata/md/MetadataServiceIT.java +++ b/src/test/java/com/gooddata/md/MetadataServiceIT.java @@ -16,6 +16,7 @@ import java.io.IOException; import java.util.*; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static com.gooddata.util.ResourceUtils.readFromResource; import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static com.gooddata.util.ResourceUtils.readStringFromResource; @@ -47,9 +48,9 @@ public class MetadataServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUp() throws Exception { - project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); - metricInput = MAPPER.readValue(readFromResource("/md/metric-input.json"), Metric.class); - scheduledMailInput = MAPPER.readValue(readFromResource("/md/scheduledMail.json"), ScheduledMail.class); + project = readObjectFromResource("/project/project.json", Project.class); + metricInput = readObjectFromResource("/md/metric-input.json", Metric.class); + scheduledMailInput = readObjectFromResource("/md/scheduledMail.json", ScheduledMail.class); } @Test @@ -64,7 +65,7 @@ public void testUsedBy() throws Exception { .havingPathEqualTo(USEDBY_URI) .respond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(useMany)); + .withBody(OBJECT_MAPPER.writeValueAsString(useMany)); final Collection result = gd.getMetadataService().usedBy(project, OBJ_URI, false, ReportDefinition.class); @@ -86,7 +87,7 @@ public void testUsedByBatch() throws Exception { .havingPathEqualTo(USEDBY_URI) .respond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(useMany)); + .withBody(OBJECT_MAPPER.writeValueAsString(useMany)); final Collection result = gd.getMetadataService().usedBy(project, new HashSet<>(asList(OBJ_URI, OBJ_URI2)), false, ReportDefinition.class); @@ -156,11 +157,11 @@ public void shouldCreateObj() throws Exception { public void shouldUpdateObj() throws Exception { onRequest() .havingMethodEqualTo("PUT") - .havingBodyEqualTo(MAPPER.writeValueAsString(metricInput)) + .havingBodyEqualTo(OBJECT_MAPPER.writeValueAsString(metricInput)) .havingPathEqualTo(SPECIFIC_OBJ_URI) .respond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(new UriResponse(SPECIFIC_OBJ_URI))); + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse(SPECIFIC_OBJ_URI))); onRequest() .havingMethodEqualTo("GET") .havingPathEqualTo(SPECIFIC_OBJ_URI) diff --git a/src/test/java/com/gooddata/md/MetricTest.java b/src/test/java/com/gooddata/md/MetricTest.java index 7e16e70b5..99435d63e 100644 --- a/src/test/java/com/gooddata/md/MetricTest.java +++ b/src/test/java/com/gooddata/md/MetricTest.java @@ -5,7 +5,10 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.javacrumbs.jsonunit.JsonMatchers.jsonNodeAbsent; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -14,16 +17,11 @@ import static org.hamcrest.Matchers.contains; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import org.testng.annotations.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; - public class MetricTest { @Test public void testDeserialization() throws Exception { - final Metric metric = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/md/metric-out.json"), Metric.class); + final Metric metric = readObjectFromResource("/md/metric-out.json", Metric.class); assertThat(metric, is(notNullValue())); assertThat(metric.getExpression(), is("SELECT AVG([/gdc/md/PROJECT_ID/obj/EXPR_ID])")); assertThat(metric.getFormat(), is("#,##0")); @@ -41,8 +39,7 @@ public void testDeserialization() throws Exception { @Test public void shouldDeserializeFolder() throws Exception { - final Metric metric = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/md/metric-folder.json"), Metric.class); + final Metric metric = readObjectFromResource("/md/metric-folder.json", Metric.class); assertThat(metric.getFolders(), contains("/gdc/md/ge06jy0jr6h1hzaxei6d53evw276p3xc/obj/51430")); } @@ -54,8 +51,7 @@ public void testSerialization() throws Exception { @Test public void fullJsonShouldStayTheSameAfterDeserializationAndSerializationBack() throws Exception { - final Metric metric = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/md/metric-out.json"), Metric.class); + final Metric metric = readObjectFromResource("/md/metric-out.json", Metric.class); assertThat(metric, jsonNodeAbsent("metric.content.tree.content[0].content[0].content[0].content")); assertThat(metric, serializesToJson("/md/metric-out.json")); @@ -63,15 +59,13 @@ public void fullJsonShouldStayTheSameAfterDeserializationAndSerializationBack() @Test public void shouldIgnoreLinksProperty() throws Exception { - final Metric metric = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/md/metric-links.json"), Metric.class); + final Metric metric = readObjectFromResource("/md/metric-links.json", Metric.class); assertThat(metric, serializesToJson("/md/metric-out.json")); } @Test public void testToStringFormat() throws Exception { - final Metric metric = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/md/metric-out.json"), Metric.class); + final Metric metric = readObjectFromResource("/md/metric-out.json", Metric.class); assertThat(metric.toString(), matchesPattern(Metric.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/NestedAttributeTest.java b/src/test/java/com/gooddata/md/NestedAttributeTest.java index 302a70c9b..2424ee40e 100644 --- a/src/test/java/com/gooddata/md/NestedAttributeTest.java +++ b/src/test/java/com/gooddata/md/NestedAttributeTest.java @@ -5,24 +5,25 @@ */ package com.gooddata.md; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; -import static org.hamcrest.text.MatchesPattern.matchesPattern; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.Matchers; import org.testng.annotations.Test; import java.util.Collection; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.text.MatchesPattern.matchesPattern; + public class NestedAttributeTest { @SuppressWarnings("deprecation") @Test public void testDeserialization() throws Exception { - final NestedAttribute attribute = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/dimensionAttribute.json"), NestedAttribute.class); + final NestedAttribute attribute = readObjectFromResource("/md/dimensionAttribute.json", NestedAttribute.class); assertThat(attribute, is(notNullValue())); final Collection displayForms = attribute.getDisplayForms(); @@ -60,7 +61,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final NestedAttribute attribute = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/dimensionAttribute.json"), NestedAttribute.class); + final NestedAttribute attribute = readObjectFromResource("/md/dimensionAttribute.json", NestedAttribute.class); assertThat(attribute.toString(), matchesPattern(NestedAttribute.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/ObjTest.java b/src/test/java/com/gooddata/md/ObjTest.java index 7cbccf448..175d7c51c 100644 --- a/src/test/java/com/gooddata/md/ObjTest.java +++ b/src/test/java/com/gooddata/md/ObjTest.java @@ -6,16 +6,15 @@ package com.gooddata.md; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.LinkedHashSet; import java.util.Set; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -39,8 +38,7 @@ public class ObjTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/objCommon.json"); - final AbstractObj obj = new ObjectMapper().readValue(stream, ConcreteObj.class); + final AbstractObj obj = readObjectFromResource("/md/objCommon.json", ConcreteObj.class); assertThat(obj, is(notNullValue())); assertThat(obj.getAuthor(), is(AUTHOR)); diff --git a/src/test/java/com/gooddata/md/ProjectDashboardTest.java b/src/test/java/com/gooddata/md/ProjectDashboardTest.java index 166d15558..8bc4e5e42 100644 --- a/src/test/java/com/gooddata/md/ProjectDashboardTest.java +++ b/src/test/java/com/gooddata/md/ProjectDashboardTest.java @@ -5,21 +5,20 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; - -import org.testng.annotations.Test; - public class ProjectDashboardTest { @Test public void testDeserialization() throws Exception { - final ProjectDashboard dashboard = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/projectDashboard.json"), ProjectDashboard.class); + final ProjectDashboard dashboard = readObjectFromResource("/md/projectDashboard.json", ProjectDashboard.class); assertThat(dashboard.getUri(), is("/gdc/md/PROJECT_ID/obj/12345")); @@ -35,7 +34,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final ProjectDashboard dashboard = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/projectDashboard.json"), ProjectDashboard.class); + final ProjectDashboard dashboard = readObjectFromResource("/md/projectDashboard.json", ProjectDashboard.class); assertThat(dashboard.toString(), matchesPattern(ProjectDashboard.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/QueryTest.java b/src/test/java/com/gooddata/md/QueryTest.java index b4963d67f..87d8dc565 100644 --- a/src/test/java/com/gooddata/md/QueryTest.java +++ b/src/test/java/com/gooddata/md/QueryTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.md; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -17,7 +17,7 @@ public class QueryTest { @Test public void testDeserialization() throws Exception { - final Query query = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/query.json"), Query.class); + final Query query = readObjectFromResource("/md/query.json", Query.class); assertThat(query, is(notNullValue())); assertThat(query.getCategory(), is("MD::Query::Object")); assertThat(query.getTitle(), is("List of allTypes")); @@ -26,7 +26,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final Query query = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/query.json"), Query.class); + final Query query = readObjectFromResource("/md/query.json", Query.class); assertThat(query.toString(), matchesPattern(Query.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/ScheduledMailTest.java b/src/test/java/com/gooddata/md/ScheduledMailTest.java index 5d845e0d5..991933c34 100644 --- a/src/test/java/com/gooddata/md/ScheduledMailTest.java +++ b/src/test/java/com/gooddata/md/ScheduledMailTest.java @@ -7,14 +7,16 @@ import com.gooddata.JsonMatchers; import com.gooddata.report.ReportExportFormat; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.LocalDate; import org.testng.annotations.Test; import java.util.Arrays; import java.util.Collections; -import static org.hamcrest.CoreMatchers.*; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.CoreMatchers.hasItems; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.text.MatchesPattern.matchesPattern; @@ -40,7 +42,7 @@ public class ScheduledMailTest { @Test public void testDeserialization() throws Exception { - final ScheduledMail scheduledMail = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/scheduledMail.json"), ScheduledMail.class); + final ScheduledMail scheduledMail = readObjectFromResource("/md/scheduledMail.json", ScheduledMail.class); assertThat(scheduledMail, is(notNullValue())); assertThat(scheduledMail.getToAddresses(), hasItems("email@example.com")); assertThat(scheduledMail.getBccAddresses(), hasItems("secret-email@example.com")); @@ -67,7 +69,7 @@ public void testSerialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final ScheduledMail scheduledMail = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/scheduledMail.json"), ScheduledMail.class); + final ScheduledMail scheduledMail = readObjectFromResource("/md/scheduledMail.json", ScheduledMail.class); assertThat(scheduledMail.toString(), matchesPattern(ScheduledMail.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/TableDataLoadTest.java b/src/test/java/com/gooddata/md/TableDataLoadTest.java index b00bf22d8..d38deb28c 100644 --- a/src/test/java/com/gooddata/md/TableDataLoadTest.java +++ b/src/test/java/com/gooddata/md/TableDataLoadTest.java @@ -5,22 +5,19 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; - public class TableDataLoadTest { @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/tableDataLoad.json"); - final TableDataLoad load = new ObjectMapper().readValue(stream, TableDataLoad.class); + final TableDataLoad load = readObjectFromResource("/md/tableDataLoad.json", TableDataLoad.class); assertThat(load, is(notNullValue())); assertThat(load.getDataSourceLocation(), is("d_zendesktickets_vehicleview_aaavxfdfgqamowg")); @@ -31,8 +28,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/tableDataLoad.json"); - final TableDataLoad load = new ObjectMapper().readValue(stream, TableDataLoad.class); + final TableDataLoad load = readObjectFromResource("/md/tableDataLoad.json", TableDataLoad.class); assertThat(load.toString(), matchesPattern(TableDataLoad.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/TableTest.java b/src/test/java/com/gooddata/md/TableTest.java index 783cbbf65..2f683f86a 100644 --- a/src/test/java/com/gooddata/md/TableTest.java +++ b/src/test/java/com/gooddata/md/TableTest.java @@ -5,23 +5,20 @@ */ package com.gooddata.md; +import org.testng.annotations.Test; + +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.text.MatchesPattern.matchesPattern; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.testng.annotations.Test; - -import java.io.InputStream; - public class TableTest { @Test public void shouldDeserialize() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/table.json"); - final Table table = new ObjectMapper().readValue(stream, Table.class); + final Table table = readObjectFromResource("/md/table.json", Table.class); assertThat(table, is(notNullValue())); assertThat(table.getDBName(), is("d_zendesktickets_vehicleview")); @@ -33,8 +30,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/md/table.json"); - final Table table = new ObjectMapper().readValue(stream, Table.class); + final Table table = readObjectFromResource("/md/table.json", Table.class); assertThat(table.toString(), matchesPattern(Table.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java index 03bd15331..a526ca825 100644 --- a/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java +++ b/src/test/java/com/gooddata/md/maintenance/ExportImportServiceIT.java @@ -6,6 +6,7 @@ package com.gooddata.md.maintenance; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -23,7 +24,7 @@ public class ExportImportServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUp() throws Exception { - project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + project = readObjectFromResource("/project/project.json", Project.class); } @Test diff --git a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java index 0da3e56be..30731bde5 100644 --- a/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java +++ b/src/test/java/com/gooddata/md/maintenance/PartialMdArtifactTest.java @@ -5,23 +5,20 @@ */ package com.gooddata.md.maintenance; -import static com.gooddata.JsonMatchers.serializesToJson; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; -import static org.hamcrest.text.MatchesPattern.matchesPattern; - -import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.gdc.UriResponse; import org.testng.annotations.Test; -import java.io.InputStream; +import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.text.MatchesPattern.matchesPattern; public class PartialMdArtifactTest { @Test public void shouldDeserialize() throws Exception { - final InputStream input = getClass().getResourceAsStream("/md/maintenance/partialMDArtifact.json"); - final PartialMdArtifact partialMdArtifact = new ObjectMapper().readValue(input, PartialMdArtifact.class); + final PartialMdArtifact partialMdArtifact = readObjectFromResource("/md/maintenance/partialMDArtifact.json", PartialMdArtifact.class); assertThat(partialMdArtifact.getStatusUri(), is("/gdc/md/projectId/tasks/taskId/status")); assertThat(partialMdArtifact.getToken(), is("TOKEN123")); diff --git a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java index c4a581ec9..910d24676 100644 --- a/src/test/java/com/gooddata/md/report/AttributeInGridTest.java +++ b/src/test/java/com/gooddata/md/report/AttributeInGridTest.java @@ -5,21 +5,20 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.md.Attribute; import com.gooddata.md.DisplayForm; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Iterator; import java.util.List; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.text.MatchesPattern.matchesPattern; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -32,8 +31,7 @@ public class AttributeInGridTest { @Test public void testDeserialization() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/attributeInGrid.json"); - final AttributeInGrid attr = new ObjectMapper().readValue(is, AttributeInGrid.class); + final AttributeInGrid attr = readObjectFromResource("/md/report/attributeInGrid.json", AttributeInGrid.class); assertThat(attr, is(notNullValue())); assertThat(attr.getUri(), is(URI)); @@ -85,8 +83,7 @@ public void testCreateFromDisplayForm() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/attributeInGrid.json"); - final AttributeInGrid attr = new ObjectMapper().readValue(is, AttributeInGrid.class); + final AttributeInGrid attr = readObjectFromResource("/md/report/attributeInGrid.json", AttributeInGrid.class); assertThat(attr.toString(), matchesPattern(AttributeInGrid.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java b/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java index bd0b27ddd..2d3a88e06 100644 --- a/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java +++ b/src/test/java/com/gooddata/md/report/GridElementDeserializerTest.java @@ -5,12 +5,12 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import org.testng.annotations.Test; import java.util.ArrayList; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -21,8 +21,7 @@ public class GridElementDeserializerTest { @Test public void testDeserializer() throws Exception { - final GridElements elems = new ObjectMapper().readValue( - getClass().getResourceAsStream("/md/report/gridElements.json"), GridElements.class); + final GridElements elems = readObjectFromResource("/md/report/gridElements.json", GridElements.class); assertThat(elems, is(notNullValue())); assertThat(elems, hasSize(2)); diff --git a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java index cfea902dc..8c42c85e0 100644 --- a/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/GridReportDefinitionContentTest.java @@ -5,13 +5,12 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collections; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -20,8 +19,8 @@ public class GridReportDefinitionContentTest { @Test public void testDeserialization() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/gridReportDefinitionContent.json"); - final GridReportDefinitionContent def = (GridReportDefinitionContent) new ObjectMapper().readValue(is, ReportDefinitionContent.class); + final GridReportDefinitionContent def = (GridReportDefinitionContent) + readObjectFromResource("/md/report/gridReportDefinitionContent.json", ReportDefinitionContent.class); assertThat(def, is(notNullValue())); assertThat(def.getFormat(), is("grid")); assertThat(def.getGrid(), is(notNullValue())); diff --git a/src/test/java/com/gooddata/md/report/GridTest.java b/src/test/java/com/gooddata/md/report/GridTest.java index 525c84b9e..b7ce8cd8a 100644 --- a/src/test/java/com/gooddata/md/report/GridTest.java +++ b/src/test/java/com/gooddata/md/report/GridTest.java @@ -5,7 +5,6 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import org.hamcrest.CoreMatchers; import org.testng.annotations.Test; @@ -16,19 +15,20 @@ import static com.gooddata.JsonMatchers.serializesToJson; import static com.gooddata.md.report.MetricGroup.METRIC_GROUP; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.text.MatchesPattern.matchesPattern; public class GridTest { @Test public void testDeserialization() throws Exception { - final Grid grid = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/md/report/grid.json"), Grid.class); + final Grid grid = readObjectFromResource("/md/report/grid.json", Grid.class); assertThat(grid, is(notNullValue())); assertThat(grid.getColumns(), is(notNullValue())); @@ -63,15 +63,14 @@ public void testSerialization() throws Exception { asList(new AttributeInGrid("/gdc/md/PROJECT_ID/obj/ATTR_ID", "attr")), asList(new MetricElement("/gdc/md/PROJECT_ID/obj/METR_ID", "metr")), sort, asList(colWidths)); - new ObjectMapper().writeValueAsString(grid); + OBJECT_MAPPER.writeValueAsString(grid); assertThat(grid, serializesToJson("/md/report/grid-input.json")); } @Test public void testToStringFormat() throws Exception { - final Grid grid = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/md/report/grid.json"), Grid.class); + final Grid grid = readObjectFromResource("/md/report/grid.json", Grid.class); assertThat(grid.toString(), matchesPattern(Grid.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/report/MetricElementTest.java b/src/test/java/com/gooddata/md/report/MetricElementTest.java index 6b337f556..ce34e837f 100644 --- a/src/test/java/com/gooddata/md/report/MetricElementTest.java +++ b/src/test/java/com/gooddata/md/report/MetricElementTest.java @@ -5,13 +5,11 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.md.Metric; import org.testng.annotations.Test; -import java.io.InputStream; - import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -28,8 +26,7 @@ public class MetricElementTest { @Test public void testDeserialization() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/metricElement.json"); - final MetricElement element = new ObjectMapper().readValue(is, MetricElement.class); + final MetricElement element = readObjectFromResource("/md/report/metricElement.json", MetricElement.class); assertThat(element, is(notNullValue())); assertThat(element.getUri(), is(URI)); assertThat(element.getAlias(), is(ALIAS)); diff --git a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java index 8d212477f..f3ecb401b 100644 --- a/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/OneNumberReportDefinitionContentTest.java @@ -5,13 +5,12 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collections; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -20,9 +19,8 @@ public class OneNumberReportDefinitionContentTest { @Test public void testDeserialization() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/oneNumberReportDefinitionContent.json"); - final OneNumberReportDefinitionContent def = (OneNumberReportDefinitionContent) new ObjectMapper() - .readValue(is, ReportDefinitionContent.class); + final OneNumberReportDefinitionContent def = (OneNumberReportDefinitionContent) + readObjectFromResource("/md/report/oneNumberReportDefinitionContent.json", ReportDefinitionContent.class); assertThat(def, is(notNullValue())); assertThat(def.getFormat(), is("oneNumber")); assertThat(def.getGrid(), is(notNullValue())); diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java index a33690ac4..b3fe0e08f 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionContentTest.java @@ -5,13 +5,12 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collections; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -21,8 +20,7 @@ public class ReportDefinitionContentTest { @Test public void testDeserialization() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/gridReportDefinitionContent.json"); - final ReportDefinitionContent def = new ObjectMapper().readValue(is, ReportDefinitionContent.class); + final ReportDefinitionContent def = readObjectFromResource("/md/report/gridReportDefinitionContent.json", ReportDefinitionContent.class); assertThat(def, is(notNullValue())); assertThat(def.getFormat(), is("grid")); assertThat(def.getGrid(), is(notNullValue())); diff --git a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java index b9e61cb89..7ed37b1b2 100644 --- a/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java +++ b/src/test/java/com/gooddata/md/report/ReportDefinitionTest.java @@ -5,13 +5,12 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collections; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -24,8 +23,7 @@ public class ReportDefinitionTest { @Test public void testDeserialization() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/oneNumberReportDefinition.json"); - final ReportDefinition def = new ObjectMapper().readValue(is, ReportDefinition.class); + final ReportDefinition def = readObjectFromResource("/md/report/oneNumberReportDefinition.json", ReportDefinition.class); assertThat(def, is(notNullValue())); assertThat(def.getFormat(), is(FORMAT)); assertThat(def.getGrid(), is(notNullValue())); @@ -44,8 +42,7 @@ public void testSerialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream is = getClass().getResourceAsStream("/md/report/oneNumberReportDefinition.json"); - final ReportDefinition def = new ObjectMapper().readValue(is, ReportDefinition.class); + final ReportDefinition def = readObjectFromResource("/md/report/oneNumberReportDefinition.json", ReportDefinition.class); assertThat(def.toString(), matchesPattern(ReportDefinition.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/md/report/ReportTest.java b/src/test/java/com/gooddata/md/report/ReportTest.java index 847d09b29..2383c4aa5 100644 --- a/src/test/java/com/gooddata/md/report/ReportTest.java +++ b/src/test/java/com/gooddata/md/report/ReportTest.java @@ -5,14 +5,14 @@ */ package com.gooddata.md.report; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.text.MatchesPattern.matchesPattern; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -24,7 +24,7 @@ public class ReportTest { @Test public void testDeserialization() throws Exception { - final Report report = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/report/report.json"), Report.class); + final Report report = readObjectFromResource("/md/report/report.json", Report.class); assertThat(report, is(notNullValue())); assertThat(report.getDefinitions(), is(notNullValue())); assertThat(report.getDefinitions(), hasSize(1)); @@ -46,7 +46,7 @@ public void testSerialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final Report report = new ObjectMapper().readValue(getClass().getResourceAsStream("/md/report/report.json"), Report.class); + final Report report = readObjectFromResource("/md/report/report.json", Report.class); assertThat(report.toString(), matchesPattern(Report.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/model/DiffRequestTest.java b/src/test/java/com/gooddata/model/DiffRequestTest.java index 6d15c45c0..e532761db 100644 --- a/src/test/java/com/gooddata/model/DiffRequestTest.java +++ b/src/test/java/com/gooddata/model/DiffRequestTest.java @@ -5,19 +5,17 @@ */ package com.gooddata.model; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class DiffRequestTest { - private static final ObjectMapper mapper = new ObjectMapper(); - @Test public void testSerialization() throws Exception { - String valueAsString = mapper.writeValueAsString(new DiffRequest("{\"projectModel\":\"xxx\"}")); + String valueAsString = OBJECT_MAPPER.writeValueAsString(new DiffRequest("{\"projectModel\":\"xxx\"}")); assertThat(valueAsString, is("{\"diffRequest\":{\"targetModel\":{\"projectModel\":\"xxx\"}}}")); } } diff --git a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java index d9687eaa1..2b7533c1e 100644 --- a/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java +++ b/src/test/java/com/gooddata/model/MaqlDdlLinksTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.model; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -19,8 +17,7 @@ public class MaqlDdlLinksTest { @SuppressWarnings("deprecation") @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/model/maqlDdlLinks.json"); - final MaqlDdlLinks maqlDdlLinks = new ObjectMapper().readValue(stream, MaqlDdlLinks.class); + final MaqlDdlLinks maqlDdlLinks = readObjectFromResource("/model/maqlDdlLinks.json", MaqlDdlLinks.class); assertThat(maqlDdlLinks, is(notNullValue())); assertThat(maqlDdlLinks.getStatusLink(), is("/gdc/md/PROJECT_ID/tasks/123/status")); diff --git a/src/test/java/com/gooddata/model/MaqlDdlTest.java b/src/test/java/com/gooddata/model/MaqlDdlTest.java index 59c368991..d70267204 100644 --- a/src/test/java/com/gooddata/model/MaqlDdlTest.java +++ b/src/test/java/com/gooddata/model/MaqlDdlTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.model; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -15,7 +15,7 @@ public class MaqlDdlTest { @Test public void testSerialization() throws Exception { - assertThat(new ObjectMapper().writeValueAsString(new MaqlDdl("maqlddl")), + assertThat(OBJECT_MAPPER.writeValueAsString(new MaqlDdl("maqlddl")), is("{\"manage\":{\"maql\":\"maqlddl\"}}")); } diff --git a/src/test/java/com/gooddata/model/ModelDiffTest.java b/src/test/java/com/gooddata/model/ModelDiffTest.java index 2a1758b56..8ec6f81c5 100644 --- a/src/test/java/com/gooddata/model/ModelDiffTest.java +++ b/src/test/java/com/gooddata/model/ModelDiffTest.java @@ -5,13 +5,12 @@ */ package com.gooddata.model; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.Collections; import static com.gooddata.model.ModelDiff.UpdateScript; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; @@ -76,8 +75,7 @@ public void testGetUpdateMaqlsNoMaqlInUpdateScript() throws Exception { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/model/modelDiff.json"); - final ModelDiff diff = new ObjectMapper().readValue(stream, ModelDiff.class); + final ModelDiff diff = readObjectFromResource("/model/modelDiff.json", ModelDiff.class); assertThat(diff, is(notNullValue())); assertThat(diff.getUpdateScripts(), hasSize(2)); diff --git a/src/test/java/com/gooddata/model/ModelServiceIT.java b/src/test/java/com/gooddata/model/ModelServiceIT.java index bfce9a281..a661daa26 100644 --- a/src/test/java/com/gooddata/model/ModelServiceIT.java +++ b/src/test/java/com/gooddata/model/ModelServiceIT.java @@ -13,7 +13,9 @@ import org.testng.annotations.Test; import static com.gooddata.model.ModelDiff.UpdateScript; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; @@ -30,7 +32,7 @@ public class ModelServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUp() throws Exception { - project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + project = readObjectFromResource("/project/project.json", Project.class); } @Test @@ -40,13 +42,13 @@ public void shouldCreateDiff() throws Exception { .havingPathEqualTo(DIFF_URI) .respond() .withStatus(202) - .withBody(MAPPER.writeValueAsString(new AsyncTask(DIFF_POLL_URI))); + .withBody(OBJECT_MAPPER.writeValueAsString(new AsyncTask(DIFF_POLL_URI))); onRequest() .havingMethodEqualTo("GET") .havingPathEqualTo(DIFF_POLL_URI) .respond() .withStatus(202) - .withBody(MAPPER.writeValueAsString(new AsyncTask(DIFF_POLL_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new AsyncTask(DIFF_POLL_URI))) .thenRespond() .withStatus(200) .withBody(readFromResource("/model/modelDiff.json")) @@ -65,7 +67,7 @@ public void shouldFailCreateDiff() throws Exception { .havingPathEqualTo(DIFF_URI) .respond() .withStatus(202) - .withBody(MAPPER.writeValueAsString(new AsyncTask(DIFF_POLL_URI))); + .withBody(OBJECT_MAPPER.writeValueAsString(new AsyncTask(DIFF_POLL_URI))); onRequest() .havingMethodEqualTo("GET") .havingPathEqualTo(DIFF_POLL_URI) @@ -89,10 +91,10 @@ public void shouldUpdateModel() throws Exception { .havingPathEqualTo(STATUS_URI) .respond() .withStatus(202) - .withBody(MAPPER.writeValueAsString(new TaskStatus("RUNNING", STATUS_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskStatus("RUNNING", STATUS_URI))) .thenRespond() .withStatus(200) - .withBody(MAPPER.writeValueAsString(new TaskStatus("OK", STATUS_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskStatus("OK", STATUS_URI))) ; final ModelDiff diff = new ModelDiff(new UpdateScript(true, false, diff --git a/src/test/java/com/gooddata/notification/NotificationServiceIT.java b/src/test/java/com/gooddata/notification/NotificationServiceIT.java index b79a4ab4a..c80c6d58c 100644 --- a/src/test/java/com/gooddata/notification/NotificationServiceIT.java +++ b/src/test/java/com/gooddata/notification/NotificationServiceIT.java @@ -6,6 +6,7 @@ package com.gooddata.notification; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static java.util.Collections.singletonMap; import static net.jadler.Jadler.onRequest; @@ -23,7 +24,7 @@ public class NotificationServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUp() throws Exception { - project = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); + project = readObjectFromResource("/project/project.json", Project.class); } @Test diff --git a/src/test/java/com/gooddata/project/ProjectServiceIT.java b/src/test/java/com/gooddata/project/ProjectServiceIT.java index e67ad1f50..e09400f81 100644 --- a/src/test/java/com/gooddata/project/ProjectServiceIT.java +++ b/src/test/java/com/gooddata/project/ProjectServiceIT.java @@ -11,12 +11,17 @@ import com.gooddata.gdc.AsyncTask; import com.gooddata.gdc.TaskStatus; import com.gooddata.gdc.UriResponse; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import java.util.Collection; +import java.util.List; +import java.util.Set; + import static com.gooddata.JsonMatchers.isJsonString; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.jadler.Jadler.onRequest; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.empty; @@ -24,14 +29,8 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; -import java.util.Collection; -import java.util.List; -import java.util.Set; - public class ProjectServiceIT extends AbstractGoodDataIT { - private static final ObjectMapper MAPPER = new ObjectMapper(); - private static final String PROJECT_ID = "PROJECT_ID"; private static final String PROJECT_URI = "/gdc/projects/" + PROJECT_ID; @@ -41,9 +40,9 @@ public class ProjectServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUp() throws Exception { - loading = MAPPER.readValue(readFromResource("/project/project-loading.json"), Project.class); - enabled = MAPPER.readValue(readFromResource("/project/project.json"), Project.class); - deleted = MAPPER.readValue(readFromResource("/project/project-deleted.json"), Project.class); + loading = readObjectFromResource("/project/project-loading.json", Project.class); + enabled = readObjectFromResource("/project/project.json", Project.class); + deleted = readObjectFromResource("/project/project-deleted.json", Project.class); } @Test @@ -52,17 +51,17 @@ public void shouldCreateProject() throws Exception { .havingMethodEqualTo("POST") .havingPathEqualTo(Projects.URI) .respond() - .withBody(MAPPER.writeValueAsString(new UriResponse(PROJECT_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse(PROJECT_URI))) .withStatus(202) ; onRequest() .havingMethodEqualTo("GET") .havingPathEqualTo(PROJECT_URI) .respond() - .withBody(MAPPER.writeValueAsString(loading)) + .withBody(OBJECT_MAPPER.writeValueAsString(loading)) .withStatus(202) .thenRespond() - .withBody(MAPPER.writeValueAsString(enabled)) + .withBody(OBJECT_MAPPER.writeValueAsString(enabled)) .withStatus(200) ; @@ -88,7 +87,7 @@ public void shouldFailWhenPollFails() throws Exception { .havingMethodEqualTo("POST") .havingPathEqualTo(Projects.URI) .respond() - .withBody(MAPPER.writeValueAsString(new UriResponse(PROJECT_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse(PROJECT_URI))) .withStatus(202) ; onRequest() @@ -108,14 +107,14 @@ public void shouldFailWhenCantCreateProject() throws Exception { .havingMethodEqualTo("POST") .havingPathEqualTo(Projects.URI) .respond() - .withBody(MAPPER.writeValueAsString(new UriResponse(PROJECT_URI))) + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse(PROJECT_URI))) .withStatus(202) ; onRequest() .havingMethodEqualTo("GET") .havingPathEqualTo(PROJECT_URI) .respond() - .withBody(MAPPER.writeValueAsString(deleted)) + .withBody(OBJECT_MAPPER.writeValueAsString(deleted)) .withStatus(200) ; @@ -175,23 +174,23 @@ public void shouldValidateProject() throws Exception { .havingMethodEqualTo("POST") .havingBody(isJsonString("/project/project-validate.json")) .respond() - .withBody(MAPPER.writeValueAsString(new AsyncTask(task1Uri))) + .withBody(OBJECT_MAPPER.writeValueAsString(new AsyncTask(task1Uri))) .withStatus(201); onRequest() .havingPathEqualTo(task1Uri) .respond() - .withBody(MAPPER.writeValueAsString(new UriResponse(task2Uri))) + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse(task2Uri))) .withHeader("Location", task2Uri) .withStatus(303); onRequest() .havingPathEqualTo(task2Uri) .respond() - .withBody(MAPPER.writeValueAsString(new AsyncTask(task2Uri))) + .withBody(OBJECT_MAPPER.writeValueAsString(new AsyncTask(task2Uri))) .withStatus(202) .thenRespond() - .withBody(MAPPER.writeValueAsString(new UriResponse(resultUri))) + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse(resultUri))) .withHeader("Location", resultUri) .withStatus(303); @@ -223,21 +222,21 @@ public void shouldValidateProject2() throws Exception { .havingMethodEqualTo("POST") .havingBody(isJsonString("/project/project-validate.json")) .respond() - .withBody(MAPPER.writeValueAsString(new AsyncTask(task1Uri))) + .withBody(OBJECT_MAPPER.writeValueAsString(new AsyncTask(task1Uri))) .withStatus(201); onRequest() .havingPathEqualTo(task1Uri) .respond() - .withBody(MAPPER.writeValueAsString(new UriResponse(task2Uri))) + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse(task2Uri))) .withHeader("Location", task1Uri) .withStatus(303) .thenRespond() - .withBody(MAPPER.writeValueAsString(new TaskStatus("RUNNING", task2Uri))) + .withBody(OBJECT_MAPPER.writeValueAsString(new TaskStatus("RUNNING", task2Uri))) .withHeader("Location", task1Uri) .withStatus(202) .thenRespond() - .withBody(MAPPER.writeValueAsString(new UriResponse(resultUri))) + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse(resultUri))) .withHeader("Location", resultUri) .withStatus(303) ; diff --git a/src/test/java/com/gooddata/project/ProjectTemplateTest.java b/src/test/java/com/gooddata/project/ProjectTemplateTest.java index a770eec07..39495e1d4 100644 --- a/src/test/java/com/gooddata/project/ProjectTemplateTest.java +++ b/src/test/java/com/gooddata/project/ProjectTemplateTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -17,8 +17,7 @@ public class ProjectTemplateTest { @Test public void shouldDeserialize() throws Exception { - final ProjectTemplate template = new ObjectMapper() - .readValue(getClass().getResource("/project/project-template.json"), ProjectTemplate.class); + final ProjectTemplate template = readObjectFromResource("/project/project-template.json", ProjectTemplate.class); assertThat(template, is(notNullValue())); assertThat(template.getUrl(), is("/projectTemplates/ZendeskAnalytics/11")); @@ -28,8 +27,7 @@ public void shouldDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final ProjectTemplate template = new ObjectMapper() - .readValue(getClass().getResource("/project/project-template.json"), ProjectTemplate.class); + final ProjectTemplate template = readObjectFromResource("/project/project-template.json", ProjectTemplate.class); assertThat(template.toString(), matchesPattern(ProjectTemplate.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/project/ProjectTemplatesTest.java b/src/test/java/com/gooddata/project/ProjectTemplatesTest.java index abd90ea41..9a8a34acc 100644 --- a/src/test/java/com/gooddata/project/ProjectTemplatesTest.java +++ b/src/test/java/com/gooddata/project/ProjectTemplatesTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -17,8 +17,7 @@ public class ProjectTemplatesTest { @Test public void shouldDeserialize() throws Exception { - final ProjectTemplates templates = new ObjectMapper() - .readValue(getClass().getResource("/project/project-templates.json"), ProjectTemplates.class); + final ProjectTemplates templates = readObjectFromResource("/project/project-templates.json", ProjectTemplates.class); assertThat(templates, is(notNullValue())); assertThat(templates.getTemplatesInfo(), is(notNullValue())); diff --git a/src/test/java/com/gooddata/project/ProjectTest.java b/src/test/java/com/gooddata/project/ProjectTest.java index 7b57e6c8b..fc488c44a 100644 --- a/src/test/java/com/gooddata/project/ProjectTest.java +++ b/src/test/java/com/gooddata/project/ProjectTest.java @@ -5,12 +5,15 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; -import static org.hamcrest.CoreMatchers.*; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.StringContains.containsString; import static org.hamcrest.core.StringStartsWith.startsWith; @@ -21,8 +24,7 @@ public class ProjectTest { @SuppressWarnings("deprecation") @Test public void testDeserialize() throws Exception { - final Project project = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/project/project.json"), Project.class); + final Project project = readObjectFromResource("/project/project.json", Project.class); assertThat(project, is(notNullValue())); assertThat(project.getAuthorizationToken(), is("AUTH_TOKEN")); @@ -79,7 +81,7 @@ public void testSerialize() throws Exception { final Project project = new Project("TITLE", "SUMMARY", "TOKEN"); project.setProjectTemplate("/projectTemplates/TEMPLATE"); project.setEnvironment(ProjectEnvironment.TESTING); - final String serializedProject = new ObjectMapper().writeValueAsString(project); + final String serializedProject = OBJECT_MAPPER.writeValueAsString(project); assertThat(serializedProject, startsWith("{\"project\"")); @@ -107,8 +109,7 @@ public void testSerialize() throws Exception { @Test public void testDeserializeVerticaProject() throws Exception { - final Project project = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/project/project-vertica.json"), Project.class); + final Project project = readObjectFromResource("/project/project-vertica.json", Project.class); assertThat(project, is(notNullValue())); assertThat(project.getDriver(), is("vertica")); @@ -121,7 +122,7 @@ public void testSerializeVerticaProject() throws Exception { final Project project = new Project("TITLE", "SUMMARY", "TOKEN"); project.setDriver(ProjectDriver.VERTICA); project.setProjectTemplate("/projectTemplates/TEMPLATE"); - final String serializedProject = new ObjectMapper().writeValueAsString(project); + final String serializedProject = OBJECT_MAPPER.writeValueAsString(project); assertThat(serializedProject, startsWith("{\"project\"")); assertThat(serializedProject, containsString("\"driver\":\"vertica\"")); diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java index 301c00d7c..13451c5e0 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultItemTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; @@ -16,8 +16,7 @@ public class ProjectValidationResultItemTest { @Test public void testDeserialize() throws Exception { - final ProjectValidationResultItem item = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/project/project-validationResultItem.json"), ProjectValidationResultItem.class); + final ProjectValidationResultItem item = readObjectFromResource("/project/project-validationResultItem.json", ProjectValidationResultItem.class); assertThat(item.getValidation(), is(ProjectValidationType.PDM_TRANSITIVITY)); assertThat(item.getLogs(), hasSize(3)); diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java index 0a2480896..a64ae2f2f 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultParamTest.java @@ -11,6 +11,7 @@ import java.util.List; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static java.util.Arrays.asList; import static org.hamcrest.MatcherAssert.assertThat; @@ -20,7 +21,7 @@ public class ProjectValidationResultParamTest { @Test public void testDeser() throws Exception { - final List result = new ObjectMapper() + final List result = OBJECT_MAPPER .readValue(getClass().getResourceAsStream("/project/project-validationResultParam.json"), new TypeReference>() { }); diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java index 143f5ec99..ec80813cf 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; @@ -17,8 +17,7 @@ public class ProjectValidationResultTest { @Test public void testDeserialize() throws Exception { - final ProjectValidationResult log = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/project/project-validationResultLog.json"), ProjectValidationResult.class); + final ProjectValidationResult log = readObjectFromResource("/project/project-validationResultLog.json", ProjectValidationResult.class); assertThat(log.getCategory(), is("TRANSITIVITY")); assertThat(log.getLevel(), is("WARN")); @@ -29,8 +28,7 @@ public void testDeserialize() throws Exception { @Test public void testToStringFormat() throws Exception { - final ProjectValidationResult log = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/project/project-validationResultLog.json"), ProjectValidationResult.class); + final ProjectValidationResult log = readObjectFromResource("/project/project-validationResultLog.json", ProjectValidationResult.class); assertThat(log.toString(), matchesPattern(ProjectValidationResult.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java b/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java index 44b3c0971..aff7ebb9d 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationResultsTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -16,8 +16,7 @@ public class ProjectValidationResultsTest { @Test public void testDeserialize() throws Exception { - final ProjectValidationResults result = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/project/project-validationResults.json"), ProjectValidationResults.class); + final ProjectValidationResults result = readObjectFromResource("/project/project-validationResults.json", ProjectValidationResults.class); assertThat(result.isError(), is(true)); assertThat(result.isFatalError(), is(true)); diff --git a/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java b/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java index 1489a1fc8..08968de9a 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationTypeTest.java @@ -5,9 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @@ -16,13 +16,13 @@ public class ProjectValidationTypeTest { @Test public void testSerialize() throws Exception { - final String myValidationType = new ObjectMapper().writeValueAsString(new ProjectValidationType("myValidationType")); + final String myValidationType = OBJECT_MAPPER.writeValueAsString(new ProjectValidationType("myValidationType")); assertThat(myValidationType, is("\"myValidationType\"")); } @Test public void testDeserialize() throws Exception { - final ProjectValidationType myValidationType = new ObjectMapper().readValue("\"myValidationType\"", ProjectValidationType.class); + final ProjectValidationType myValidationType = OBJECT_MAPPER.readValue("\"myValidationType\"", ProjectValidationType.class); assertThat(myValidationType, notNullValue()); assertThat(myValidationType.getValue(), is("myValidationType")); } diff --git a/src/test/java/com/gooddata/project/ProjectValidationsTest.java b/src/test/java/com/gooddata/project/ProjectValidationsTest.java index b30c09211..59edcb881 100644 --- a/src/test/java/com/gooddata/project/ProjectValidationsTest.java +++ b/src/test/java/com/gooddata/project/ProjectValidationsTest.java @@ -5,7 +5,6 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import static com.gooddata.JsonMatchers.serializesToJson; @@ -16,6 +15,7 @@ import static com.gooddata.project.ProjectValidationType.PDM_PK_FK_CONSISTENCY; import static com.gooddata.project.ProjectValidationType.PDM_TRANSITIVITY; import static com.gooddata.project.ProjectValidationType.PDM_VS_DWH; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.is; @@ -32,8 +32,7 @@ public void testSerialize() throws Exception { @Test public void testDeserialize() throws Exception { - final ProjectValidations validations = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/project/project-validationAvail.json"), ProjectValidations.class); + final ProjectValidations validations = readObjectFromResource("/project/project-validationAvail.json", ProjectValidations.class); assertThat(validations, is(notNullValue())); assertThat(validations.getValidations(), hasItems(PDM_VS_DWH, METRIC_FILTER, PDM_TRANSITIVITY, LDM, diff --git a/src/test/java/com/gooddata/project/RoleTest.java b/src/test/java/com/gooddata/project/RoleTest.java index 727ea63d8..ab57782a5 100644 --- a/src/test/java/com/gooddata/project/RoleTest.java +++ b/src/test/java/com/gooddata/project/RoleTest.java @@ -5,12 +5,11 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.io.IOException; -import java.io.InputStream; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; @@ -44,7 +43,6 @@ public void testEquals() throws IOException { } private Role readRole(final String suffix) throws java.io.IOException { - final InputStream stream = getClass().getResourceAsStream("/project/project-role" + suffix + ".json"); - return new ObjectMapper().readValue(stream, Role.class); + return readObjectFromResource("/project/project-role" + suffix + ".json", Role.class); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/project/RolesTest.java b/src/test/java/com/gooddata/project/RolesTest.java index 4d878869c..d63574f0f 100644 --- a/src/test/java/com/gooddata/project/RolesTest.java +++ b/src/test/java/com/gooddata/project/RolesTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.notNullValue; @@ -20,8 +18,7 @@ public class RolesTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/project/project-roles.json"); - final Roles roles = new ObjectMapper().readValue(stream, Roles.class); + final Roles roles = readObjectFromResource("/project/project-roles.json", Roles.class); assertThat(roles, notNullValue()); assertThat(roles.getRoles(), hasSize(2)); @@ -31,8 +28,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/project/project-roles.json"); - final Roles roles = new ObjectMapper().readValue(stream, Roles.class); + final Roles roles = readObjectFromResource("/project/project-roles.json", Roles.class); assertThat(roles.toString(), matchesPattern(Roles.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/project/UserTest.java b/src/test/java/com/gooddata/project/UserTest.java index 46f48beed..5edb8b6b6 100644 --- a/src/test/java/com/gooddata/project/UserTest.java +++ b/src/test/java/com/gooddata/project/UserTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; @@ -20,8 +18,7 @@ public class UserTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/project/project-user.json"); - final User user = new ObjectMapper().readValue(stream, User.class); + final User user = readObjectFromResource("/project/project-user.json", User.class); assertThat(user, notNullValue()); assertThat(user.getEmail(), is("ateam+ads-testing@gooddata.com")); @@ -35,8 +32,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/project/project-user.json"); - final User user = new ObjectMapper().readValue(stream, User.class); + final User user = readObjectFromResource("/project/project-user.json", User.class); assertThat(user.toString(), matchesPattern(User.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/project/UsersTest.java b/src/test/java/com/gooddata/project/UsersTest.java index fbd820df8..dcf74a6c3 100644 --- a/src/test/java/com/gooddata/project/UsersTest.java +++ b/src/test/java/com/gooddata/project/UsersTest.java @@ -5,11 +5,9 @@ */ package com.gooddata.project; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; - +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; @@ -21,8 +19,7 @@ public class UsersTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/project/project-users.json"); - final Users users = new ObjectMapper().readValue(stream, Users.class); + final Users users = readObjectFromResource("/project/project-users.json", Users.class); assertThat(users, notNullValue()); assertThat(users, hasSize(1)); diff --git a/src/test/java/com/gooddata/report/ReportServiceIT.java b/src/test/java/com/gooddata/report/ReportServiceIT.java index 1498176c0..1b2b8768d 100644 --- a/src/test/java/com/gooddata/report/ReportServiceIT.java +++ b/src/test/java/com/gooddata/report/ReportServiceIT.java @@ -16,7 +16,9 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.jadler.Jadler.onRequest; import static net.jadler.Jadler.port; import static org.hamcrest.Matchers.is; @@ -39,7 +41,7 @@ public void setUp() throws IOException { .havingMethodEqualTo("POST") .respond() .withStatus(202) - .withBody(MAPPER.writeValueAsString(new UriResponse("http://localhost:" + port() + URI))); + .withBody(OBJECT_MAPPER.writeValueAsString(new UriResponse("http://localhost:" + port() + URI))); onRequest() .havingPathEqualTo(URI) .havingMethodEqualTo("GET") @@ -53,7 +55,7 @@ public void setUp() throws IOException { @Test public void shouldExportReportDefinition() throws Exception { - final ReportDefinition rd = MAPPER.readValue(readFromResource("/md/report/gridReportDefinition.json"), ReportDefinition.class); + final ReportDefinition rd = readObjectFromResource("/md/report/gridReportDefinition.json", ReportDefinition.class); final ByteArrayOutputStream output = new ByteArrayOutputStream(); gd.getReportService().exportReport(rd, ReportExportFormat.CSV, output).get(); assertThat(output.toString(StandardCharsets.US_ASCII.name()), is(RESPONSE)); @@ -61,7 +63,7 @@ public void shouldExportReportDefinition() throws Exception { @Test public void shouldExportReport() throws Exception { - final Report rd = MAPPER.readValue(readFromResource("/md/report/report.json"), Report.class); + final Report rd = readObjectFromResource("/md/report/report.json", Report.class); final ByteArrayOutputStream output = new ByteArrayOutputStream(); gd.getReportService().exportReport(rd, ReportExportFormat.CSV, output).get(); assertThat(output.toString(StandardCharsets.US_ASCII.name()), is(RESPONSE)); @@ -75,7 +77,7 @@ public void shouldFail() throws Exception { .respond() .withStatus(400); - final Report rd = MAPPER.readValue(readFromResource("/md/report/report.json"), Report.class); + final Report rd = readObjectFromResource("/md/report/report.json", Report.class); final ByteArrayOutputStream output = new ByteArrayOutputStream(); gd.getReportService().exportReport(rd, ReportExportFormat.CSV, output).get(); } @@ -88,7 +90,7 @@ public void shouldFailNoData() throws Exception { .respond() .withStatus(204); - final Report rd = MAPPER.readValue(readFromResource("/md/report/report.json"), Report.class); + final Report rd = readObjectFromResource("/md/report/report.json", Report.class); final ByteArrayOutputStream output = new ByteArrayOutputStream(); gd.getReportService().exportReport(rd, ReportExportFormat.CSV, output).get(); } diff --git a/src/test/java/com/gooddata/util/BooleanDeserializerTest.java b/src/test/java/com/gooddata/util/BooleanDeserializerTest.java index f723e2345..4680a237d 100644 --- a/src/test/java/com/gooddata/util/BooleanDeserializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanDeserializerTest.java @@ -9,54 +9,53 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class BooleanDeserializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void shouldDeserializeIntegerTrue() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(true)); + final String json = OBJECT_MAPPER.writeValueAsString(new BooleanIntegerClass(true)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("foo").numberValue().intValue(), is(1)); - final BooleanIntegerClass moo = MAPPER.readValue(json, BooleanIntegerClass.class); + final BooleanIntegerClass moo = OBJECT_MAPPER.readValue(json, BooleanIntegerClass.class); assertThat(moo.isFoo(), is(true)); } @Test public void shouldDeserializeIntegerFalse() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(false)); + final String json = OBJECT_MAPPER.writeValueAsString(new BooleanIntegerClass(false)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("foo").numberValue().intValue(), is(0)); - final BooleanIntegerClass moo = MAPPER.readValue(json, BooleanIntegerClass.class); + final BooleanIntegerClass moo = OBJECT_MAPPER.readValue(json, BooleanIntegerClass.class); assertThat(moo.isFoo(), is(false)); } @Test public void shouldDeserializeStringTrue() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanStringClass(true)); + final String json = OBJECT_MAPPER.writeValueAsString(new BooleanStringClass(true)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("foo").textValue(), is("1")); - final BooleanStringClass moo = MAPPER.readValue(json, BooleanStringClass.class); + final BooleanStringClass moo = OBJECT_MAPPER.readValue(json, BooleanStringClass.class); assertThat(moo.isFoo(), is(true)); } @Test public void shouldDeserializeStringFalse() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanStringClass(false)); + final String json = OBJECT_MAPPER.writeValueAsString(new BooleanStringClass(false)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("foo").textValue(), is("0")); - final BooleanStringClass moo = MAPPER.readValue(json, BooleanStringClass.class); + final BooleanStringClass moo = OBJECT_MAPPER.readValue(json, BooleanStringClass.class); assertThat(moo.isFoo(), is(false)); } diff --git a/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java b/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java index 7db295878..796f4a002 100644 --- a/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanIntegerSerializerTest.java @@ -6,29 +6,27 @@ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class BooleanIntegerSerializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void shouldSerializeTrue() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(true)); + final String json = OBJECT_MAPPER.writeValueAsString(new BooleanIntegerClass(true)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("foo").numberValue().intValue(), is(1)); } @Test public void shouldSerializeFalse() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanIntegerClass(false)); + final String json = OBJECT_MAPPER.writeValueAsString(new BooleanIntegerClass(false)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("foo").numberValue().intValue(), is(0)); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java b/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java index c4a2ce598..32db34423 100644 --- a/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java +++ b/src/test/java/com/gooddata/util/BooleanStringSerializerTest.java @@ -6,29 +6,27 @@ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class BooleanStringSerializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void shouldSerializeTrue() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanStringClass(true)); + final String json = OBJECT_MAPPER.writeValueAsString(new BooleanStringClass(true)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("foo").textValue(), is("1")); } @Test public void shouldSerializeFalse() throws Exception { - final String json = MAPPER.writeValueAsString(new BooleanStringClass(false)); + final String json = OBJECT_MAPPER.writeValueAsString(new BooleanStringClass(false)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("foo").textValue(), is("0")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java index 2119896f9..3a232cd06 100644 --- a/src/test/java/com/gooddata/util/GDDateDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateDeserializerTest.java @@ -10,21 +10,20 @@ import org.joda.time.LocalDate; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class GDDateDeserializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testDeserialize() throws Exception { - final String json = MAPPER.writeValueAsString(new GDDateClass(new LocalDate(2012, 3, 20))); + final String json = OBJECT_MAPPER.writeValueAsString(new GDDateClass(new LocalDate(2012, 3, 20))); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("date").textValue(), is("2012-03-20")); - final GDDateClass date = MAPPER.readValue(json, GDDateClass.class); + final GDDateClass date = OBJECT_MAPPER.readValue(json, GDDateClass.class); assertThat(date.getDate(), is(new LocalDate(2012, 3, 20))); } diff --git a/src/test/java/com/gooddata/util/GDDateSerializerTest.java b/src/test/java/com/gooddata/util/GDDateSerializerTest.java index 6abd62593..4a47c9b60 100644 --- a/src/test/java/com/gooddata/util/GDDateSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateSerializerTest.java @@ -6,22 +6,20 @@ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.LocalDate; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class GDDateSerializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testSerialize() throws Exception { final GDDateClass foo = new GDDateClass(new LocalDate(2012, 3, 20)); - final String json = MAPPER.writeValueAsString(foo); - final JsonNode node = MAPPER.readTree(json); + final String json = OBJECT_MAPPER.writeValueAsString(foo); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("date").textValue(), is("2012-03-20")); } diff --git a/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java b/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java index 4f57321e0..a5511d9a9 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateTimeDeserializerTest.java @@ -6,26 +6,24 @@ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class GDDateTimeDeserializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testDeserialize() throws Exception { - final String json = MAPPER.writeValueAsString(new GDDateTimeClass(new DateTime(2012, 3, 20, 14, 31, 5, 3, DateTimeZone.UTC))); + final String json = OBJECT_MAPPER.writeValueAsString(new GDDateTimeClass(new DateTime(2012, 3, 20, 14, 31, 5, 3, DateTimeZone.UTC))); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("date").textValue(), is("2012-03-20 14:31:05")); - final GDDateTimeClass date = MAPPER.readValue(json, GDDateTimeClass.class); + final GDDateTimeClass date = OBJECT_MAPPER.readValue(json, GDDateTimeClass.class); assertThat(date.getDate(), is(new DateTime(2012, 3, 20, 14, 31, 5, DateTimeZone.UTC))); } } diff --git a/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java b/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java index 6321c0689..0f90d2a60 100644 --- a/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java +++ b/src/test/java/com/gooddata/util/GDDateTimeSerializerTest.java @@ -6,23 +6,21 @@ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class GDDateTimeSerializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testSerialize() throws Exception { final GDDateTimeClass foo = new GDDateTimeClass(new DateTime(2012, 3, 20, 14, 31, 5, 3, DateTimeZone.UTC)); - final String json = MAPPER.writeValueAsString(foo); - final JsonNode node = MAPPER.readTree(json); + final String json = OBJECT_MAPPER.writeValueAsString(foo); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("date").textValue(), is("2012-03-20 14:31:05")); } diff --git a/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java b/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java index 34af7035b..ac284909e 100644 --- a/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java +++ b/src/test/java/com/gooddata/util/ISODateTimeDeserializerTest.java @@ -6,27 +6,25 @@ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class ISODateTimeDeserializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testDeserialize() throws Exception { final DateTime expected = new DateTime(2012, 3, 20, 14, 31, 5, 3, DateTimeZone.UTC); - final String json = MAPPER.writeValueAsString(new ISODateClass(expected)); + final String json = OBJECT_MAPPER.writeValueAsString(new ISODateClass(expected)); - final JsonNode node = MAPPER.readTree(json); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("date").textValue(), is("2012-03-20T14:31:05.003Z")); - final ISODateClass moo = MAPPER.readValue(json, ISODateClass.class); + final ISODateClass moo = OBJECT_MAPPER.readValue(json, ISODateClass.class); assertThat(moo.getDate(), is(expected)); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java b/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java index eb6ef0c72..58d055fc2 100644 --- a/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java +++ b/src/test/java/com/gooddata/util/ISODateTimeSerializerTest.java @@ -6,23 +6,21 @@ package com.gooddata.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class ISODateTimeSerializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void testSerialize() throws Exception { final ISODateClass foo = new ISODateClass(new DateTime(2012, 3, 20, 14, 31, 5, 3, DateTimeZone.UTC)); - final String json = MAPPER.writeValueAsString(foo); - final JsonNode node = MAPPER.readTree(json); + final String json = OBJECT_MAPPER.writeValueAsString(foo); + final JsonNode node = OBJECT_MAPPER.readTree(json); assertThat(node.path("date").textValue(), is("2012-03-20T14:31:05.003Z")); } diff --git a/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java b/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java index 3d4addcc1..f4450491a 100644 --- a/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java +++ b/src/test/java/com/gooddata/util/ResponseErrorHandlerTest.java @@ -5,7 +5,6 @@ */ package com.gooddata.util; -import com.fasterxml.jackson.databind.ObjectMapper; import com.gooddata.GoodData; import com.gooddata.GoodDataRestException; import org.springframework.http.HttpHeaders; @@ -18,6 +17,7 @@ import java.io.IOException; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; @@ -28,8 +28,6 @@ public class ResponseErrorHandlerTest { - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - private ResponseErrorHandler responseErrorHandler; @BeforeMethod diff --git a/src/test/java/com/gooddata/util/TagsDeserializerTest.java b/src/test/java/com/gooddata/util/TagsDeserializerTest.java index b18b4e78c..d797ff2e9 100644 --- a/src/test/java/com/gooddata/util/TagsDeserializerTest.java +++ b/src/test/java/com/gooddata/util/TagsDeserializerTest.java @@ -5,33 +5,33 @@ */ package com.gooddata.util; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.hasItems; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; public class TagsDeserializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void shouldDeserializeOneToken() throws Exception { - final TagsTestClass tags = MAPPER.readValue("{\"tags\":\"TAG\"}", TagsTestClass.class); + final TagsTestClass tags = OBJECT_MAPPER.readValue("{\"tags\":\"TAG\"}", TagsTestClass.class); assertThat(tags.getTags(), hasSize(1)); assertThat(tags.getTags().iterator().next(), is("TAG")); } @Test public void shouldDeserializeTwoTokens() throws Exception { - final TagsTestClass tags = MAPPER.readValue("{\"tags\":\"TAG TAG2\"}", TagsTestClass.class); + final TagsTestClass tags = OBJECT_MAPPER.readValue("{\"tags\":\"TAG TAG2\"}", TagsTestClass.class); assertThat(tags.getTags(), hasSize(2)); assertThat(tags.getTags(), hasItems("TAG", "TAG2")); } @Test public void shouldDeserializeMultipleWhitespaceSeparatedTokens() throws Exception { - final TagsTestClass tags = MAPPER.readValue("{\"tags\":\"TAG TAG2\"}", TagsTestClass.class); + final TagsTestClass tags = OBJECT_MAPPER.readValue("{\"tags\":\"TAG TAG2\"}", TagsTestClass.class); assertThat(tags.getTags(), hasSize(2)); assertThat(tags.getTags(), hasItems("TAG", "TAG2")); } diff --git a/src/test/java/com/gooddata/util/TagsSerializerTest.java b/src/test/java/com/gooddata/util/TagsSerializerTest.java index 24e42f15d..047955bf5 100644 --- a/src/test/java/com/gooddata/util/TagsSerializerTest.java +++ b/src/test/java/com/gooddata/util/TagsSerializerTest.java @@ -5,12 +5,12 @@ */ package com.gooddata.util; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.util.Collections; import java.util.LinkedHashSet; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static java.util.Arrays.asList; import static java.util.Collections.singleton; import static org.hamcrest.MatcherAssert.assertThat; @@ -18,26 +18,24 @@ public class TagsSerializerTest { - private static final ObjectMapper MAPPER = new ObjectMapper(); - @Test public void shouldSerializeOneTag() throws Exception { final TagsTestClass tags = new TagsTestClass(singleton("TAG")); - final String jsonString = MAPPER.writeValueAsString(tags); + final String jsonString = OBJECT_MAPPER.writeValueAsString(tags); assertThat(jsonString, is("{\"tags\":\"TAG\"}")); } @Test public void shouldSerializeZeroTags() throws Exception { final TagsTestClass tags = new TagsTestClass(Collections.emptySet()); - final String jsonString = MAPPER.writeValueAsString(tags); + final String jsonString = OBJECT_MAPPER.writeValueAsString(tags); assertThat(jsonString, is("{\"tags\":\"\"}")); } @Test public void shouldSerializeTwoTags() throws Exception { final TagsTestClass tags = new TagsTestClass(new LinkedHashSet<>(asList("TAG", "TAG2"))); - final String jsonString = MAPPER.writeValueAsString(tags); + final String jsonString = OBJECT_MAPPER.writeValueAsString(tags); assertThat(jsonString, is("{\"tags\":\"TAG TAG2\"}")); } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java b/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java index e8ea543ad..4e76f6d4d 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseSchemaTest.java @@ -5,18 +5,17 @@ */ package com.gooddata.warehouse; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.core.Is.is; -import static org.hamcrest.text.MatchesPattern.matchesPattern; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; import java.util.LinkedHashMap; import java.util.Map; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; +import static org.hamcrest.text.MatchesPattern.matchesPattern; + public class WarehouseSchemaTest { private static final String NAME = "default"; @@ -32,8 +31,7 @@ public class WarehouseSchemaTest { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/warehouse/schema.json"); - final WarehouseSchema warehouseSchema = new ObjectMapper().readValue(stream, WarehouseSchema.class); + final WarehouseSchema warehouseSchema = readObjectFromResource("/warehouse/schema.json", WarehouseSchema.class); assertThat(warehouseSchema.getName(), is(NAME)); assertThat(warehouseSchema.getDescription(), is(DESCRIPTION)); @@ -42,8 +40,7 @@ public void testDeserialization() throws Exception { @Test public void testToStringFormat() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/warehouse/schema.json"); - final WarehouseSchema warehouseSchema = new ObjectMapper().readValue(stream, WarehouseSchema.class); + final WarehouseSchema warehouseSchema = readObjectFromResource("/warehouse/schema.json", WarehouseSchema.class); assertThat(warehouseSchema.toString(), matchesPattern(WarehouseSchema.class.getSimpleName() + "\\[.*\\]")); } diff --git a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java index a7fb6dd4c..b6e3286cc 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseServiceIT.java @@ -18,7 +18,9 @@ import java.io.IOException; import java.util.Collections; +import static com.gooddata.util.ResourceUtils.OBJECT_MAPPER; import static com.gooddata.util.ResourceUtils.readFromResource; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static net.jadler.Jadler.onRequest; import static net.jadler.Jadler.verifyThatRequest; import static org.hamcrest.MatcherAssert.assertThat; @@ -52,10 +54,10 @@ public class WarehouseServiceIT extends AbstractGoodDataIT { @BeforeClass public void setUp() throws Exception { - pollingTask = MAPPER.readValue(readFromResource(TASK_POLL), WarehouseTask.class); - finishedTask = MAPPER.readValue(readFromResource(TASK_DONE), WarehouseTask.class); - warehouse = MAPPER.readValue(readFromResource(WAREHOUSE), Warehouse.class); - warehouseSchema = MAPPER.readValue(readFromResource(WAREHOUSE_SCHEMA), WarehouseSchema.class); + pollingTask = readObjectFromResource(TASK_POLL, WarehouseTask.class); + finishedTask = readObjectFromResource(TASK_DONE, WarehouseTask.class); + warehouse = readObjectFromResource(WAREHOUSE, Warehouse.class); + warehouseSchema = readObjectFromResource(WAREHOUSE_SCHEMA, WarehouseSchema.class); } @Test @@ -151,7 +153,7 @@ public void shouldUpdateWarehouse() throws Exception { final String updatedTitle = "UPDATED_TITLE"; - final Warehouse toUpdate = MAPPER.readValue(readFromResource(WAREHOUSE), Warehouse.class); + final Warehouse toUpdate = readObjectFromResource(WAREHOUSE, Warehouse.class); toUpdate.setTitle(updatedTitle); onRequest() @@ -163,7 +165,7 @@ public void shouldUpdateWarehouse() throws Exception { .havingMethodEqualTo("GET") .havingPathEqualTo(warehouse.getUri()) .respond() - .withBody(MAPPER.writeValueAsString(toUpdate)) + .withBody(OBJECT_MAPPER.writeValueAsString(toUpdate)) .withStatus(200); final Warehouse updated = gd.getWarehouseService().updateWarehouse(toUpdate); @@ -177,7 +179,7 @@ public void shouldUpdateWarehouse() throws Exception { @Override public boolean matches(Object o) { try { - Warehouse instance = MAPPER.readValue((String) o, Warehouse.class); + Warehouse instance = OBJECT_MAPPER.readValue((String) o, Warehouse.class); return updatedTitle.equals(instance.getTitle()); } catch (IOException e) { return false; diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java index 5bdfdf3b4..7e321e307 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTaskTest.java @@ -5,20 +5,18 @@ */ package com.gooddata.warehouse; -import static org.hamcrest.core.Is.is; -import static org.hamcrest.MatcherAssert.*; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; -import java.io.InputStream; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; public class WarehouseTaskTest { @SuppressWarnings("deprecation") @Test public void testDeserializePoll() throws Exception { - final WarehouseTask warehouseTask = deserialize("/warehouse/warehouseTask-poll.json"); + final WarehouseTask warehouseTask = readObjectFromResource("/warehouse/warehouseTask-poll.json", WarehouseTask.class); assertThat(warehouseTask.getPollLink(), is("/gdc/datawarehouse/executions/executionId")); assertThat(warehouseTask.getPollUri(), is("/gdc/datawarehouse/executions/executionId")); } @@ -26,13 +24,9 @@ public void testDeserializePoll() throws Exception { @SuppressWarnings("deprecation") @Test public void testDeserializeInstance() throws Exception { - final WarehouseTask warehouseTask = deserialize("/warehouse/warehouseTask-finished.json"); + final WarehouseTask warehouseTask = readObjectFromResource("/warehouse/warehouseTask-finished.json", WarehouseTask.class); assertThat(warehouseTask.getWarehouseLink(), is("/gdc/datawarehouse/instances/instanceId")); assertThat(warehouseTask.getWarehouseUri(), is("/gdc/datawarehouse/instances/instanceId")); } - private WarehouseTask deserialize(String path) throws Exception { - final InputStream stream = getClass().getResourceAsStream(path); - return new ObjectMapper().readValue(stream, WarehouseTask.class); - } } \ No newline at end of file diff --git a/src/test/java/com/gooddata/warehouse/WarehouseTest.java b/src/test/java/com/gooddata/warehouse/WarehouseTest.java index f16042035..8e1b3a770 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseTest.java @@ -6,6 +6,7 @@ package com.gooddata.warehouse; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.core.Is.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -68,8 +69,7 @@ public void testSerializationWithLicense() throws Exception { @Test public void testDeserialization() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/warehouse/warehouse.json"); - final Warehouse warehouse = new ObjectMapper().readValue(stream, Warehouse.class); + final Warehouse warehouse = readObjectFromResource("/warehouse/warehouse.json", Warehouse.class); assertThat(warehouse.getTitle(), is(TITLE)); assertThat(warehouse.getDescription(), is(DESCRIPTION)); @@ -86,8 +86,7 @@ public void testDeserialization() throws Exception { @Test public void testDeserializationWithLicense() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/warehouse/warehouse-withLicense.json"); - final Warehouse warehouse = new ObjectMapper().readValue(stream, Warehouse.class); + final Warehouse warehouse = readObjectFromResource("/warehouse/warehouse-withLicense.json", Warehouse.class); assertThat(warehouse.getTitle(), is(TITLE)); assertThat(warehouse.getDescription(), is(DESCRIPTION)); @@ -105,8 +104,7 @@ public void testDeserializationWithLicense() throws Exception { @Test public void testDeserializationWithNullToken() throws Exception { - final InputStream stream = getClass().getResourceAsStream("/warehouse/warehouse-null-token.json"); - final Warehouse warehouse = new ObjectMapper().readValue(stream, Warehouse.class); + final Warehouse warehouse = readObjectFromResource("/warehouse/warehouse-null-token.json", Warehouse.class); assertThat(warehouse.getTitle(), is(TITLE)); assertThat(warehouse.getDescription(), is(DESCRIPTION)); diff --git a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java index a4555edd3..536fdbf32 100644 --- a/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java +++ b/src/test/java/com/gooddata/warehouse/WarehouseUserTest.java @@ -5,13 +5,13 @@ */ package com.gooddata.warehouse; -import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import java.util.LinkedHashMap; import java.util.Map; import static com.gooddata.JsonMatchers.serializesToJson; +import static com.gooddata.util.ResourceUtils.readObjectFromResource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.hamcrest.text.MatchesPattern.matchesPattern; @@ -47,8 +47,7 @@ public void testCompleteSerialization() throws Exception { @Test public void testDeserialization() throws Exception { - final WarehouseUser user = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/warehouse/user.json"), WarehouseUser.class); + final WarehouseUser user = readObjectFromResource("/warehouse/user.json", WarehouseUser.class); assertThat(user.getRole(), is(ROLE)); assertThat(user.getProfile(), is(PROFILE)); @@ -65,8 +64,7 @@ public void testGetId() throws Exception { @Test public void testToStringFormat() throws Exception { - final WarehouseUser user = new ObjectMapper() - .readValue(getClass().getResourceAsStream("/warehouse/user.json"), WarehouseUser.class); + final WarehouseUser user = readObjectFromResource("/warehouse/user.json", WarehouseUser.class); assertThat(user.toString(), matchesPattern(WarehouseUser.class.getSimpleName() + "\\[.*\\]")); } From b0224182dfcdb827d61b4153fccf168adbb3df7f Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 25 May 2017 15:53:37 +0200 Subject: [PATCH 263/934] add: getSanitizedLimit(max) --- .../java/com/gooddata/collections/PageRequest.java | 14 ++++++++++++++ .../com/gooddata/collections/PageRequestTest.java | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/main/java/com/gooddata/collections/PageRequest.java b/src/main/java/com/gooddata/collections/PageRequest.java index 64cf2fd80..e97743dbd 100644 --- a/src/main/java/com/gooddata/collections/PageRequest.java +++ b/src/main/java/com/gooddata/collections/PageRequest.java @@ -70,10 +70,24 @@ public int getLimit() { return limit; } + /** + * Return the limit value or the {@link #DEFAULT_LIMIT} if the limit is lower than or equal to zero + * @return sanitized limit + */ public int getSanitizedLimit() { return limit > 0 ? limit : DEFAULT_LIMIT; } + /** + * Return the {@link #getSanitizedLimit()} if lower than the given maximum or the maximum value + * @param max maximum value + * @return sanitized limit + */ + public int getSanitizedLimit(final int max) { + final int limit = getSanitizedLimit(); + return limit < max ? limit : max; + } + public void setLimit(final int limit) { this.limit = limit; } diff --git a/src/test/java/com/gooddata/collections/PageRequestTest.java b/src/test/java/com/gooddata/collections/PageRequestTest.java index 4d59a2139..564485d47 100644 --- a/src/test/java/com/gooddata/collections/PageRequestTest.java +++ b/src/test/java/com/gooddata/collections/PageRequestTest.java @@ -76,4 +76,16 @@ public void testGetSanitizedLimit() throws Exception { pageRequest.setLimit(-2); assertThat(pageRequest.getSanitizedLimit(), is(DEFAULT_LIMIT)); } + + @Test + public void shouldReturnDefaultForZero() throws Exception { + final PageRequest pageRequest = new PageRequest(0); + assertThat(pageRequest.getSanitizedLimit(), is(DEFAULT_LIMIT)); + } + + @Test + public void shouldReturnMaxForSanitizedLimit() throws Exception { + final PageRequest pageRequest = new PageRequest(100); + assertThat(pageRequest.getSanitizedLimit(10), is(10)); + } } From a72ee494dfd4fdacf0625a94782fb6a5959d7d85 Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 25 May 2017 16:43:50 +0200 Subject: [PATCH 264/934] refactor and remove duplicated code --- .../com/gooddata/dataset/DatasetService.java | 38 ++++++++----------- .../gooddata/dataset/DatasetServiceTest.java | 4 +- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index eef92c864..1ee248e10 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -8,11 +8,14 @@ import com.gooddata.AbstractPollHandler; import com.gooddata.AbstractService; import com.gooddata.FutureResult; -import com.gooddata.PollResult; import com.gooddata.GoodDataException; import com.gooddata.GoodDataRestException; -import com.gooddata.gdc.*; +import com.gooddata.PollResult; import com.gooddata.gdc.AboutLinks.Link; +import com.gooddata.gdc.DataStoreException; +import com.gooddata.gdc.DataStoreService; +import com.gooddata.gdc.TaskStatus; +import com.gooddata.gdc.UriResponse; import com.gooddata.project.Project; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.http.client.ClientHttpResponse; @@ -25,7 +28,10 @@ import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; import java.util.stream.Collectors; import static com.gooddata.util.Validate.notEmpty; @@ -94,19 +100,9 @@ public FutureResult loadDataset(final Project project, final DatasetManife notNull(project, "project"); notNull(dataset, "dataset"); notNull(manifest, "manifest"); - final Path dirPath = Paths.get("/", project.getId() + "_" + RandomStringUtils.randomAlphabetic(3), "/"); - try { - dataStoreService.upload(dirPath.resolve(manifest.getFile()).toString(), dataset); - final String manifestJson = mapper.writeValueAsString(manifest); - final ByteArrayInputStream inputStream = new ByteArrayInputStream(manifestJson.getBytes(UTF_8)); - dataStoreService.upload(dirPath.resolve(MANIFEST_FILE_NAME).toString(), inputStream); + manifest.setSource(dataset); - return pullLoad(project, dirPath, manifest.getDataSet()); - } catch (IOException e) { - throw new DatasetException("Unable to serialize manifest", manifest.getDataSet(), e); - } catch (DataStoreException | GoodDataRestException | RestClientException e) { - throw new DatasetException("Unable to load", manifest.getDataSet(), e); - } + return loadDatasets(project, manifest); } /** @@ -156,7 +152,7 @@ public FutureResult loadDatasets(final Project project, final Collection datasets) } } - private FutureResult pullLoad(Project project, final Path dirPath, final String dataset) { - return pullLoad(project, dirPath, singletonList(dataset)); - } - - private FutureResult pullLoad(Project project, final Path dirPath, final Collection datasets) { + private FutureResult pullLoad(Project project, final String dirPath, final Collection datasets) { final PullTask pullTask = restTemplate - .postForObject(Pull.URI, new Pull(dirPath.toString()), PullTask.class, project.getId()); + .postForObject(Pull.URI, new Pull(dirPath), PullTask.class, project.getId()); return new PollResult<>(this, new AbstractPollHandler(pullTask.getPollUri(), TaskStatus.class, Void.class) { @Override @@ -207,7 +199,7 @@ public void handlePollException(final GoodDataRestException e) { @Override protected void onFinish() { try { - dataStoreService.delete(dirPath.toString()); + dataStoreService.delete(dirPath); } catch (DataStoreException ignored) { // todo log? } diff --git a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java index 65b032bbd..006f0dca6 100644 --- a/src/test/java/com/gooddata/dataset/DatasetServiceTest.java +++ b/src/test/java/com/gooddata/dataset/DatasetServiceTest.java @@ -128,7 +128,9 @@ public void testLoadDatasetWithNullDataset() throws Exception { public void testLoadDatasetWhenUploadFails() throws Exception { doThrow(DataStoreException.class).when(dataStoreService).upload(anyString(), eq(stream)); when(manifest.getFile()).thenReturn(""); - service.loadDataset(project, manifest, stream); + when(manifest.getSource()).thenReturn(stream); + when(manifest.getDataSet()).thenReturn(DATASET_ID); + service.loadDatasets(project, manifest); } @Test(expectedExceptions = IllegalArgumentException.class) From ad71485b81d696986737eeda8f097b0673224a8b Mon Sep 17 00:00:00 2001 From: Martin Caslavsky Date: Thu, 25 May 2017 17:13:34 +0200 Subject: [PATCH 265/934] use simple string to resolve windows issue #456 --- .../java/com/gooddata/dataset/DatasetService.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gooddata/dataset/DatasetService.java b/src/main/java/com/gooddata/dataset/DatasetService.java index 1ee248e10..357a1e19a 100644 --- a/src/main/java/com/gooddata/dataset/DatasetService.java +++ b/src/main/java/com/gooddata/dataset/DatasetService.java @@ -26,8 +26,6 @@ import java.io.IOException; import java.io.InputStream; import java.net.URI; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -40,7 +38,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; import static org.springframework.util.StringUtils.isEmpty; /** @@ -142,17 +139,17 @@ public FutureResult loadDatasets(final Project project, final Collection datasetsNames = new ArrayList<>(datasets.size()); try { - final Path dirPath = Paths.get("/", project.getId() + "_" + RandomStringUtils.randomAlphabetic(3), "/"); + final String dirPath = "/" + project.getId() + "_" + RandomStringUtils.randomAlphabetic(3) + "/"; for (DatasetManifest datasetManifest : datasets) { datasetsNames.add(datasetManifest.getDataSet()); - dataStoreService.upload(dirPath.resolve(datasetManifest.getFile()).toString(), datasetManifest.getSource()); + dataStoreService.upload(dirPath + datasetManifest.getFile(), datasetManifest.getSource()); } final String manifestJson = mapper.writeValueAsString(new DatasetManifests(datasets)); final ByteArrayInputStream inputStream = new ByteArrayInputStream(manifestJson.getBytes(UTF_8)); - dataStoreService.upload(dirPath.resolve(MANIFEST_FILE_NAME).toString(), inputStream); + dataStoreService.upload(dirPath + MANIFEST_FILE_NAME, inputStream); - return pullLoad(project, dirPath.toString(), datasetsNames); + return pullLoad(project, dirPath, datasetsNames); } catch (IOException e) { throw new DatasetException("Unable to serialize manifest", datasetsNames, e); } catch (DataStoreException | GoodDataRestException | RestClientException e) { From 7dcd2fa99fb55f90601ea579b4fcfde5a93a7d20 Mon Sep 17 00:00:00 2001 From: Jiri Mikulasek Date: Tue, 23 May 2017 19:33:23 +0200 Subject: [PATCH 266/934] introduce support for projectTemplates ProjectTemplateService enables to get for list of templates or particular template by URI. --- src/main/java/com/gooddata/GoodData.java | 17 +- .../ProjectTemplateService.java | 75 +++++++ .../gooddata/projecttemplate/Template.java | 189 ++++++++++++++++++ .../gooddata/projecttemplate/Templates.java | 32 +++ .../ProjectTemplateServiceIT.java | 79 ++++++++ .../ProjectTemplateServiceTest.java | 74 +++++++ .../projecttemplate/TemplateTest.java | 44 ++++ .../resources/projecttemplate/template.json | 26 +++ .../resources/projecttemplate/templates.json | 47 +++++ 9 files changed, 581 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/gooddata/projecttemplate/ProjectTemplateService.java create mode 100644 src/main/java/com/gooddata/projecttemplate/Template.java create mode 100644 src/main/java/com/gooddata/projecttemplate/Templates.java create mode 100644 src/test/java/com/gooddata/projecttemplate/ProjectTemplateServiceIT.java create mode 100644 src/test/java/com/gooddata/projecttemplate/ProjectTemplateServiceTest.java create mode 100644 src/test/java/com/gooddata/projecttemplate/TemplateTest.java create mode 100644 src/test/resources/projecttemplate/template.json create mode 100644 src/test/resources/projecttemplate/templates.json diff --git a/src/main/java/com/gooddata/GoodData.java b/src/main/java/com/gooddata/GoodData.java index 7d872bbbe..46828d62e 100644 --- a/src/main/java/com/gooddata/GoodData.java +++ b/src/main/java/com/gooddata/GoodData.java @@ -12,6 +12,7 @@ import com.gooddata.featureflag.FeatureFlagService; import com.gooddata.md.maintenance.ExportImportService; import com.gooddata.notification.NotificationService; +import com.gooddata.projecttemplate.ProjectTemplateService; import com.gooddata.util.ResponseErrorHandler; import com.gooddata.authentication.LoginPasswordAuthentication; import com.gooddata.warehouse.WarehouseService; @@ -81,6 +82,7 @@ public class GoodData { private final ExportImportService exportImportService; private final FeatureFlagService featureFlagService; private final OutputStageService outputStageService; + private final ProjectTemplateService projectTemplateService; /** * Create instance configured to communicate with GoodData Platform under user with given credentials. @@ -211,8 +213,9 @@ protected GoodData(GoodDataEndpoint endpoint, Authentication authentication, Goo connectorService = new ConnectorService(getRestTemplate(), projectService); notificationService = new NotificationService(getRestTemplate()); exportImportService = new ExportImportService(getRestTemplate()); - featureFlagService = new FeatureFlagService(restTemplate); - outputStageService = new OutputStageService(restTemplate); + featureFlagService = new FeatureFlagService(getRestTemplate()); + outputStageService = new OutputStageService(getRestTemplate()); + projectTemplateService = new ProjectTemplateService(getRestTemplate()); } static RestTemplate createRestTemplate(GoodDataEndpoint endpoint, HttpClient httpClient) { @@ -448,4 +451,14 @@ public FeatureFlagService getFeatureFlagService() { public OutputStageService getOutputStageService() { return outputStageService; } + + /** + * Get initialized service for project templates + * + * @return initialized service for project templates + */ + @Bean + public ProjectTemplateService getProjectTemplateService() { + return projectTemplateService; + } } diff --git a/src/main/java/com/gooddata/projecttemplate/ProjectTemplateService.java b/src/main/java/com/gooddata/projecttemplate/ProjectTemplateService.java new file mode 100644 index 000000000..53c59a622 --- /dev/null +++ b/src/main/java/com/gooddata/projecttemplate/ProjectTemplateService.java @@ -0,0 +1,75 @@ +/** + * Copyright (C) 2004-2017, GoodData(R) Corporation. All rights reserved. + * This source code is licensed under the BSD-style license found in the + * LICENSE.txt file in the root directory of this source tree. + */ +package com.gooddata.projecttemplate; + +import com.gooddata.AbstractService; +import com.gooddata.GoodDataException; +import com.gooddata.GoodDataRestException; +import com.gooddata.dataset.DatasetManifest; +import com.gooddata.util.Validate; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import java.util.Collection; +import java.util.stream.Collectors; + +/** + * Service enabling access to project templates, under /projectTemplates/... + */ +public class ProjectTemplateService extends AbstractService { + + /** + * Sets RESTful HTTP Spring template. Should be called from constructor of concrete service extending + * this abstract one. + * + * @param restTemplate RESTful HTTP Spring template + */ + public ProjectTemplateService(RestTemplate restTemplate) { + super(restTemplate); + } + + /** + * List of all projects' templates + * @return list of templates + */ + public Collection