Skip to content

Commit 27bd84f

Browse files
committed
Merge branch 'master' into maestro-code-examples
2 parents e313e38 + 92b7a21 commit 27bd84f

File tree

17 files changed

+1371
-124
lines changed

17 files changed

+1371
-124
lines changed

README.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,7 @@ For a list of code examples that use the Web Forms API, see the [How-to guides o
131131

132132
#### Multiple code examples, Authorization Code Grant, and JWT Grant:
133133
1. $ `cd <Quickstart folder>`
134-
1. $ `mvn package -Dmaven.test.skip=true`
135-
1. $ `java -Dspring.profiles.active=dev -jar target/code-examples-java-1.0-SNAPSHOT.war`
136-
For Windows:
137-
1. $ `mvn package -D"maven.test.skip"="true"`
138-
1. $ `java -D"spring.profiles.active"="dev" -jar target/code-examples-java-1.0-SNAPSHOT.war`
134+
1. $ `mvn spring-boot:run`
139135

140136
#### Authorization Code Grant embedded signing example:
141137

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@
2626
<oauth2.version>2.5.6</oauth2.version>
2727
<commonsio.version>2.16.1</commonsio.version>
2828

29-
<esignature.version>6.2.0</esignature.version>
29+
<esignature.version>6.4.0</esignature.version>
3030
<rooms.version>1.4.3</rooms.version>
3131
<click.version>1.5.0</click.version>
3232
<monitor.version>1.4.0</monitor.version>
3333
<admin.version>2.0.0</admin.version>
34-
<webforms.version>2.0.0-RC1</webforms.version>
35-
<iam.version>1.0.0-beta.4</iam.version>
34+
<webforms.version>2.1.0</webforms.version>
35+
<iam.version>1.0.0-beta.5</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/WorkArguments.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ public class WorkArguments {
7171

7272
private String agreementId;
7373

74+
private String envelopeId;
75+
7476
private String permissionProfileName;
7577

7678
private String phoneNumber;
@@ -182,4 +184,6 @@ public class WorkArguments {
182184
private String jsonPayload;
183185

184186
private String instanceName;
187+
188+
private String folderName;
185189
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
package com.docusign.controller.eSignature.examples;
2+
3+
import com.docusign.DSConfiguration;
4+
import com.docusign.common.WorkArguments;
5+
import com.docusign.controller.eSignature.services.DeleteRestoreEnvelopeService;
6+
import com.docusign.core.model.DoneExample;
7+
import com.docusign.core.model.Session;
8+
import com.docusign.core.model.User;
9+
import com.docusign.esign.client.ApiClient;
10+
import com.docusign.esign.model.Folder;
11+
import com.docusign.esign.model.FoldersResponse;
12+
import org.springframework.http.MediaType;
13+
import org.springframework.stereotype.Controller;
14+
import org.springframework.ui.ModelMap;
15+
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.PostMapping;
17+
import org.springframework.web.bind.annotation.RequestMapping;
18+
19+
import javax.servlet.http.HttpServletResponse;
20+
import java.text.MessageFormat;
21+
22+
/**
23+
* Used to delete the envelope and restore it back.
24+
*/
25+
@Controller
26+
@RequestMapping("/eg045")
27+
public class EG045ControllerDeleteRestoreEnvelope extends AbstractEsignatureController {
28+
public static final String RECYCLE_BIN_FOLDER_ID = "recyclebin";
29+
30+
public static final String SENT_ITEMS_FOLDER_NAME = "Sent items";
31+
32+
public static final String EXAMPLE_NUMBER = "/eg045";
33+
34+
public static final String RESTORE_ENVELOPE = "/restoreEnvelope";
35+
36+
public static final String RESTORE_ENVELOPE_PAGE = "pages/esignature/examples/eg045RestoreEnvelope";
37+
38+
public EG045ControllerDeleteRestoreEnvelope(DSConfiguration config, Session session, User user) {
39+
super(config, "eg045", session, user);
40+
}
41+
42+
@Override
43+
protected void onInitModel(WorkArguments args, ModelMap model) throws Exception {
44+
super.onInitModel(args, model);
45+
model.addAttribute("envelopeId", session.getEnvelopeId());
46+
}
47+
48+
@Override
49+
protected Object doWork(WorkArguments args, ModelMap model,
50+
HttpServletResponse response) throws Exception {
51+
String envelopeId = args.getEnvelopeId();
52+
session.setEnvelopeId(envelopeId);
53+
//ds-snippet-start:eSign45Step2
54+
ApiClient apiClient = createApiClient(session.getBasePath(), user.getAccessToken());
55+
//ds-snippet-end:eSign45Step2
56+
DeleteRestoreEnvelopeService.deleteEnvelope(
57+
apiClient,
58+
session.getAccountId(),
59+
envelopeId);
60+
61+
DoneExample.createDefault(getTextForCodeExampleByApiType().ExampleName)
62+
.withMessage(
63+
MessageFormat.format(
64+
getTextForCodeExampleByApiType().AdditionalPage
65+
.get(0).ResultsPageText,
66+
envelopeId))
67+
.withRedirect(EXAMPLE_NUMBER + RESTORE_ENVELOPE)
68+
.addToModel(model, config);
69+
70+
return DONE_EXAMPLE_PAGE;
71+
}
72+
73+
@GetMapping(value = RESTORE_ENVELOPE, produces = MediaType.APPLICATION_JSON_VALUE)
74+
public String getRestoreEnvelope(WorkArguments args, ModelMap model) throws Exception {
75+
super.onInitModel(args, model);
76+
77+
String envelopeId = session.getEnvelopeId();
78+
String restoreEnvelopeText = MessageFormat.format(
79+
config.getCodeExamplesText().SupportingTexts.HelpingTexts.EnvelopeWillBeRestored,
80+
envelopeId);
81+
82+
model.addAttribute("restoreText", restoreEnvelopeText);
83+
model.addAttribute("envelopeId", envelopeId);
84+
85+
return RESTORE_ENVELOPE_PAGE;
86+
}
87+
88+
@PostMapping(value = RESTORE_ENVELOPE, produces = MediaType.APPLICATION_JSON_VALUE)
89+
public String postRestoreEnvelope(WorkArguments args, ModelMap model) throws Exception {
90+
String envelopeId = session.getEnvelopeId();
91+
String accountId = session.getAccountId();
92+
String folderName = args.getFolderName() != null ? args.getFolderName() : SENT_ITEMS_FOLDER_NAME;
93+
94+
ApiClient apiClient = createApiClient(session.getBasePath(), user.getAccessToken());
95+
96+
FoldersResponse availableFolders = DeleteRestoreEnvelopeService.getFolders(apiClient, accountId);
97+
Folder folder = DeleteRestoreEnvelopeService.getFolderIdByName(availableFolders.getFolders(),
98+
folderName);
99+
100+
if (folder == null) {
101+
DoneExample.createDefault(getTextForCodeExampleByApiType().ExampleName)
102+
.withMessage(
103+
MessageFormat.format(
104+
getTextForCodeExampleByApiType().AdditionalPage
105+
.get(1).ResultsPageText,
106+
folderName))
107+
.withRedirect(EXAMPLE_NUMBER + RESTORE_ENVELOPE)
108+
.addToModel(model, config);
109+
110+
return DONE_EXAMPLE_PAGE;
111+
}
112+
113+
DeleteRestoreEnvelopeService.moveEnvelopeToFolder(
114+
apiClient,
115+
accountId,
116+
envelopeId,
117+
folder.getFolderId(),
118+
RECYCLE_BIN_FOLDER_ID);
119+
120+
DoneExample.createDefault(getTextForCodeExampleByApiType().ExampleName)
121+
.withMessage(
122+
MessageFormat.format(
123+
getTextForCodeExampleByApiType().ResultsPageText,
124+
envelopeId,
125+
folder.getType(),
126+
folderName))
127+
.addToModel(model, config);
128+
129+
return DONE_EXAMPLE_PAGE;
130+
}
131+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.docusign.controller.eSignature.services;
2+
3+
import com.docusign.esign.api.FoldersApi;
4+
import com.docusign.esign.client.ApiClient;
5+
import com.docusign.esign.model.Folder;
6+
import com.docusign.esign.model.FoldersRequest;
7+
import com.docusign.esign.model.FoldersResponse;
8+
9+
import java.util.Collections;
10+
import java.util.List;
11+
12+
public final class DeleteRestoreEnvelopeService {
13+
public static final String RECYCLE_BIN_FOLDER_ID = "recyclebin";
14+
15+
public static FoldersResponse deleteEnvelope(
16+
ApiClient apiClient,
17+
String accountId,
18+
String envelopeId) throws Exception {
19+
FoldersApi foldersApi = new FoldersApi(apiClient);
20+
//ds-snippet-start:eSign45Step3
21+
FoldersRequest foldersRequest = new FoldersRequest();
22+
foldersRequest.setEnvelopeIds(Collections.singletonList(envelopeId));
23+
//ds-snippet-end:eSign45Step3
24+
//ds-snippet-start:eSign45Step4
25+
return foldersApi.moveEnvelopes(accountId, RECYCLE_BIN_FOLDER_ID, foldersRequest);
26+
//ds-snippet-end:eSign45Step4
27+
}
28+
//ds-snippet-start:eSign45Step6
29+
30+
public static FoldersResponse moveEnvelopeToFolder(
31+
ApiClient apiClient,
32+
String accountId,
33+
String envelopeId,
34+
String folderId,
35+
String fromFolderId) throws Exception {
36+
FoldersApi foldersApi = new FoldersApi(apiClient);
37+
38+
FoldersRequest foldersRequest = new FoldersRequest();
39+
foldersRequest.setFromFolderId(fromFolderId);
40+
foldersRequest.setEnvelopeIds(Collections.singletonList(envelopeId));
41+
42+
return foldersApi.moveEnvelopes(accountId, folderId, foldersRequest);
43+
}
44+
//ds-snippet-end:eSign45Step6
45+
46+
//ds-snippet-start:eSign45Step5
47+
48+
public static FoldersResponse getFolders(
49+
ApiClient apiClient,
50+
String accountId) throws Exception {
51+
FoldersApi foldersApi = new FoldersApi(apiClient);
52+
return foldersApi.callList(accountId);
53+
}
54+
55+
public static Folder getFolderIdByName(List<Folder> folders, String targetName) {
56+
for (Folder folder : folders) {
57+
if (folder.getName().equals(targetName)) {
58+
return folder;
59+
}
60+
61+
if (folder.getFolders() != null && !folder.getFolders().isEmpty()) {
62+
Folder nestedFolder = DeleteRestoreEnvelopeService.getFolderIdByName(folder.getFolders(), targetName);
63+
if (nestedFolder != null) {
64+
return nestedFolder;
65+
}
66+
}
67+
}
68+
return null;
69+
}
70+
//ds-snippet-end:eSign45Step5
71+
}

src/main/java/com/docusign/controller/webForms/examples/AbstractWebFormsController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ protected static com.docusign.webforms.client.ApiClient createWebFormsApiClient(
4646
String basePath,
4747
String userAccessToken
4848
) {
49-
//ds-snippet-start:WebForms1Step2
49+
//ds-snippet-start:WebFormsJavaStep2
5050
com.docusign.webforms.client.ApiClient apiClient = new com.docusign.webforms.client.ApiClient(basePath);
5151
apiClient.addDefaultHeader(HttpHeaders.AUTHORIZATION, BEARER_AUTHENTICATION + userAccessToken);
5252
apiClient.addAuthorization("docusignAccessCode", new com.docusign.webforms.client.auth.OAuth());
53-
//ds-snippet-end:WebForms1Step2
53+
//ds-snippet-end:WebFormsJavaStep2
5454
return apiClient;
5555
}
5656

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package com.docusign.controller.webForms.examples;
2+
3+
import com.docusign.DSConfiguration;
4+
import com.docusign.common.WorkArguments;
5+
import com.docusign.controller.eSignature.services.CreateTemplateService;
6+
import com.docusign.controller.webForms.services.CreateRemoteInstanceService;
7+
import com.docusign.core.model.DoneExample;
8+
import com.docusign.core.model.Session;
9+
import com.docusign.core.model.User;
10+
import com.docusign.esign.client.ApiClient;
11+
import com.docusign.esign.client.ApiException;
12+
import com.docusign.esign.model.EnvelopeTemplate;
13+
import com.docusign.esign.model.EnvelopeTemplateResults;
14+
import com.docusign.esign.model.TemplateSummary;
15+
import com.docusign.webforms.model.WebFormInstance;
16+
import com.docusign.webforms.model.WebFormSummaryList;
17+
import org.springframework.stereotype.Controller;
18+
import org.springframework.ui.ModelMap;
19+
import org.springframework.web.bind.annotation.RequestMapping;
20+
import org.springframework.web.servlet.view.RedirectView;
21+
22+
import javax.servlet.http.HttpServletResponse;
23+
import java.io.IOException;
24+
25+
@Controller
26+
@RequestMapping("/web002")
27+
public class WEB002CreateRemoteInstance extends AbstractWebFormsController {
28+
29+
private static final String TEMPLATE_ID = "templateId";
30+
31+
private static final String TEMPLATE_NAME = "Web Form Example Template";
32+
33+
private static final String DOCUMENT_FILE_NAME = "World_Wide_Corp_Web_Form.pdf";
34+
35+
private static final String WEB_FORM_CONFIG = "web-form-config.json";
36+
37+
private final DSConfiguration configuration;
38+
39+
public WEB002CreateRemoteInstance(DSConfiguration config, Session session, User user) {
40+
super(config, "web002", session, user);
41+
this.configuration = config;
42+
}
43+
44+
@Override
45+
protected void onInitModel(WorkArguments args, ModelMap model) throws Exception {
46+
super.onInitModel(args, model);
47+
model.addAttribute(TEMPLATE_ID, session.getWebformTemplateId());
48+
}
49+
50+
@Override
51+
protected Object doWork(
52+
WorkArguments args,
53+
ModelMap model,
54+
HttpServletResponse response) throws ApiException, IOException, com.docusign.webforms.client.ApiException {
55+
if (session.getIsWebFormsInitialRun()) {
56+
handleInitialRun(model);
57+
return new RedirectView("web002");
58+
}
59+
60+
String accountId = session.getAccountId();
61+
var apiClient = createWebFormsApiClient(
62+
config.getWebFormsBasePath(),
63+
user.getAccessToken());
64+
65+
WebFormSummaryList forms = CreateRemoteInstanceService.getFormsByName(
66+
apiClient,
67+
accountId,
68+
TEMPLATE_NAME);
69+
70+
if (forms.getItems() == null || forms.getItems().isEmpty()) {
71+
throw new ApiException(getTextForCodeExampleByApiType().CustomErrorTexts.get(0).ErrorMessage);
72+
}
73+
74+
String formId = forms.getItems().get(0).getId();
75+
76+
WebFormInstance form = CreateRemoteInstanceService.createInstance(
77+
apiClient,
78+
accountId,
79+
formId,
80+
configuration.getSignerEmail(),
81+
configuration.getSignerName());
82+
83+
session.setIsWebFormsInitialRun(true);
84+
DoneExample.createDefault(getTextForCodeExampleByApiType().ExampleName)
85+
.withMessage(getTextForCodeExampleByApiType().ResultsPageText
86+
.replaceFirst("\\{0}", form.getEnvelopes().get(0).getId()).replaceFirst("\\{1}", form.getId())
87+
)
88+
.addToModel(model, config);
89+
return DONE_EXAMPLE_PAGE;
90+
}
91+
92+
private void handleInitialRun(ModelMap model) throws ApiException, IOException {
93+
ApiClient apiClient = createESignApiClient(session.getBasePath(), user.getAccessToken());
94+
String accountId = session.getAccountId();
95+
96+
String templateId = findOrCreateTemplate(apiClient, accountId);
97+
session.setWebformTemplateId(templateId);
98+
session.setIsWebFormsInitialRun(false);
99+
100+
model.addAttribute(TEMPLATE_ID, templateId);
101+
CreateRemoteInstanceService.addTemplateIdToForm(WEB_FORM_CONFIG, templateId);
102+
}
103+
104+
private String findOrCreateTemplate(ApiClient apiClient, String accountId) throws ApiException, IOException {
105+
EnvelopeTemplateResults templateResults = CreateTemplateService.searchTemplatesByName(
106+
apiClient,
107+
accountId,
108+
TEMPLATE_NAME);
109+
110+
if (templateResults.getEnvelopeTemplates() != null && !templateResults.getEnvelopeTemplates().isEmpty()) {
111+
EnvelopeTemplate existingTemplate = templateResults.getEnvelopeTemplates().get(0);
112+
return existingTemplate.getTemplateId();
113+
}
114+
115+
TemplateSummary newTemplate = CreateTemplateService.createTemplate(
116+
apiClient,
117+
accountId,
118+
CreateRemoteInstanceService.prepareEnvelopeTemplate(TEMPLATE_NAME, DOCUMENT_FILE_NAME)
119+
);
120+
return newTemplate.getTemplateId();
121+
}
122+
}

0 commit comments

Comments
 (0)