Skip to content

Commit 2a8102f

Browse files
author
Balaji Jayaraman
committed
added delete and restore envelope how to code snippets
1 parent f999bf4 commit 2a8102f

File tree

8 files changed

+290
-2
lines changed

8 files changed

+290
-2
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
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>

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/core/model/manifestModels/HelpingTexts.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,12 @@ public class HelpingTexts {
3535
public String NOTAGREED;
3636

3737
public String AGREED;
38+
39+
public String SubmitButtonDeleteText;
40+
41+
public String SubmitButtonRestoreText;
42+
43+
public String EnvelopeWillBeRestored;
44+
45+
public String DefaultEnvelopeId;
3846
}

src/main/resources/application.example.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
"com.docusign.github.example-uri": "https://github.com/docusign/code-examples-java/blob/master/src/main/java/",
6464
"com.docusign.documentation-path": "",
6565

66-
"CodeExamplesManifest": "https://raw.githubusercontent.com/docusign/code-examples-csharp/master/manifest/CodeExamplesManifest.json",
66+
"CodeExamplesManifest": "https://raw.githubusercontent.com/annahileta/ManifestsForCodeExamples/refs/heads/main/CodeExamplesManifest.json",
6767

6868
"server.tomcat.additional-tld-skip-patterns": "*jaxb*.jar",
6969
"server.servlet.session.tracking-modes": "cookie",
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2+
<jsp:include page="../../../partials/head.jsp"/>
3+
4+
<c:set var="formNumber" value="0" scope="page" />
5+
<c:set var="envelopeIdInputNumber" value="0" scope="page" />
6+
7+
<h4>${example.getExampleName()}</h4>
8+
<p>${example.getExampleDescription()}</p>
9+
10+
<c:if test="${showDoc}">
11+
<p><a target='_blank' href='${documentation}'>Documentation</a> about this example.</p>
12+
</c:if>
13+
14+
<jsp:include page="../../links_to_api_methods.jsp" />
15+
16+
<p>
17+
${viewSourceFile}
18+
</p>
19+
20+
<form class="eg" action="" method="post" data-busy="form">
21+
<div class="form-group">
22+
<label for="envelopeId">
23+
${example.getForms().get(formNumber).getInputs().get(envelopeIdInputNumber).getInputName()}
24+
</label>
25+
26+
<input type="text"
27+
class="form-control"
28+
id="envelopeId"
29+
name="envelopeId"
30+
aria-describedby="envelopeIdHelp"
31+
placeholder="${example.getForms().get(formNumber).getInputs().get(envelopeIdInputNumber).getInputPlaceholder()}"
32+
required
33+
value="${envelopeId}">
34+
35+
<small id="envelopeIdHelp" class="form-text text-muted">
36+
${launcherTexts.getHelpingTexts().getDefaultEnvelopeId()}
37+
</small>
38+
</div>
39+
40+
<input type="hidden" name="_csrf" value="${csrfToken}">
41+
<button type="submit" class="btn btn-docu">${launcherTexts.getHelpingTexts().getSubmitButtonDeleteText()}</button>
42+
</form>
43+
44+
<jsp:include page="../../../partials/foot.jsp"/>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2+
<jsp:include page="../../../partials/head.jsp"/>
3+
4+
<c:set var="formNumber" value="0" scope="page" />
5+
<c:set var="folderNameInputNumber" value="1" scope="page" />
6+
7+
<h4>${example.getExampleName()}</h4>
8+
<p>${example.getExampleDescription()}</p>
9+
<p>${restoreText}</p>
10+
11+
<form class="eg" action="" method="post" data-busy="form">
12+
<div class="form-group">
13+
<label for="folderName">
14+
${example.getForms().get(formNumber).getInputs().get(folderNameInputNumber).getInputName()}
15+
</label>
16+
17+
<input type="text"
18+
class="form-control"
19+
id="folderName"
20+
name="folderName"
21+
placeholder="${example.getForms().get(formNumber).getInputs().get(folderNameInputNumber).getInputPlaceholder()}"
22+
required
23+
value="${example.getForms().get(formNumber).getInputs().get(folderNameInputNumber).getInputPlaceholder()}">
24+
</div>
25+
26+
<input type="hidden" name="_csrf" value="${csrfToken}">
27+
<button type="submit" class="btn btn-docu">${launcherTexts.getHelpingTexts().getSubmitButtonRestoreText()}</button>
28+
</form>
29+
30+
<jsp:include page="../../../partials/foot.jsp"/>

0 commit comments

Comments
 (0)