1 var REST = library.REST.REST();
  2 
  3 //Import parameters
  4 var myImportParameters = null;
  5 var kUpdateTypes = {
  6   viewanddata: 0,
  7   data: 1,
  8   view: 2,
  9   forceview: 3,
 10 };
 11 
 12 /**
 13  * Imports the source file or folder and pushes it to the response.
 14  *
 15  * @param theSource the file or folder to import (path or asset id)
 16  */
 17 function fileOrFolderImport(theSource) {
 18   var aToImport = null;
 19   var aIsFile = false;
 20   if (isNaN(theSource)) {
 21     if (!context.getUser().isGlobalAdmin()) {
 22       REST.pushError(
 23         REST.errors.e403,
 24         "Only global admins can import directories"
 25       );
 26       return;
 27     }
 28     //theSource isn't an id, its probably a path
 29     theSource = REST.getFullPath(theSource);
 30     if (theSource.lastIndexOf("/") == theSource.length - 1) {
 31       aToImport = new UnmanagedFolder(theSource);
 32     } else {
 33       aToImport = new UnmanagedFile(theSource);
 34       aIsFile = true;
 35     }
 36   } else {
 37     if (!context.getUser().isPermissionEnabled("importAssets")) {
 38       REST.pushError(
 39         REST.errors.e403,
 40         "importAssets permission is not enabled"
 41       );
 42       return;
 43     }
 44     aToImport =
 45       searchManager.filterByACL([theSource]).length == 0
 46         ? null
 47         : fileManager.getFileObjectById(theSource);
 48     aIsFile = true;
 49   }
 50   if (aToImport == null) {
 51     REST.pushError(
 52       REST.errors.e404,
 53       "Could not find file or folder: " + theSource
 54     );
 55     return;
 56   }
 57   //Import file or folder and add data to output object
 58   var aManaged;
 59   if (aIsFile) {
 60     aManaged = fileManager.fileImport(aToImport, myImportParameters);
 61     REST.push(aManaged);
 62   } else {
 63     aManaged = fileManager.folderImportWithParameters(
 64       aToImport,
 65       myImportParameters
 66     );
 67     REST.push(aManaged);
 68   }
 69 
 70   //Trigger asset added on new assets
 71   if (aToImport instanceof UnmanagedFile && !!aManaged) {
 72     workflowManager.triggerAssetAdded(aManaged);
 73   }
 74 }
 75 
 76 /**
 77  * @name Import
 78  * @class Imports files or folders
 79  * @description Given the files/directories in "data" , this endpoint will import each into MediaBeacon
 80  * @param data an array of file/directory paths or asset id's ["To/Import/file.txt",123456,"Directory/Import/" ...]
 81  * @param [updateType] string. Options are:<br>
 82  *                  'ViewAndData' - previews and metadata potentially will be updated. Does not update on demand previews.<br>
 83  *                  'Data' - metadata potentially will be updated.<br>
 84  *                  'View' - previews potentially will be updated. Does not update on demand previews.<br>
 85  *                  'ForceView' - the creation of a new preview request will be force regardless of the state of the cache and preview queue.
 86  *                   On demand previews will be cleared.
 87  * @param [verbose=false] Setting this to true will collect a variety of default values for each asset.
 88  * @param [fields] An array of field id's to collect the values for each asset
 89  * @returns [{assetInfo},{directoryInfo}, ... ]
 90  *
 91  * @example /wf/restapi/v2/import
 92  *
 93  * Parameters:
 94  * data=["To/Import/file.txt",123456,"Directory/Import/"]
 95  * updateType=ViewAndData
 96  * verbose=true
 97  *
 98  * Response:
 99  [
100 	 {
101 	   "id": 201629348,
102 	   "name": "file.txt",
103 	   "path": "To/Import/file.txt",
104 	   "height": 0,
105 	   "width": 0,
106 	   "bytes": 0,
107 	   "lastModified": 1508164407000,
108 	   "mimeType": "text/plain",
109 	   "previews": {
110 		 "thumbnail": "../servlet/jb.view?table=thumbnails&col=thumbnails&id=pe_323031363239333438",
111 		 "viewex": "../servlet/jb.view?table=viewex&col=viewex&id=pe_323031363239333438",
112 		 "downloadUrl": "../servlet/dload?id=pe_323031363239333438"
113 	   }
114 	 },
115 	 {
116 	   "path": "Directory/Import/",
117 	   "name": "Import",
118 	   "resolver": "directory://161"
119 	 }
120  ]
121  */
122 function main() {
123   //Setup import parameters
124   var anUpdateType = context.getParameter("updateType");
125   myImportParameters = new ImportParameters();
126   var aNumUpdate = !anUpdateType
127     ? null
128     : kUpdateTypes[anUpdateType.toLowerCase()];
129   if (!!aNumUpdate) {
130     myImportParameters.setUpdateType(aNumUpdate);
131   }
132   REST.setCallback(fileOrFolderImport);
133   return REST.execute("data"); //data is expected to be an array of folder paths, file paths or asset id's
134 }
135 main();
136