@@ -12,7 +12,7 @@ import org.springframework.web.multipart.MultipartFile
1212class DataObjectAttachmentController {
1313
1414 def searchableService
15- def attachmentableService
15+ def fileUploadHelperService
1616 def ajaxUploaderService
1717 def grailsApplication
1818
@@ -78,21 +78,17 @@ class DataObjectAttachmentController {
7878 */
7979
8080 def uploadFile = {
81+ // create temporary file
8182 def timestamp = new java.util.Date (). time
82-
83- def uploadedTempFile = new File (grailsApplication. config. openlab?. upload?. dir?: " " + " upload" + timestamp + " .tmp" )
84-
85- println uploadedTempFile
86- if (! uploadedTempFile. canWrite()){
87- return render(text : [success : false ] as JSON , contentType : ' text/json' )
88- }
83+ def uploadedTempFile = new File (((grailsApplication. config. openlab?. upload?. dir?: " " ) + " upload" + timestamp + " .tmp" ))
8984
9085 try {
91- if (request instanceof MultipartHttpServletRequest ) {
92- MultipartFile uploadedFile = ((MultipartHttpServletRequest ) request). getFile(' qqfile' )
93- ajaxUploaderService. upload(uploadedFile. inputStream, uploadedTempFile)
94- }
95- } catch (Exception e){
86+ if (! new File (grailsApplication. config. openlab?. upload?. dir?: " " ). canWrite()){
87+ return render(text : [success : false ] as JSON , contentType : ' text/json' )
88+ }
89+
90+ ajaxUploaderService. upload((InputStream ) fileUploadHelperService. selectInputStream(request), uploadedTempFile)
91+ } catch (FileUploadException e){
9692 log. error(" Failed to upload file." , e)
9793 return render(text : [success :false ] as JSON , contentType :' text/json' )
9894 }
@@ -103,61 +99,31 @@ class DataObjectAttachmentController {
10399
104100 def createWithAddin = {
105101
106- def doaInstance = new DataObjectAttachment ();
107-
108- // extract attachmentLink_* from params. it contains necessary information about which dataObject to attach to.
109- for (String key in params. keySet()) {
110- if (key. startsWith(" attachmentLink_" )) {
102+ // create one dataobjectattachment for each file that has been uploaded
103+ for (int currentFile = 0 ; currentFile <= params. int (" filesUploaded" ); currentFile++ ){
104+ println params. " fileName_${ currentFile} "
111105
112- def keySplitArray = key . split( " _ " )
113- def geneAndId = keySplitArray[ 1 ]
106+ // fill a dataobject attachment instance with linked data object
107+ DataObjectAttachment doaInstance = fileUploadHelperService . createDataObjectAttachmentInstance(params)
114108
115- def geneAndIdSplitArray = geneAndId. split(" :" )
116- def id = Long . valueOf(geneAndIdSplitArray[1 ])
117- def domainName = geneAndIdSplitArray[0 ]
118-
119- def splitArray = params[key]. split(" :" )
120-
121- // def domainName = splitArray[0]
122- def name = splitArray[1 ]
123-
124- def domainInstance = grailsApplication. getArtefactByLogicalPropertyName(" Domain" , domainName. toString())?. getClazz()?. get(id)
125-
126- if (domainInstance)
127- doaInstance. addToDataObjects(domainInstance)
109+ // rename the temporary uploaded file to a permanent file and link it to the doaInstance
110+ doaInstance = fileUploadHelperService. processTempFile(params. " filePath_${ currentFile} " , params. " fileName_${ currentFile} " , doaInstance)
111+ if (! doaInstance){
112+ flash. message = " Failed to process uploaded file"
113+ render template : " ../addins/attachmentsAddin" , layout : " body"
114+ return
128115 }
129- }
130-
131-
132- // create attachments for these files using the dataObjects extracted above.
133- def f = new File (params. tempFile)
134116
135- if (f. canRead()) {
136- def timestamp = new java.util.Date ()
137-
138- doaInstance. setFileUploadDate(timestamp)
139-
140- String folder = grailsApplication. config. openlab?. upload?. dir?: " "
141- String newPath = folder + timestamp. getTime(). toString() + " _" + params. fileName
142- doaInstance. setFileName(params. fileName)
143- def fileArray = params. fileName. toString(). split(" \\ ." )
144- doaInstance. setFileType(fileArray[fileArray. length - 1 ]. toUpperCase())
145- doaInstance. setPathToFile(newPath)
146- doaInstance. setDescription(" " )
147-
148- f. renameTo(new File (newPath))
149- }
150- else {
151- render " <div class='message'>Failed to read file</div>"
152- return
153- }
154-
155- if (! doaInstance. save(flush : true )) {
156- render " <div class='message'>Save failed</div>"
157- return
117+ // save it
118+ else if (! doaInstance. save(flush : true )) {
119+ flash. message = " Save failed"
120+ render template : " ../addins/attachmentsAddin" , layout : " body"
121+ return
122+ }
158123 }
159124
160- render " <div class='message'>Save successful!</div>"
125+ flash. message = " Save successful"
126+ render template : " ../addins/attachmentsAddin" , layout : " body"
161127 }
162128
163129 /**
@@ -297,4 +263,49 @@ class DataObjectAttachmentController {
297263 redirect(action : " list" )
298264 }
299265 }
266+
267+ def deleteWithinTab = {
268+ println params
269+ def dataObjectAttachmentInstance = DataObjectAttachment . get(params. id)
270+ if (dataObjectAttachmentInstance) {
271+ try {
272+ File file = new File (dataObjectAttachmentInstance. getPathToFile());
273+
274+ if (file. exists()) {
275+ if (file. canWrite()) {
276+ file. delete();
277+ }
278+ else {
279+ render (text : [success : false , message : " Could not write on file!" ] as JSON , contentType :' text/json' )
280+ }
281+
282+ dataObjectAttachmentInstance. delete(flush : true )
283+ flash. message = " ${ message(code: 'default.deleted.message', args: [message(code: 'dataObjectAttachment.label', default: 'DataObjectAttachment'), params.id])} "
284+ }
285+ else {
286+ dataObjectAttachmentInstance. delete(flush : true )
287+ }
288+
289+ render (text : [success : false , message : " File does not exist, deleted only the database entry." ] as JSON , contentType :' text/json' )
290+ }
291+ catch (org.springframework.dao.DataIntegrityViolationException e) {
292+ def message = " ${ message(code: 'default.not.deleted.message', args: [message(code: 'dataObjectAttachment.label', default: 'DataObjectAttachment'), params.id])} "
293+ render (text : [success : false , message : message] as JSON , contentType :' text/json' )
294+ }
295+ catch (IOException ioe) {
296+ def message = " ${ message(code: 'default.not.deleted.message', args: [message(code: 'dataObjectAttachment.label', default: 'DataObjectAttachment'), params.id])} "
297+ render (text : [success : false , message : message] as JSON , contentType :' text/json' )
298+ }
299+ }
300+ else {
301+ flash. message = " ${ message(code: 'default.not.found.message', args: [message(code: 'dataObjectAttachment.label', default: 'DataObjectAttachment'), params.id])} "
302+ render (text : [success : true ] as JSON , contentType :' text/json' )
303+ }
304+ }
305+
306+ def renderAttachmentsTab = {
307+ def module = new org.openlab.module.tab.AttachmentsTabModule ()
308+ def model = module. getModelForDomainClass(" " , params. id)
309+ render template : " ../tabs/attachmentsTab" , model : model
310+ }
300311}
0 commit comments