mirror of
https://github.com/ONLYOFFICE/document-server-integration.git
synced 2026-02-10 18:05:10 +08:00
feat(java): refresh file config
This commit is contained in:
@ -20,6 +20,8 @@ package controllers;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import entities.FileModel;
|
||||
import entities.FileType;
|
||||
import entities.User;
|
||||
import helpers.ConfigManager;
|
||||
@ -143,6 +145,9 @@ public class IndexServlet extends HttpServlet {
|
||||
case "formats":
|
||||
formats(request, response, writer);
|
||||
break;
|
||||
case "config":
|
||||
config(request, response, writer);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1074,6 +1079,57 @@ public class IndexServlet extends HttpServlet {
|
||||
writer.write(gson.toJson(data));
|
||||
}
|
||||
|
||||
private static void config(final HttpServletRequest request,
|
||||
final HttpServletResponse response,
|
||||
final PrintWriter writer) {
|
||||
try {
|
||||
String fileName = FileUtility.getFileName(request.getParameter("fileName"));
|
||||
String permissions = FileUtility.getFileName(request.getParameter("permissions"));
|
||||
Boolean directUrl = request.getParameter("directUrl").toLowerCase() == "true";
|
||||
|
||||
if (!new File(DocumentManager.storagePath(fileName, null)).exists()) {
|
||||
throw(new Exception("File not found"));
|
||||
}
|
||||
|
||||
CookieManager cm = new CookieManager(request);
|
||||
User user = Users.getUser(cm.getCookie("uid"));
|
||||
Gson gson = new Gson();
|
||||
|
||||
Map<String, Object> document = new HashMap<>();
|
||||
document.put("title", fileName);
|
||||
document.put("key", ServiceConverter
|
||||
.generateRevisionId(DocumentManager
|
||||
.curUserHostAddress(null) + "/" + fileName + "/"
|
||||
+ Long.toString(new File(DocumentManager.storagePath(fileName, null))
|
||||
.lastModified())));
|
||||
document.put("url", DocumentManager.getDownloadUrl(fileName, true));
|
||||
document.put("referenceData", new FileModel.ReferenceData(
|
||||
fileName, DocumentManager.curUserHostAddress(null), user));
|
||||
document.put("permissions", gson.fromJson(permissions, new TypeToken<Map<String, Object>>() { }.getType()));
|
||||
if (directUrl) {
|
||||
document.put("directUrl", DocumentManager.getDownloadUrl(fileName, false));
|
||||
}
|
||||
|
||||
Map<String, Object> editorConfig = new HashMap<>();
|
||||
editorConfig.put("mode", "edit");
|
||||
editorConfig.put("callbackUrl", DocumentManager.getCallback(fileName));
|
||||
|
||||
Map<String, Object> config = new HashMap<>();
|
||||
config.put("document", document);
|
||||
config.put("editorConfig", editorConfig);
|
||||
if (DocumentManager.tokenEnabled()) {
|
||||
config.put("token", DocumentManager.createToken(config));
|
||||
}
|
||||
|
||||
writer.write(gson.toJson(config));
|
||||
} catch (Exception ex) {
|
||||
JSONObject responseBody = new JSONObject();
|
||||
responseBody.put("error", ex.getMessage());
|
||||
String responseContent = responseBody.toJSONString();
|
||||
writer.write(responseContent);
|
||||
}
|
||||
}
|
||||
|
||||
// process get request
|
||||
@Override
|
||||
protected void doGet(final HttpServletRequest request,
|
||||
|
||||
@ -375,7 +375,7 @@ public class FileModel {
|
||||
}
|
||||
}
|
||||
|
||||
public class ReferenceData {
|
||||
public static class ReferenceData {
|
||||
private final String instanceId;
|
||||
private final Map<String, String> fileKey;
|
||||
public ReferenceData(final String fileName, final String curUserHostAddress, final User user) {
|
||||
|
||||
@ -84,6 +84,7 @@ public final class Users {
|
||||
add("Can't protect file");
|
||||
add("View file without collaboration");
|
||||
add("Can’t submit forms");
|
||||
add("Can't refresh outdated file");
|
||||
}};
|
||||
|
||||
private static List<User> users = new ArrayList<User>() {{
|
||||
|
||||
@ -170,6 +170,18 @@
|
||||
}
|
||||
};
|
||||
|
||||
var onRequestRefreshFile = function(event) {
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", "IndexServlet?type=config&fileName=" + encodeURIComponent(config.document.title) +
|
||||
"&directUrl=" + !!config.document.directUrl +
|
||||
"&permissions=" + encodeURIComponent(JSON.stringify(config.document.permissions)));
|
||||
xhr.send();
|
||||
xhr.onload = function () {
|
||||
innerAlert(xhr.responseText);
|
||||
docEditor.refreshFile(JSON.parse(xhr.responseText));
|
||||
};
|
||||
};
|
||||
|
||||
var onRequestOpen = function(event) { // user open external data source
|
||||
innerAlert("onRequestOpen");
|
||||
var windowName = event.data.windowName;
|
||||
@ -366,6 +378,7 @@
|
||||
};
|
||||
|
||||
if (config.editorConfig.user.id) {
|
||||
config.events['onRequestRefreshFile'] = onRequestRefreshFile;
|
||||
config.events['onRequestClose'] = onRequestClose;
|
||||
// add mentions for not anonymous users
|
||||
config.events['onRequestUsers'] = onRequestUsers;
|
||||
|
||||
Reference in New Issue
Block a user