Source: xxe/res/RemoteFiles.js

  1. /**
  2. * {@linkplain ResourceStorage Resource storage} for remote,
  3. * that is, XXE server-side, resources.
  4. */
  5. export class RemoteFiles extends ResourceStorage {
  6. /**
  7. * Constructs an XXE server-side resource storage for use by specified
  8. * XML Editor.
  9. */
  10. constructor(xmlEditor) {
  11. super(xmlEditor);
  12. }
  13. loadResource(uri) {
  14. return this._xmlEditor.sendRequest("loadResource", uri)
  15. .then((data) => {
  16. if (data) {
  17. return new RemoteFile(uri, data);
  18. } else {
  19. // Unknown URI.
  20. return null;
  21. }
  22. },
  23. (error) => {
  24. throw new Error(
  25. `Cannot load resource "${uri}": ${error}`);
  26. });
  27. }
  28. storeResource(data, uri) {
  29. return this._xmlEditor.sendRequest("storeResource", data, uri)
  30. .then((done) => {
  31. if (done) {
  32. return new RemoteFile(uri, data);
  33. } else {
  34. // Unknown URI.
  35. return null;
  36. }
  37. },
  38. (error) => {
  39. throw new Error(
  40. `Cannot store resource '${uri}': ${error}`);
  41. });
  42. }
  43. openResource(options) {
  44. let uri = [ "???" ];
  45. return RemoteFileDialog.showDialog(this._xmlEditor, options)
  46. .then((choice) => {
  47. if (choice === null) {
  48. // Canceled by user.
  49. return null;
  50. } else {
  51. uri[0] = choice.uri;
  52. return this._xmlEditor.sendRequest("loadResource", uri[0]);
  53. }
  54. })
  55. .then((data) => {
  56. if (data === null) {
  57. // Canceled by user.
  58. return null;
  59. } else {
  60. return new RemoteFile(uri[0], data);
  61. }
  62. })
  63. .catch((error) => {
  64. throw new Error(`Cannot load resource "${uri[0]}": ${error}`);
  65. });
  66. }
  67. }