Skip to content

Commit

Permalink
Merge pull request #9 from yahoo/fix_client
Browse files Browse the repository at this point in the history
add some missing import in client
  • Loading branch information
joejoe321321 authored Jan 9, 2017
2 parents c5644fd + 73abb07 commit df3119a
Show file tree
Hide file tree
Showing 7 changed files with 234 additions and 9 deletions.
31 changes: 30 additions & 1 deletion cmd/rdl-gen-parsec-java-client/gentemplate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,35 @@ func TestGenerateImpl(test *testing.T) {
}
}

func TestGenerateImpl2(test *testing.T) {
data, err := ioutil.ReadFile("../../testdata/sample2.json")
if err != nil {
test.Error("can not read sample2 file ")
os.Exit(1)
}
var schema rdl.Schema
err = json.Unmarshal(data, &schema)
if err != nil {
test.Error("unmarshal sample2 data fail")
os.Exit(1)
}

reg := rdl.NewTypeRegistry(&schema)
cName := utils.Capitalize(string(schema.Name))

buf := new (bytes.Buffer)
writer := bufio.NewWriter(buf)
gen := &javaClientGenerator{reg, &schema, cName, writer, nil, "test", "", ""}
gen.processTemplate(javaClientTemplate)
writer.Flush()
realClientImpl := buf.String()
expectedSampleClientImpl, err := ioutil.ReadFile("../../testdata/Sample2ClientImpl.txt")
if realClientImpl != string(expectedSampleClientImpl) {
test.Errorf("sample2 client impl not generated as expected, real: \n%s\n, expected: \n%s\n",
realClientImpl, expectedSampleClientImpl)
}
}

func TestUriConstruct(test *testing.T) {
gen := &javaClientGenerator{nil, nil, "", nil, nil, "test", "", ""}
inputs := []*rdl.ResourceInput{{Name: "id", PathParam: true}}
Expand All @@ -84,4 +113,4 @@ func TestUriConstruct(test *testing.T) {
test.Errorf("uri builder not generate as expected: real: \n%s\n, expected: \n%s\n",
realOut, expectedOut)
}
}
}
18 changes: 14 additions & 4 deletions cmd/rdl-gen-parsec-java-client/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,14 @@ func (gen *javaClientGenerator) processTemplate(templateSource string) error {
}
return false
}
needImportHashSetFunc := func(rs []*rdl.Resource) bool {
for _,r := range rs {
if (needExpectFunc(r)) {
return true;
}
}
return false;
}
funcMap := template.FuncMap{
"header": func() string { return utils.JavaGenerationHeader(gen.banner) },
"package": func() string { return utils.JavaGenerationPackage(gen.schema, gen.ns) },
Expand All @@ -145,6 +153,7 @@ func (gen *javaClientGenerator) processTemplate(templateSource string) error {
"origHeader": func() string { return utils.JavaGenerationOrigHeader(gen.banner) },
"returnType": func(r *rdl.Resource) string { return utils.JavaType(gen.registry, r.Type, true, "", "")},
"needExpect": needExpectFunc,
"needImportHashSet": needImportHashSetFunc,
}
t := template.Must(template.New(gen.name).Funcs(funcMap).Parse(templateSource))
return t.Execute(gen.writer, gen.schema)
Expand Down Expand Up @@ -189,8 +198,9 @@ func (gen *javaClientGenerator) needBody(r *rdl.Resource) bool {
}

const javaClientInterfaceTemplate = `{{origHeader}}
package {{origPackage}}
package {{origPackage}};
import java.util.concurrent.CompletableFuture;
import {{package}}.ResourceException;
{{range .Types}}{{if .StructTypeDef}}{{if .StructTypeDef.Name}}import {{package}}.{{.StructTypeDef.Name}};
{{end}}{{end}}{{end}}
Expand All @@ -206,6 +216,7 @@ package {{origPackage}};
import {{package}}.ResourceException;
{{range .Types}}{{if .StructTypeDef}}{{if .StructTypeDef.Name}}import {{package}}.{{.StructTypeDef.Name}};
{{end}}{{end}}{{end}}
import com.ning.http.client.AsyncHandler;
import com.yahoo.parsec.clients.DefaultAsyncCompletionHandler;
import com.yahoo.parsec.clients.ParsecAsyncHttpClient;
import com.yahoo.parsec.clients.ParsecAsyncHttpRequest;
Expand All @@ -216,12 +227,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import java.net.URI;
import java.util.HashSet;
{{if needImportHashSet .Resources}}import java.util.HashSet;
import java.util.Set;{{end}}
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
Expand Down
2 changes: 1 addition & 1 deletion cmd/rdl-gen-parsec-java-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,7 @@ import java.util.Arrays;
import java.util.LinkedHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.yahoo.ec.parsec.logging.LogUtil;
import com.yahoo.parsec.logging.LogUtil;
import org.codehaus.jackson.map.ObjectMapper;
{{classImports}}
Expand Down
130 changes: 130 additions & 0 deletions testdata/Sample2ClientImpl.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
//
// This file is generated by test
// WILL NOT be auto-generated if file has already existed.
//
package com.example;

import com.example.parsec_generated.ResourceException;
import com.example.parsec_generated.User;

import com.ning.http.client.AsyncHandler;
import com.yahoo.parsec.clients.DefaultAsyncCompletionHandler;
import com.yahoo.parsec.clients.ParsecAsyncHttpClient;
import com.yahoo.parsec.clients.ParsecAsyncHttpRequest;
import com.yahoo.parsec.clients.ParsecAsyncHttpRequest.Builder;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.ws.rs.core.UriBuilder;
import java.net.URI;

import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class SampleClientImpl implements SampleClient {

/** Logger. */
private static final Logger LOGGER = LoggerFactory.getLogger(SampleClientImpl.class);

/** ParsecAsyncHttpClient. */
private final ParsecAsyncHttpClient parsecAsyncHttpClient;

/** Object mapper */
private final ObjectMapper objectMapper;

/** URL. */
private String url;

/** Headers. */
private final Map<String, String> headers;

/**
* connection timeout.
*/
private static final int IDLE_CONNECTION_TIMEOUT_IN_MS = 15000;

/**
* total connections.
*/
private static final int MAXIMUM_CONNECTIONS_TOTAL = 50;

public SampleClientImpl(
String url,
Map<String, String> headers
) {

ParsecAsyncHttpClient client = null;
try {
client = new ParsecAsyncHttpClient.Builder()
.setAcceptAnyCertificate(true)
.setAllowPoolingConnections(true)
.setPooledConnectionIdleTimeout(IDLE_CONNECTION_TIMEOUT_IN_MS)
.setMaxConnections(MAXIMUM_CONNECTIONS_TOTAL)
.build();
} catch (ExecutionException e) {
LOGGER.error("create ParsecAsyncHttpClient failed. " + e.getMessage());
throw new ResourceException(ResourceException.INTERNAL_SERVER_ERROR, e.getMessage());
}
this.parsecAsyncHttpClient = client;
this.objectMapper = new ObjectMapper();
this.url = url;
this.headers = headers;
}

public SampleClientImpl (
ParsecAsyncHttpClient client,
ObjectMapper objectMapper,
String url,
Map<String, String> headers)
{
this.parsecAsyncHttpClient = client;
this.objectMapper = objectMapper;
this.url = url;
this.headers = headers;
}

private ParsecAsyncHttpRequest getRequest(String method, URI uri, String body) throws ResourceException {
Builder builder = new Builder();

builder.setUri(uri);
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
builder.addHeader(entry.getKey(), entry.getValue());
}
}

builder.setMethod(method);

builder.setBody(body).setBodyEncoding("UTF-8");

ParsecAsyncHttpRequest request = null;
try {
request = builder.build();
} catch (Exception e) {
LOGGER.error("builder build failed: " + e.getMessage());
throw new ResourceException(ResourceException.INTERNAL_SERVER_ERROR, e.getMessage());
}
return request;
}

@Override
public CompletableFuture<User> getUser(int id) throws ResourceException {
String path = "/user/{id}";
String body = null;

URI uri = UriBuilder.fromUri(url).path(path)
.resolveTemplate("id", id)
.build();
ParsecAsyncHttpRequest request = getRequest("GET", uri, body);


AsyncHandler<User> asyncHandler = new DefaultAsyncCompletionHandler<>(User.class);

return parsecAsyncHttpClient.criticalExecute(request, asyncHandler);
}

}
3 changes: 2 additions & 1 deletion testdata/SampleClient.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
// This file is generated by test
// WILL NOT be auto-generated if file has already existed.
//
package com.example
package com.example;

import java.util.concurrent.CompletableFuture;
import com.example.parsec_generated.ResourceException;
import com.example.parsec_generated.User;
import com.example.parsec_generated.Users;
Expand Down
4 changes: 2 additions & 2 deletions testdata/SampleClientImpl.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.example.parsec_generated.ResourceException;
import com.example.parsec_generated.User;
import com.example.parsec_generated.Users;

import com.ning.http.client.AsyncHandler;
import com.yahoo.parsec.clients.DefaultAsyncCompletionHandler;
import com.yahoo.parsec.clients.ParsecAsyncHttpClient;
import com.yahoo.parsec.clients.ParsecAsyncHttpRequest;
Expand All @@ -18,12 +19,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import java.net.URI;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

Expand Down
55 changes: 55 additions & 0 deletions testdata/sample2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{
"namespace": "com.example",
"name": "sample",
"version": 1,
"types": [
{
"StructTypeDef": {
"type": "Struct",
"name": "User",
"fields": [
{
"name": "name",
"type": "String",
"annotations": {
"x_size": "min=3"
}
},
{
"name": "id",
"type": "String"
}
]
}
}
],
"resources": [
{
"type": "User",
"method": "GET",
"path": "/user/{id}",
"inputs": [
{
"name": "id",
"type": "int32",
"pathParam": true
}
],
"expected": "OK",
"exceptions": {
"BAD_REQUEST": {
"type": "ResourceError"
},
"FORBIDDEN": {
"type": "ResourceError"
},
"INTERNAL_SERVER_ERROR": {
"type": "ResourceError"
},
"UNAUTHORIZED": {
"type": "ResourceError"
}
}
}
]
}

0 comments on commit df3119a

Please sign in to comment.