Skip to content

Commit d01767c

Browse files
author
Makoto Hirayama
committed
Update samples for cacoo.com api update on 2012.09.27
- Use editor token function - use editor automation function
1 parent 4be7f5f commit d01767c

File tree

5 files changed

+111
-8
lines changed

5 files changed

+111
-8
lines changed

WebContent/WEB-INF/jsp/cacoo/diagrams.jsp

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<tr>
3636
<td><a href="detail?diagramId=<%=d.get("diagramId")%>"><%=d.get("title")%></a></td>
3737
<td>
38-
<span class="action"><a href="<%=CacooUtils.editorLink((String)d.get("diagramId"), request)%>">EDIT</a></span>
38+
<span class="action"><a href="editor?diagramId=<%=d.get("diagramId")%>">EDIT</a></span>
3939
<span class="action"><a href="copyInit?diagramId=<%=d.get("diagramId")%>">COPY</a></span>
4040
<span class="action"><a href="delete?diagramId=<%=d.get("diagramId")%>">DELETE</a></span>
4141
</td>

WebContent/WEB-INF/web.xml

+8
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@
5656
<servlet-name>image</servlet-name>
5757
<servlet-class>com.cacoo.apisample.cacoo.servlet.CacooImageServlet</servlet-class>
5858
</servlet>
59+
<servlet>
60+
<servlet-name>editor</servlet-name>
61+
<servlet-class>com.cacoo.apisample.cacoo.servlet.CacooEditorServlet</servlet-class>
62+
</servlet>
5963

6064
<servlet-mapping>
6165
<servlet-name>welcome</servlet-name>
@@ -97,6 +101,10 @@
97101
<servlet-name>image</servlet-name>
98102
<url-pattern>/cacoo/image</url-pattern>
99103
</servlet-mapping>
104+
<servlet-mapping>
105+
<servlet-name>editor</servlet-name>
106+
<url-pattern>/cacoo/editor</url-pattern>
107+
</servlet-mapping>
100108

101109
<display-name>CacooApiSample</display-name>
102110

src/com/cacoo/apisample/cacoo/CacooUtils.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class CacooUtils {
3838
public static final String SESSION_OAUTH_CONSUMER = "SESSION_OAUTH_CONSUMER";
3939

4040
// Cacoo URL
41+
// FIXME If you have private enterprise package, change this URL to your system.
4142
public static final String CACOO_URL = "https://cacoo.com/";
4243

4344
private static final String ACCESS_TOKEN_URL = CACOO_URL+"oauth/access_token";
@@ -131,7 +132,7 @@ public static OAuthToken retrieveAccessToken(HttpServletRequest req, String oaut
131132
/*
132133
* URL for diagram editor.
133134
*/
134-
public static String editorLink(String diagramId, HttpServletRequest req){
135+
public static String editorLink(String diagramId, String editorToken, String automationToken, HttpServletRequest req){
135136
// FIXME Please specify the url to the "callbackURL" when users close editor page.
136137
JsonObject root = new JsonObject();
137138
root.addProperty("callbackUrl", createRequestHost(req)+req.getContextPath()+"/cacoo/");
@@ -142,7 +143,14 @@ public static String editorLink(String diagramId, HttpServletRequest req){
142143
buttons.add(closeButton);
143144
root.add("buttons",buttons);
144145
try{
145-
return CACOO_URL+"diagrams/"+diagramId+"/edit?parameter="+URLEncoder.encode(root.toString(),"UTF-8");
146+
String url = CACOO_URL+"diagrams/"+diagramId+"/edit?parameter="+URLEncoder.encode(root.toString(),"UTF-8");
147+
if (editorToken != null && editorToken.length() > 0) {
148+
url += "&editorToken="+URLEncoder.encode(editorToken, "UTF-8");
149+
}
150+
if (automationToken != null && automationToken.length() > 0) {
151+
url += "&automationToken="+URLEncoder.encode(automationToken, "UTF-8");
152+
}
153+
return url;
146154
}catch (Exception e) {
147155
throw new RuntimeException(e);
148156
}

src/com/cacoo/apisample/cacoo/servlet/CacooCreateServlet.java

+21-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
/*
1717
* Create a new diagram and redirect to the edit page.
1818
* https://cacoo.com/api_create_diagram
19+
* https://cacoo.com/api_editor_token
1920
*/
2021
public class CacooCreateServlet extends HttpServlet {
2122
private static final long serialVersionUID = 1L;
@@ -24,17 +25,32 @@ public class CacooCreateServlet extends HttpServlet {
2425
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
2526
throws ServletException, IOException {
2627
try{
27-
HttpResponse res = CacooUtils.cacooApi(req, resp, "api/v1/diagrams/create.json", null);
28+
HttpResponse res;
29+
JsonElement json;
30+
JsonObject root;
31+
32+
// step-1 : create diagram
33+
res = CacooUtils.cacooApi(req, resp, "api/v1/diagrams/create.json", null);
2834
if(res==null){
2935
// OAuth authentication is required.
3036
return;
3137
}
32-
JsonElement json = CacooUtils.httpResponse2json(res);
33-
JsonObject root = json.getAsJsonObject();
38+
json = CacooUtils.httpResponse2json(res);
39+
root = json.getAsJsonObject();
3440
String diagramId = root.get("diagramId").getAsString();
35-
// Redirect to editing page.
36-
resp.sendRedirect(CacooUtils.editorLink(diagramId, req));
3741

42+
// step-2 : get authentication token to open editing page
43+
res = CacooUtils.cacooApi(req, resp, "api/v1/diagrams/"+diagramId+"/editor/token.json", null);
44+
if(res==null){
45+
// OAuth authentication is required.
46+
return;
47+
}
48+
json = CacooUtils.httpResponse2json(res);
49+
root = json.getAsJsonObject();
50+
String editorToken = root.get("token").getAsString();
51+
52+
// step-3 : redirect to editing page.
53+
resp.sendRedirect(CacooUtils.editorLink(diagramId, editorToken, "", req));
3854
}catch (Exception e) {
3955
e.printStackTrace();
4056
req.setAttribute("message", e.getMessage());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.cacoo.apisample.cacoo.servlet;
2+
3+
import java.io.IOException;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
import javax.servlet.ServletException;
8+
import javax.servlet.http.HttpServlet;
9+
import javax.servlet.http.HttpServletRequest;
10+
import javax.servlet.http.HttpServletResponse;
11+
12+
import org.apache.http.HttpResponse;
13+
14+
import com.cacoo.apisample.cacoo.CacooUtils;
15+
import com.google.gson.JsonElement;
16+
import com.google.gson.JsonObject;
17+
18+
/*
19+
* Edit diagram (Automatically add image from URL)
20+
* https://cacoo.com/api_editor_token
21+
* https://cacoo.com/api_editor_automation
22+
*/
23+
public class CacooEditorServlet extends HttpServlet {
24+
private static final long serialVersionUID = 1L;
25+
26+
@Override
27+
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
28+
throws ServletException, IOException {
29+
String diagramId = req.getParameter("diagramId");
30+
try{
31+
HttpResponse res;
32+
JsonElement json;
33+
JsonObject root;
34+
35+
// step-1 : get authentication token to open editing page
36+
res = CacooUtils.cacooApi(req, resp, "api/v1/diagrams/"+diagramId+"/editor/token.json", null);
37+
if(res==null){
38+
// OAuth authentication is required.
39+
return;
40+
}
41+
json = CacooUtils.httpResponse2json(res);
42+
root = json.getAsJsonObject();
43+
String editorToken = root.get("token").getAsString();
44+
45+
// step-2 : register automation command and get token
46+
Map<String,String> params = new HashMap<String, String>();
47+
48+
// FIXME Replace URL that you want to insert image.
49+
String imageUrl = "http://www.nulab.co.jp/";
50+
51+
params.put("command", "{\"operations\":[{\"type\":\"AddImageUrl\",\"parameter\":{\"url\":\""+imageUrl+"\",\"x\":10,\"y\":10}}]}");
52+
res = CacooUtils.cacooApi(req, resp, "api/v1/diagrams/"+diagramId+"/editor/automation.json", params);
53+
if(res==null){
54+
// OAuth authentication is required.
55+
return;
56+
}
57+
json = CacooUtils.httpResponse2json(res);
58+
root = json.getAsJsonObject();
59+
String automationToken = root.get("token").getAsString();
60+
61+
// step-3 : redirect to editing page.
62+
resp.sendRedirect(CacooUtils.editorLink(diagramId, editorToken, automationToken, req));
63+
}catch (Exception e) {
64+
e.printStackTrace();
65+
req.setAttribute("message", e.getMessage());
66+
req
67+
.getRequestDispatcher("/WEB-INF/jsp/cacoo/error.jsp")
68+
.forward(req, resp);
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)