Skip to content

Commit 2d82d38

Browse files
add code examples
1 parent 92b7a21 commit 2d82d38

File tree

19 files changed

+577
-4
lines changed

19 files changed

+577
-4
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<monitor.version>1.4.0</monitor.version>
3333
<admin.version>2.0.0</admin.version>
3434
<webforms.version>2.1.0</webforms.version>
35-
<iam.version>0.0.1-alpha.1</iam.version>
35+
<iam.version>1.0.0-beta.6</iam.version>
3636
<swagger-core-version>2.2.22</swagger-core-version>
3737
<jackson-version>2.17.2</jackson-version>
3838
<jersey2.version>3.1.10</jersey2.version>

src/main/java/com/docusign/common/ApiIndex.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public enum ApiIndex {
1010
NAVIGATOR("/pages/navigator/index", "/restapi", "/nav001", "/nav"),
1111
NOTARY("/pages/notary/index", "/restapi", "/n004", "/n"),
1212
WEBFORMS("/pages/webforms/index", "/restapi", "/web001", "/web"),
13-
CONNECTEDFIELDS("/pages/connectedfields/index", "/restapi", "/cf001", "/cf");
13+
CONNECTEDFIELDS("/pages/connectedfields/index", "/restapi", "/cf001", "/cf"),
14+
WORKSPACES("/pages/workspaces/index", "/restapi", "/work001", "/work");
1415

1516
private final String indexPath;
1617

src/main/java/com/docusign/common/WorkArguments.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,4 +186,10 @@ public class WorkArguments {
186186
private String instanceName;
187187

188188
private String folderName;
189+
190+
private String workspaceName;
191+
192+
private String documentName;
193+
194+
private String documentPath;
189195
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.docusign.controller.workspaces.examples;
2+
3+
import com.docusign.DSConfiguration;
4+
import com.docusign.core.controller.AbstractController;
5+
import com.docusign.core.model.Session;
6+
import com.docusign.core.model.User;
7+
import com.docusign.esign.client.ApiClient;
8+
import com.docusign.esign.client.auth.OAuth;
9+
import org.springframework.http.HttpHeaders;
10+
import org.springframework.stereotype.Controller;
11+
12+
/**
13+
* Abstract base class for all controllers.
14+
*/
15+
@Controller
16+
public abstract class AbstractWorkspacesController extends AbstractController {
17+
18+
private static final String EXAMPLE_PAGES_PATH = "pages/workspaces/examples/";
19+
20+
protected Session session;
21+
22+
protected User user;
23+
24+
public AbstractWorkspacesController(DSConfiguration config, String exampleName, Session session, User user) {
25+
super(config, exampleName);
26+
this.session = session;
27+
this.user = user;
28+
}
29+
30+
protected String getExamplePagesPath() {
31+
return AbstractWorkspacesController.EXAMPLE_PAGES_PATH;
32+
}
33+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.docusign.controller.workspaces.examples;
2+
3+
import com.docusign.DSConfiguration;
4+
import com.docusign.common.WorkArguments;
5+
import com.docusign.controller.workspaces.services.CreateWorkspaceService;
6+
import com.docusign.core.model.DoneExample;
7+
import com.docusign.core.model.Session;
8+
import com.docusign.core.model.User;
9+
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
10+
import com.fasterxml.jackson.databind.ObjectMapper;
11+
import com.fasterxml.jackson.databind.ObjectWriter;
12+
import com.fasterxml.jackson.datatype.joda.JodaModule;
13+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
14+
15+
import org.springframework.stereotype.Controller;
16+
import org.springframework.ui.ModelMap;
17+
import org.springframework.web.bind.annotation.RequestMapping;
18+
19+
import java.text.SimpleDateFormat;
20+
21+
import javax.servlet.http.HttpServletResponse;
22+
23+
/**
24+
* This example demonstrates how to create a new Workspace.
25+
*/
26+
@Controller
27+
@RequestMapping("/work001")
28+
public class Work001CreateWorkspaceController extends AbstractWorkspacesController {
29+
30+
public Work001CreateWorkspaceController(DSConfiguration config, Session session, User user) {
31+
super(config, "work001", session, user);
32+
}
33+
34+
@Override
35+
protected Object doWork(WorkArguments args, ModelMap model, HttpServletResponse response) throws Exception {
36+
var accountId = session.getAccountId();
37+
var accessToken = user.getAccessToken();
38+
var workspaceName = args.getWorkspaceName();
39+
40+
var workspace = CreateWorkspaceService.createWorkspace(accessToken, accountId, workspaceName);
41+
session.setWorkspaceId(workspace.createWorkspaceResponse().get().workspaceId().orElse(""));
42+
43+
DoneExample.createDefault(getTextForCodeExampleByApiType().ExampleName)
44+
.withMessage(getTextForCodeExampleByApiType().ResultsPageText)
45+
.withJsonObject(workspace.createWorkspaceResponse())
46+
.addToModel(model, config);
47+
48+
return DONE_EXAMPLE_PAGE;
49+
}
50+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.docusign.controller.workspaces.examples;
2+
3+
import com.docusign.DSConfiguration;
4+
import com.docusign.common.WorkArguments;
5+
import com.docusign.controller.workspaces.services.AddDocumentToWorkspaceService;
6+
import com.docusign.core.model.DoneExample;
7+
import com.docusign.core.model.Session;
8+
import com.docusign.core.model.User;
9+
import org.springframework.stereotype.Controller;
10+
import org.springframework.ui.ModelMap;
11+
import org.springframework.web.bind.annotation.RequestMapping;
12+
13+
import java.nio.file.Paths;
14+
15+
import javax.servlet.http.HttpServletResponse;
16+
17+
/**
18+
* This example demonstrates how to add a Document to the Workspace.
19+
*/
20+
@Controller
21+
@RequestMapping("/work002")
22+
public class Work002AddDocumentToWorkspaceController extends AbstractWorkspacesController {
23+
private static final String MODEL_WORKSPACE_OK = "workspaceOk";
24+
25+
private static final String MODEL_DOCUMENT_FOLDER = "documentFolder";
26+
27+
public Work002AddDocumentToWorkspaceController(DSConfiguration config, Session session, User user) {
28+
super(config, "work002", session, user);
29+
}
30+
31+
@Override
32+
protected void onInitModel(WorkArguments args, ModelMap model) throws Exception {
33+
super.onInitModel(args, model);
34+
35+
model.addAttribute(MODEL_WORKSPACE_OK, !session.getWorkspaceId().isEmpty());
36+
model.addAttribute(MODEL_DOCUMENT_FOLDER, config.getCodeExamplesText().SupportingTexts.HelpingTexts.SelectPDFFileFromFolder.replaceFirst("\\{0}", Paths.get("src", "main", "resources").toAbsolutePath().toString()));
37+
}
38+
39+
@Override
40+
protected Object doWork(WorkArguments args, ModelMap model, HttpServletResponse response) throws Exception {
41+
var accountId = session.getAccountId();
42+
var accessToken = user.getAccessToken();
43+
var workspaceId = session.getWorkspaceId();
44+
var documentName = args.getDocumentName();
45+
var documentPath = args.getDocumentPath();
46+
47+
var results = AddDocumentToWorkspaceService.addDocumentToWorkspace(accessToken, accountId, workspaceId, documentPath, documentName);
48+
session.setDocumentId(results.createWorkspaceDocumentResponse().get().documentId().orElse(""));
49+
50+
DoneExample.createDefault(getTextForCodeExampleByApiType().ExampleName)
51+
.withMessage(getTextForCodeExampleByApiType().ResultsPageText)
52+
.withJsonObject(results.createWorkspaceDocumentResponse())
53+
.addToModel(model, config);
54+
55+
return DONE_EXAMPLE_PAGE;
56+
}
57+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.docusign.controller.workspaces.examples;
2+
3+
import com.docusign.DSConfiguration;
4+
import com.docusign.common.WorkArguments;
5+
import com.docusign.controller.workspaces.services.SendEnvelopeWithRecipientInfoService;
6+
import com.docusign.core.model.DoneExample;
7+
import com.docusign.core.model.Session;
8+
import com.docusign.core.model.User;
9+
10+
import org.springframework.stereotype.Controller;
11+
import org.springframework.ui.ModelMap;
12+
import org.springframework.web.bind.annotation.RequestMapping;
13+
14+
import javax.servlet.http.HttpServletResponse;
15+
16+
/**
17+
* This example demonstrates how to create and send a Workspace Envelope.
18+
*/
19+
@Controller
20+
@RequestMapping("/work003")
21+
public class Work003SendEnvelopeWithRecipientController extends AbstractWorkspacesController {
22+
private static final String MODEL_WORKSPACE_OK = "workspaceOk";
23+
24+
private static final String MODEL_DOCUMENT_OK = "documentOk";
25+
26+
public Work003SendEnvelopeWithRecipientController(DSConfiguration config, Session session, User user) {
27+
super(config, "work003", session, user);
28+
}
29+
30+
@Override
31+
protected void onInitModel(WorkArguments args, ModelMap model) throws Exception {
32+
super.onInitModel(args, model);
33+
34+
model.addAttribute(MODEL_WORKSPACE_OK, !session.getWorkspaceId().isEmpty());
35+
model.addAttribute(MODEL_DOCUMENT_OK, !session.getDocumentId().isEmpty());
36+
}
37+
38+
@Override
39+
protected Object doWork(WorkArguments args, ModelMap model, HttpServletResponse response) throws Exception {
40+
var accountId = session.getAccountId();
41+
var accessToken = user.getAccessToken();
42+
var basePath = session.getBasePath();
43+
var workspaceId = session.getWorkspaceId();
44+
var documentId = session.getDocumentId();
45+
var signerEmail = args.getSignerEmail();
46+
var signerName = args.getSignerName();
47+
48+
var envelope = SendEnvelopeWithRecipientInfoService.createWorkspaceEnvelope(accessToken, accountId, workspaceId, documentId);
49+
var envelopeId = envelope.createWorkspaceEnvelopeResponse().get().envelopeId().toString();
50+
var results = SendEnvelopeWithRecipientInfoService.sendEnvelope(accessToken, basePath, accountId, envelopeId, signerEmail, signerName);
51+
52+
DoneExample.createDefault(getTextForCodeExampleByApiType().ExampleName)
53+
.withMessage(getTextForCodeExampleByApiType().ResultsPageText)
54+
.withJsonObject(results)
55+
.addToModel(model, config);
56+
57+
return DONE_EXAMPLE_PAGE;
58+
}
59+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.docusign.controller.workspaces.services;
2+
3+
import org.springframework.core.io.ClassPathResource;
4+
import org.springframework.util.StreamUtils;
5+
6+
import com.docusign.iam.sdk.IamClient;
7+
import com.docusign.iam.sdk.models.components.AddWorkspaceDocumentRequest;
8+
import com.docusign.iam.sdk.models.components.AddWorkspaceDocumentRequestFile;
9+
import com.docusign.iam.sdk.models.operations.AddWorkspaceDocumentResponse;
10+
11+
public final class AddDocumentToWorkspaceService {
12+
private static IamClient createIamClient(String accessToken) {
13+
return IamClient.builder().accessToken(accessToken).build();
14+
}
15+
16+
public static AddWorkspaceDocumentResponse addDocumentToWorkspace(
17+
String accessToken,
18+
String accountId,
19+
String workspaceId,
20+
String documentPath,
21+
String documentName) throws Exception {
22+
23+
var resource = new ClassPathResource(documentPath);
24+
var documentBytes = StreamUtils.copyToByteArray(resource.getInputStream());
25+
26+
var workspaceDocumentFile = new AddWorkspaceDocumentRequestFile(documentName, documentBytes);
27+
var addWorkspaceDocumentRequest = new AddWorkspaceDocumentRequest();
28+
addWorkspaceDocumentRequest.withFile(workspaceDocumentFile);
29+
30+
return createIamClient(accessToken)
31+
.workspaces()
32+
.workspaceDocuments()
33+
.addWorkspaceDocument()
34+
.accountId(accountId)
35+
.workspaceId(workspaceId)
36+
.addWorkspaceDocumentRequest(addWorkspaceDocumentRequest)
37+
.call();
38+
}
39+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.docusign.controller.workspaces.services;
2+
3+
import com.docusign.iam.sdk.IamClient;
4+
import com.docusign.iam.sdk.models.components.CreateWorkspaceBody;
5+
import com.docusign.iam.sdk.models.operations.CreateWorkspaceResponse;
6+
7+
public final class CreateWorkspaceService {
8+
private static IamClient createIamClient(String accessToken) {
9+
return IamClient.builder().accessToken(accessToken).build();
10+
}
11+
12+
public static CreateWorkspaceResponse createWorkspace(
13+
String accessToken,
14+
String accountId,
15+
String name) throws Exception {
16+
var createWorkspaceBody = new CreateWorkspaceBody();
17+
createWorkspaceBody.withName(name);
18+
19+
return createIamClient(accessToken)
20+
.workspaces()
21+
.workspaces()
22+
.createWorkspace()
23+
.accountId(accountId)
24+
.createWorkspaceBody(createWorkspaceBody)
25+
.call();
26+
}
27+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.docusign.controller.workspaces.services;
2+
3+
import java.util.Arrays;
4+
5+
import org.springframework.http.HttpHeaders;
6+
7+
import com.docusign.controller.eSignature.examples.EnvelopeHelpers;
8+
import com.docusign.esign.api.EnvelopesApi;
9+
import com.docusign.esign.client.ApiClient;
10+
import com.docusign.esign.client.ApiException;
11+
import com.docusign.esign.model.Envelope;
12+
import com.docusign.esign.model.EnvelopeUpdateSummary;
13+
import com.docusign.esign.model.Signer;
14+
import com.docusign.iam.sdk.IamClient;
15+
import com.docusign.iam.sdk.models.components.WorkspaceEnvelopeForCreate;
16+
import com.docusign.iam.sdk.models.operations.CreateWorkspaceEnvelopeResponse;
17+
18+
public final class SendEnvelopeWithRecipientInfoService {
19+
private static final String ENVELOPE_NAME = "Example Workspace Envelope";
20+
private static final String EMAIL_SUBJECT = "Please sign this document";
21+
private static final String ANCHOR_STRING = "/sn1/";
22+
private static final int ANCHOR_OFFSET_Y = 10;
23+
private static final int ANCHOR_OFFSET_X = 20;
24+
25+
private static IamClient createIamClient(String accessToken) {
26+
return IamClient.builder().accessToken(accessToken).build();
27+
}
28+
29+
public static CreateWorkspaceEnvelopeResponse createWorkspaceEnvelope(
30+
String accessToken,
31+
String accountId,
32+
String workspaceId,
33+
String documentId) throws Exception {
34+
35+
var workspaceEnvelopeForCreate = new WorkspaceEnvelopeForCreate();
36+
workspaceEnvelopeForCreate.withEnvelopeName(ENVELOPE_NAME);
37+
workspaceEnvelopeForCreate.withDocumentIds(Arrays.asList(documentId));
38+
39+
return createIamClient(accessToken)
40+
.workspaces()
41+
.workspaces()
42+
.createWorkspaceEnvelope()
43+
.accountId(accountId)
44+
.workspaceId(workspaceId)
45+
.workspaceEnvelopeForCreate(workspaceEnvelopeForCreate)
46+
.call();
47+
}
48+
49+
public static EnvelopeUpdateSummary sendEnvelope(
50+
String accessToken,
51+
String basePath,
52+
String accountId,
53+
String envelopeId,
54+
String signerEmail,
55+
String signerName
56+
) throws ApiException {
57+
var client = new ApiClient(basePath);
58+
client.addDefaultHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
59+
var envelopesApi = new EnvelopesApi(client);
60+
61+
var envelope = makeEnvelope(signerEmail, signerName);
62+
63+
return envelopesApi.update(accountId, envelopeId, envelope);
64+
}
65+
66+
private static Envelope makeEnvelope(
67+
String signerEmail,
68+
String signerName
69+
) {
70+
var signerTabs = EnvelopeHelpers.createSignerTabs(EnvelopeHelpers.createSignHere(ANCHOR_STRING, ANCHOR_OFFSET_Y, ANCHOR_OFFSET_X));
71+
72+
var signer = new Signer();
73+
signer.setEmail(signerEmail);
74+
signer.setName(signerName);
75+
signer.setRecipientId("1");
76+
signer.setRoutingOrder("1");
77+
signer.setTabs(signerTabs);
78+
79+
var envelope = new Envelope();
80+
envelope.setRecipients(EnvelopeHelpers.createSingleRecipient(signer));
81+
envelope.setEmailSubject(EMAIL_SUBJECT);
82+
envelope.setStatus("sent");
83+
84+
return envelope;
85+
}
86+
}

0 commit comments

Comments
 (0)