22
33import com .docusign .DSConfiguration ;
44import com .docusign .common .WorkArguments ;
5- import com .docusign .controller .maestro .services .MaestroMethodsService ;
6- import com .docusign .core .model .DoneExample ;
5+ import com .docusign .controller .maestro .services .TriggerWorkflowService ;
76import com .docusign .core .model .Session ;
87import com .docusign .core .model .User ;
98import org .springframework .stereotype .Controller ;
109import org .springframework .ui .ModelMap ;
1110import org .springframework .web .bind .annotation .RequestMapping ;
1211
1312import javax .servlet .http .HttpServletResponse ;
13+ import java .util .Optional ;
1414
1515/**
16- * This example demonstrates how to get all agreements .
16+ * This example demonstrates how to trigger maestro workflow .
1717 */
1818@ Controller
1919@ RequestMapping ("/mae001" )
2020public class Mae001TriggerWorkflowController extends AbstractMaestroController {
21- private static final String MODEL_TEMPLATE_ID = "templateId " ;
21+ public static final String EMBED = "pages/maestro/examples/embed " ;
2222
23- private static final String MODEL_WORKFLOW_ID = "workflowId " ;
23+ private static final String MAESTRO_WORKFLOW_CONFIG = "maestro-workflow-definition.json " ;
2424
25- private static final String MODEL_PUBLISH_LINK_ID = "publishLink " ;
25+ public static final String URL = "url " ;
2626
27- public static final String WORKFLOW_NAME = "Example workflow - send invite to signer" ;
27+ private static final String TEMPLATE_ID = "templateId" ;
28+
29+ private static final String WORKFLOW_ID = "workflowId" ;
30+
31+ private static final String PUBLISH_LINK = "publishLink" ;
32+
33+ public static final String WORKFLOW_NAME = "Example workflow - send invite to signer hahaha" ;
34+
35+ public static final String STATUS = "active" ;
2836
2937 public Mae001TriggerWorkflowController (DSConfiguration config , Session session , User user ) {
3038 super (config , "mae001" , user , session );
@@ -33,89 +41,15 @@ public Mae001TriggerWorkflowController(DSConfiguration config, Session session,
3341 @ Override
3442 protected void onInitModel (WorkArguments args , ModelMap model ) throws Exception {
3543 super .onInitModel (args , model );
36- //ApiClient apiClient = createApiClient(config.getMaestroBasePath(), user.getAccessToken());
37- var accountId = session .getAccountId ();
38- var accessToken = user .getAccessToken ();
39- String templateId = session .getTemplateId ();
4044
4145 try {
42- var workflowDefinition = MaestroMethodsService .getMaestroWorkflow (
43- accessToken ,
44- accountId );
45-
46- if (workflowDefinition .workflowsListSuccess () != null && workflowDefinition .workflowsListSuccess ().isPresent ()) {
47- workflowDefinition .workflowsListSuccess ().stream ()
48- .filter (w -> w .data ().isPresent ()) // ensure data() is present
49- .flatMap (w -> w .data ().get ().stream ()) // stream each workflow in the list
50- .filter (w -> w .name ().get ().equals (WORKFLOW_NAME )) // match by name
51- .findFirst ()
52- .ifPresent (w -> session .setWorkflowId (w .id ().get ()));
53- }
54-
55- var paused = MaestroMethodsService .PauseMaestroWorkflow (
56- accessToken ,
57- accountId ,
58- session .getWorkflowId ());
59-
60- var resumed = MaestroMethodsService .ResumeMaestroWorkflow (
61- accessToken ,
62- accountId ,
63- session .getWorkflowId ());
64-
65- var result = MaestroMethodsService .triggerWorkflowInstance (
66- accessToken ,
67- accountId ,
68- session .getWorkflowId (),
69- "a@gmail.com" ,
70- "anna" ,
71- "an@gmail.com" ,
72- "as" ,
73- "inst" );
74-
75- /*
76- if (session.getIsWorkflowPublished()) {
77- String publishLink = TriggerWorkflowService.publishWorkFlow(
78- apiClient,
79- accountId,
80- session.getWorkflowId());
81-
82- if (!publishLink.isEmpty()) {
83- model.addAttribute(MODEL_PUBLISH_LINK_ID, getTextForCodeExampleByApiType().getAdditionalPage()
84- .get(0).getResultsPageText().replaceFirst("\\{0}", publishLink));
85- } else {
86- session.setIsWorkflowPublished(false);
87- }
88- }
89-
90- if (session.getWorkflowId() == null && templateId != null) {
91- WorkflowManagementApi managementApi = new WorkflowManagementApi(apiClient);
92-
93- NewOrUpdatedWorkflowDefinitionResponse createWorkflow = CreateWorkflowService.createWorkflowDefinition(
94- managementApi,
95- accountId,
96- templateId);
97-
98- session.setWorkflowId(createWorkflow.getWorkflowDefinitionId());
99-
100- String publishLink = TriggerWorkflowService.publishWorkFlow(
101- apiClient,
102- accountId,
103- session.getWorkflowId());
104-
105- session.setIsWorkflowPublished(true);
106- model.addAttribute(MODEL_PUBLISH_LINK_ID, getTextForCodeExampleByApiType().getAdditionalPage().get(0)
107- .getResultsPageText().replaceFirst("\\{0}", publishLink));
108- }
109-
110- */
46+ ensureWorkflowExists (model );
11147 } catch (Exception exception ) {
112- System .out .println (exception .toString ());
113- exception .printStackTrace ();
11448 throw exception ;
11549 }
11650
117- model .addAttribute (MODEL_TEMPLATE_ID , templateId );
118- model .addAttribute (MODEL_WORKFLOW_ID , session .getWorkflowId ());
51+ model .addAttribute (TEMPLATE_ID , session . getTemplateId () );
52+ model .addAttribute (WORKFLOW_ID , session .getWorkflowId ());
11953 }
12054
12155 @ Override
@@ -126,19 +60,10 @@ protected Object doWork(
12660 ) throws Exception {
12761 var accountId = session .getAccountId ();
12862 var accessToken = user .getAccessToken ();
63+ var client = createAuthenticatedClient (accessToken );
12964
130- var workflowDefinition = MaestroMethodsService .PauseMaestroWorkflow (
131- accessToken ,
132- accountId ,
133- session .getWorkflowId ());
134-
135- var r = MaestroMethodsService .ResumeMaestroWorkflow (
136- accessToken ,
137- accountId ,
138- session .getWorkflowId ());
139-
140- var result = MaestroMethodsService .triggerWorkflowInstance (
141- accessToken ,
65+ var triggerResponse = TriggerWorkflowService .triggerWorkflowInstance (
66+ client ,
14267 accountId ,
14368 session .getWorkflowId (),
14469 args .getSignerEmail (),
@@ -147,10 +72,65 @@ protected Object doWork(
14772 args .getCcName (),
14873 args .getInstanceName ());
14974
150- DoneExample .createDefault (getTextForCodeExampleByApiType ().ExampleName )
151- .withMessage (getTextForCodeExampleByApiType ().ResultsPageText )
152- .withJsonObject (result )
153- .addToModel (model , config );
154- return DONE_EXAMPLE_PAGE ;
75+ triggerResponse .triggerWorkflowSuccess ().ifPresent (success -> {
76+ session .setInstanceId (success .instanceId ().orElse (null ));
77+ model .addAttribute (URL , success .instanceUrl ().orElse ("" ));
78+ });
79+
80+ model .addAttribute (LAUNCHER_TEXTS , config .getCodeExamplesText ().SupportingTexts );
81+ model .addAttribute ("example" , this .getTextForCodeExample ());
82+
83+ return EMBED ;
84+ }
85+
86+ private void ensureWorkflowExists (ModelMap model ) throws Exception {
87+ var accountId = session .getAccountId ();
88+ var accessToken = user .getAccessToken ();
89+ var templateId = session .getTemplateId ();
90+
91+ findActiveWorkflow (accessToken , accountId )
92+ .ifPresent (workflowId -> session .setWorkflowId (workflowId ));
93+
94+ if (session .getIsWorkflowPublished ()) {
95+ publishAndSetLink (model , accessToken , accountId , session .getWorkflowId ());
96+ }
97+
98+ if (session .getWorkflowId () == null && templateId != null ) {
99+ var workflowId = TriggerWorkflowService .createWorkflow (accessToken , accountId , templateId , MAESTRO_WORKFLOW_CONFIG );
100+
101+ session .setWorkflowId (workflowId );
102+ session .setIsWorkflowPublished (true );
103+
104+ publishAndSetLink (model , accessToken , accountId , workflowId );
105+ }
106+ }
107+
108+ private Optional <String > findActiveWorkflow (String accessToken , String accountId ) throws Exception {
109+ var client = createAuthenticatedClient (accessToken );
110+ var workflowsResponse = TriggerWorkflowService .getMaestroWorkflow (client , accountId );
111+
112+ return workflowsResponse .workflowsListSuccess ().stream ()
113+ .filter (w -> w .data ().isPresent ())
114+ .flatMap (w -> w .data ().orElseThrow ().stream ())
115+ .filter (workflow ->
116+ workflow .name ().orElseThrow ().equals (WORKFLOW_NAME ) && workflow .status ().orElseThrow ().equals (STATUS ))
117+ .map (workflow -> workflow .id ().orElse (null ))
118+ .findFirst ();
119+ }
120+
121+ private void publishAndSetLink (ModelMap model , String accessToken , String accountId , String workflowId ) throws Exception {
122+ String publishLink = TriggerWorkflowService .publishWorkflow (accessToken , accountId , workflowId );
123+
124+ if (!publishLink .isEmpty ()) {
125+ String linkText = getTextForCodeExampleByApiType ()
126+ .getAdditionalPage ()
127+ .get (0 )
128+ .getResultsPageText ()
129+ .replaceFirst ("\\ {0}" , publishLink );
130+
131+ model .addAttribute (PUBLISH_LINK , linkText );
132+ } else {
133+ session .setIsWorkflowPublished (false );
134+ }
155135 }
156136}
0 commit comments