Skip to content

Commit 6e7affb

Browse files
mateuszjohn
authored andcommitted
PB-18505 [Conditional Fields] - SDK - Allow managing conditional logic
1 parent 9019ad7 commit 6e7affb

17 files changed

Lines changed: 842 additions & 0 deletions

sdk/src/main/java/com/silanis/esl/api/model/BasePackage.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ public class BasePackage extends Entity
6565
public static final String FIELD_CREATED = "created";
6666
@JsonIgnore
6767
public static final String FIELD_TIMEZONE_ID = "timezoneId";
68+
@JsonIgnore
69+
private static final String FIELD_CONDITIONS = "conditions";
6870

6971
// Empty Constructor
7072
public BasePackage ( ) {}
@@ -91,6 +93,7 @@ public BasePackage ( ) {}
9193
protected String _visibility = "ACCOUNT";
9294
protected java.util.Date _created;
9395
protected String _timezoneId;
96+
protected List<FieldCondition> conditions;
9497

9598
// Accessors
9699

@@ -579,4 +582,15 @@ public BasePackage safeSetTimezoneId( String value ){
579582
public String getTimezoneId(){
580583
return _timezoneId;
581584
}
585+
586+
public BasePackage setConditions(List<FieldCondition> value) {
587+
588+
this.conditions = value;
589+
setDirty(FIELD_CONDITIONS);
590+
return this;
591+
}
592+
593+
public List<FieldCondition> getConditions() {
594+
return conditions;
595+
}
582596
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.silanis.esl.api.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5+
6+
import java.util.List;
7+
8+
@JsonIgnoreProperties(ignoreUnknown = true)
9+
public class ConditionalField extends Field {
10+
11+
@JsonIgnore
12+
private static final String FIELD_CONDITIONS = "conditions";
13+
14+
private List<FieldCondition> conditions;
15+
16+
public ConditionalField() { }
17+
18+
public Field setConditions(List<FieldCondition> value) {
19+
20+
this.conditions = value;
21+
setDirty(FIELD_CONDITIONS);
22+
return this;
23+
}
24+
25+
public List<FieldCondition> getConditions() {
26+
return conditions;
27+
}
28+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.silanis.esl.api.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5+
6+
import java.io.Serializable;
7+
8+
import static com.silanis.esl.api.util.SchemaSanitizer.throwOnNull;
9+
import static com.silanis.esl.api.util.SchemaSanitizer.trim;
10+
11+
@JsonIgnoreProperties(ignoreUnknown = true)
12+
public class FieldCondition extends Model implements Serializable {
13+
14+
@JsonIgnore
15+
public static final String FIELD_ID = "id";
16+
@JsonIgnore
17+
public static final String FIELD_CONDITION = "condition";
18+
@JsonIgnore
19+
public static final String FIELD_ACTION = "action";
20+
21+
protected String id;
22+
protected String condition;
23+
protected String action;
24+
25+
public FieldCondition() {
26+
27+
}
28+
29+
public FieldCondition setId(String value) {
30+
31+
throwOnNull(FIELD_ID, value);
32+
value = trim(value);
33+
34+
this.id = value;
35+
setDirty(FIELD_ID);
36+
return this;
37+
}
38+
39+
public String getId() {
40+
return id;
41+
}
42+
43+
public FieldCondition setCondition(String value) {
44+
45+
throwOnNull(FIELD_CONDITION, value);
46+
value = trim(value);
47+
48+
this.condition = value;
49+
setDirty(FIELD_CONDITION);
50+
return this;
51+
}
52+
53+
public String getCondition() {
54+
return condition;
55+
}
56+
57+
public FieldCondition setAction(String value) {
58+
59+
throwOnNull(FIELD_ACTION, value);
60+
value = trim(value);
61+
62+
this.action = value;
63+
setDirty(FIELD_ACTION);
64+
return this;
65+
}
66+
67+
public String getAction() {
68+
return action;
69+
}
70+
}
71+
72+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.silanis.esl.sdk;
2+
3+
import java.io.Serializable;
4+
import java.util.List;
5+
6+
public class ConditionalField extends Field implements Serializable {
7+
8+
private List<FieldCondition> conditions;
9+
10+
public void setConditions( List<FieldCondition> conditions ) {
11+
this.conditions = conditions;
12+
}
13+
14+
public List<FieldCondition> getConditions() {
15+
return conditions;
16+
}
17+
}

sdk/src/main/java/com/silanis/esl/sdk/DocumentPackage.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class DocumentPackage implements Serializable {
3333
private List<Message> messages;
3434
private Visibility visibility;
3535
private String timezoneId;
36+
private List<FieldCondition> conditions;
3637

3738
/**
3839
* @param name the name of the package
@@ -320,4 +321,8 @@ public void setVisibility(Visibility visibility) {
320321
public String getTimezoneId() { return timezoneId; }
321322

322323
public void setTimezoneId(String timezoneId) { this.timezoneId = timezoneId; }
324+
325+
public List<FieldCondition> getConditions() { return conditions; }
326+
327+
public void setConditions(List<FieldCondition> conditions) { this.conditions = conditions; }
323328
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.silanis.esl.sdk;
2+
3+
import java.io.Serializable;
4+
5+
public class FieldCondition implements Serializable {
6+
7+
private String id;
8+
private String condition;
9+
private String action;
10+
11+
12+
public FieldCondition() {}
13+
14+
public String getId() {
15+
return id;
16+
}
17+
18+
public void setId( String id ) {
19+
this.id = id;
20+
}
21+
22+
public String getCondition() {
23+
return condition;
24+
}
25+
26+
public void setCondition( String condition ) {
27+
this.condition = condition;
28+
}
29+
30+
public String getAction() {
31+
return action;
32+
}
33+
34+
public void setAction( String action ) {
35+
this.action = action;
36+
}
37+
}

sdk/src/main/java/com/silanis/esl/sdk/builder/PackageBuilder.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class PackageBuilder {
2727
private DocumentPackageAttributes attributes;
2828
private Visibility visibility;
2929
private String timezoneId;
30+
private final List<FieldCondition> conditions = new ArrayList<FieldCondition>();
3031

3132
private static final String ORIGIN_KEY = "origin";
3233

@@ -174,6 +175,10 @@ public DocumentPackage build() {
174175
documentPackage.setTimezoneId(timezoneId);
175176
}
176177

178+
if (conditions != null && !conditions.isEmpty()) {
179+
documentPackage.setConditions(conditions);
180+
}
181+
177182
return documentPackage;
178183
}
179184

@@ -347,4 +352,15 @@ public PackageBuilder withOrigin( String origin ) {
347352
this.attributes.append(ORIGIN_KEY, origin);
348353
return this;
349354
}
355+
356+
/**
357+
* Sets the condition for the package field.
358+
*
359+
* @param condition field condition
360+
* @return the package builder itself
361+
*/
362+
public PackageBuilder withCondition( FieldCondition condition) {
363+
this.conditions.add(condition);
364+
return this;
365+
}
350366
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package com.silanis.esl.sdk.examples;
2+
3+
import com.silanis.esl.sdk.ConditionalField;
4+
import com.silanis.esl.sdk.DocumentPackage;
5+
import com.silanis.esl.sdk.DocumentType;
6+
import com.silanis.esl.sdk.FieldCondition;
7+
import com.silanis.esl.sdk.FieldId;
8+
import com.silanis.esl.sdk.FieldStyle;
9+
import com.silanis.esl.sdk.PackageId;
10+
import com.silanis.esl.sdk.SignatureId;
11+
import com.silanis.esl.sdk.builder.PackageBuilder;
12+
import com.silanis.esl.sdk.builder.SignerBuilder;
13+
14+
import java.util.ArrayList;
15+
import java.util.List;
16+
17+
import static com.silanis.esl.sdk.builder.DocumentBuilder.newDocumentWithName;
18+
import static com.silanis.esl.sdk.builder.FieldBuilder.*;
19+
import static com.silanis.esl.sdk.builder.SignatureBuilder.signatureFor;
20+
21+
public class ConditionalFieldExample extends SDKSample {
22+
23+
private final String documentId = "DocumentId";
24+
private final SignatureId signatureId = new SignatureId("signatureId");
25+
private final FieldId fieldId1 = new FieldId("fieldId1");
26+
private final FieldId fieldId2 = new FieldId("fieldId2");
27+
28+
public DocumentPackage retrievedPackageWithoutConditions;
29+
public DocumentPackage retrievedPackageWithUpdatedConditions;
30+
31+
public static void main(String... args) {
32+
new ConditionalFieldExample().run();
33+
}
34+
35+
@Override
36+
protected void execute() {
37+
FieldCondition condition = new FieldCondition();
38+
condition.setId("ConditionId");
39+
condition.setCondition("document['DocumentId'].field['fieldId2'].value == 'X'");
40+
condition.setAction("document['DocumentId'].field['fieldId1'].enabled = true");
41+
42+
DocumentPackage superDuperPackage = PackageBuilder.newPackageNamed(getPackageName())
43+
.describedAs("Description")
44+
.withSigner(SignerBuilder.newSignerWithEmail(email1)
45+
.withFirstName("Patty")
46+
.withLastName("Galant"))
47+
.withDocument(newDocumentWithName("Document")
48+
.withId(documentId)
49+
.fromStream(documentInputStream1, DocumentType.PDF)
50+
.withSignature(signatureFor(email1)
51+
.withId(signatureId)
52+
.onPage(0)
53+
.atPosition(400, 100)
54+
.withField(textField()
55+
.withId(fieldId1)
56+
.onPage(0)
57+
.atPosition(0, 0))
58+
.withField(checkBox()
59+
.withId(fieldId2)
60+
.onPage(0)
61+
.atPosition(0, 0))))
62+
.withCondition(condition)
63+
.build();
64+
65+
PackageId packageId = eslClient.createPackageOneStep(superDuperPackage);
66+
retrievedPackage = eslClient.getPackage(packageId);
67+
68+
FieldCondition newCondition = new FieldCondition();
69+
newCondition.setId("ConditionId");
70+
newCondition.setCondition("document['DocumentId'].field['fieldId2'].value == 'X'");
71+
newCondition.setAction("document['DocumentId'].field['fieldId1'].enabled = false");
72+
List<FieldCondition> conditions = new ArrayList<FieldCondition>();
73+
conditions.add(newCondition);
74+
75+
ConditionalField conditionalField = new ConditionalField();
76+
conditionalField.setId(fieldId2);
77+
conditionalField.setConditions(conditions);
78+
conditionalField.setStyle(FieldStyle.UNBOUND_CHECK_BOX);
79+
80+
eslClient.getApprovalService().updateConditionalField(packageId, documentId, signatureId, conditionalField);
81+
retrievedPackageWithUpdatedConditions = eslClient.getPackage(packageId);
82+
83+
conditions.clear();
84+
conditionalField.setConditions(conditions);
85+
eslClient.getApprovalService().updateConditionalField(packageId, documentId, signatureId, conditionalField);
86+
retrievedPackageWithoutConditions = eslClient.getPackage(packageId);
87+
88+
}
89+
}

sdk/src/main/java/com/silanis/esl/sdk/internal/UrlTemplate.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public class UrlTemplate {
108108
public static final String FIELD_PATH = "/packages/{packageId}/documents/{documentId}/approvals/{approvalId}/fields";
109109
public static final String FIELD_ID_PATH = "/packages/{packageId}/documents/{documentId}/approvals/{approvalId}/fields/{fieldId}";
110110
public static final String SIGNABLE_APPROVAL_PATH = "/packages/{packageId}/documents/{documentId}/signers/{signerId}/approvals";
111+
public static final String CONDITIONAL_FIELD_PATH = "/packages/{packageId}/documents/{documentId}/approvals/{approvalId}/fields/{fieldId}/conditionalFields";
111112

112113
// Provider Document Resource
113114
public static final String PROVIDER_DOCUMENTS = "/documents";

0 commit comments

Comments
 (0)