From: Franz W. <jav...@us...> - 2007-06-29 13:57:17
|
Update of /cvsroot/dcm4che/dcm4jboss-wado/src/java/org/dcm4chex/wado/mbean In directory sc8-pr-cvs12.sourceforge.net:/tmp/cvs-serv7077/src/java/org/dcm4chex/wado/mbean Modified Files: WADOSupport.java Log Message: [#DCMEE-453] Forward of WADO request to central archive does NOT work! Add: forwarding to WADO server referenced by externalRetrieveAET (hostname) if instance has no files. Index: WADOSupport.java =================================================================== RCS file: /cvsroot/dcm4che/dcm4jboss-wado/src/java/org/dcm4chex/wado/mbean/WADOSupport.java,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** WADOSupport.java 21 May 2007 15:43:54 -0000 1.43 --- WADOSupport.java 29 Jun 2007 13:57:14 -0000 1.44 *************** *** 217,265 **** public WADOResponseObject getWADOObject(WADORequestObject req) { log.info("Get WADO object for " + req.getObjectUID()); ! FileDTO fileDTO = null; try { ! List l = new QueryFilesCmd(req.getObjectUID()).getFileDTOs(); ! if (!l.isEmpty()) { ! fileDTO = (FileDTO) l.iterator().next(); } } catch (SQLException x) { log.error("Cant get DICOM Object file reference for " + req.getObjectUID(), x); } ! log.debug("Found fileDTO:" + fileDTO); ! if (fileDTO == null) { return new WADOStreamResponseObjectImpl(null, CONTENT_TYPE_HTML, HttpServletResponse.SC_NOT_FOUND, ! "DICOM object not found! (Cant get file reference)"); } ! log.debug("SOP Class UID or requested WADO object:" ! + fileDTO.getSopClassUID()); ! String contentType = getPrefContentType(req, fileDTO); log.debug("preferred ContentType:" + contentType); WADOResponseObject resp = null; if (CONTENT_TYPE_JPEG.equals(contentType)) { ! resp = this.handleJpg(req); } else if (CONTENT_TYPE_DICOM.equals(contentType)) { return handleDicom(req); // audit log is done in handleDicom to // avoid extra query. ! } else if (CONTENT_TYPE_DICOM_XML.equals(contentType)) { if (dict == null) dict = DictionaryFactory.getInstance() .getDefaultTagDictionary(); ! resp = handleTextTransform(req, fileDTO, contentTypeDicomXML, getDicomXslURL(), dict); } else if (CONTENT_TYPE_HTML.equals(contentType)) { ! resp = handleTextTransform(req, fileDTO, contentType, getHtmlXslURL(), null); } else if (CONTENT_TYPE_XHTML.equals(contentType)) { ! resp = handleTextTransform(req, fileDTO, contentType, getXHtmlXslURL(), null); } else if (CONTENT_TYPE_XML.equals(contentType)) { ! resp = handleTextTransform(req, fileDTO, CONTENT_TYPE_XML, getXmlXslURL(), null); } else { log.debug("Content type not supported! :" + contentType + "\nrequested contentType(s):" + req.getContentTypes() ! + " SOP Class UID:" + fileDTO.getSopClassUID()); resp = new WADOStreamResponseObjectImpl(null, CONTENT_TYPE_DICOM, HttpServletResponse.SC_NOT_IMPLEMENTED, --- 217,298 ---- public WADOResponseObject getWADOObject(WADORequestObject req) { log.info("Get WADO object for " + req.getObjectUID()); ! Dataset objectDs = null; ! QueryCmd cmd = null; try { ! Dataset dsQ = dof.newDataset(); ! dsQ.putUI(Tags.SOPInstanceUID, req.getObjectUID()); ! dsQ.putUI(Tags.SOPClassUID); ! dsQ.putCS(Tags.QueryRetrieveLevel, "IMAGE"); ! cmd = QueryCmd.create(dsQ, true, true); ! cmd.execute(); ! if (cmd.next()) { ! objectDs = cmd.getDataset(); } } catch (SQLException x) { log.error("Cant get DICOM Object file reference for " + req.getObjectUID(), x); + } finally { + if ( cmd != null ) cmd.close(); } ! log.debug("Found object:" + req.getObjectUID()+":");log.debug(objectDs); ! if (objectDs == null) { return new WADOStreamResponseObjectImpl(null, CONTENT_TYPE_HTML, HttpServletResponse.SC_NOT_FOUND, ! "DICOM object not found! objectUID:"+req.getObjectUID()); } ! String contentType = getPrefContentType(req, objectDs); log.debug("preferred ContentType:" + contentType); WADOResponseObject resp = null; if (CONTENT_TYPE_JPEG.equals(contentType)) { ! return this.handleJpg(req); } else if (CONTENT_TYPE_DICOM.equals(contentType)) { return handleDicom(req); // audit log is done in handleDicom to // avoid extra query. ! } ! File file = null; ! try { ! file = this.getDICOMFile(req.getStudyUID(), req.getSeriesUID(), req ! .getObjectUID()); ! if (file == null) { ! if (log.isDebugEnabled()) ! log.debug("Dicom object not found: " + req); ! return new WADOStreamResponseObjectImpl(null, ! contentType, HttpServletResponse.SC_NOT_FOUND, ! "DICOM object not found!"); ! } ! } catch (IOException x) { ! log.error("Exception in getWADOObject: " + x.getMessage(), x); ! return new WADOStreamResponseObjectImpl(null, contentType, ! HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ! "Unexpected error! Cant get file"); ! } catch (NeedRedirectionException nre) { ! if (!WADOCacheImpl.getWADOCache().isClientRedirect()) { ! return getRemoteDICOMFile(nre.getHostname(), req); ! } else { ! return new WADOStreamResponseObjectImpl(null, ! contentType, ! HttpServletResponse.SC_TEMPORARY_REDIRECT, ! getRedirectURL(nre.getHostname(), req).toString()); ! } ! } ! if (CONTENT_TYPE_DICOM_XML.equals(contentType)) { if (dict == null) dict = DictionaryFactory.getInstance() .getDefaultTagDictionary(); ! resp = handleTextTransform(req, file, contentTypeDicomXML, getDicomXslURL(), dict); } else if (CONTENT_TYPE_HTML.equals(contentType)) { ! resp = handleTextTransform(req, file, contentType, getHtmlXslURL(), null); } else if (CONTENT_TYPE_XHTML.equals(contentType)) { ! resp = handleTextTransform(req, file, contentType, getXHtmlXslURL(), null); } else if (CONTENT_TYPE_XML.equals(contentType)) { ! resp = handleTextTransform(req, file, CONTENT_TYPE_XML, getXmlXslURL(), null); } else { log.debug("Content type not supported! :" + contentType + "\nrequested contentType(s):" + req.getContentTypes() ! + " SOP Class UID:" + objectDs.getString(Tags.SOPClassUID)); resp = new WADOStreamResponseObjectImpl(null, CONTENT_TYPE_DICOM, HttpServletResponse.SC_NOT_IMPLEMENTED, *************** *** 274,280 **** * @return */ ! private String getPrefContentType(WADORequestObject req, FileDTO fileDTO) { List contentTypes = req.getContentTypes(); ! List supportedContentTypes = getSupportedContentTypes(fileDTO); if (log.isDebugEnabled()) { log.debug("Requested content Types:" + contentTypes); --- 307,313 ---- * @return */ ! private String getPrefContentType(WADORequestObject req, Dataset objectDs) { List contentTypes = req.getContentTypes(); ! List supportedContentTypes = getSupportedContentTypes(objectDs); if (log.isDebugEnabled()) { log.debug("Requested content Types:" + contentTypes); *************** *** 299,305 **** * @return */ ! private List getSupportedContentTypes(FileDTO fileDTO) { List types = new ArrayList(); ! String sopCuid = fileDTO.getSopClassUID(); if (getTextSopCuids().containsValue(sopCuid)) { types.add(CONTENT_TYPE_HTML); --- 332,338 ---- * @return */ ! private List getSupportedContentTypes(Dataset objectDs) { List types = new ArrayList(); ! String sopCuid = objectDs.getString(Tags.SOPClassUID); if (getTextSopCuids().containsValue(sopCuid)) { types.add(CONTENT_TYPE_HTML); *************** *** 601,609 **** private WADOResponseObject handleTextTransform(WADORequestObject req, ! FileDTO fileDTO, String contentType, String xslURL, TagDictionary dict) { try { - File file = FileUtils.toFile(fileDTO.getDirectoryPath(), fileDTO - .getFilePath()); DataInputStream in = new DataInputStream(new BufferedInputStream( new FileInputStream(file))); --- 634,640 ---- private WADOResponseObject handleTextTransform(WADORequestObject req, ! File file, String contentType, String xslURL, TagDictionary dict) { try { DataInputStream in = new DataInputStream(new BufferedInputStream( new FileInputStream(file))); *************** *** 759,763 **** } catch (Exception e) { ! log.error("Failed to get DICOM file", e); } if (dicomObject == null) --- 790,794 ---- } catch (Exception e) { ! log.error("Failed to get DICOM file:"+instanceUID, e); } if (dicomObject == null) *************** *** 871,875 **** log.error("Can't connect to remote WADO service:" + url, e); e.printStackTrace(); ! return null; } } --- 902,908 ---- log.error("Can't connect to remote WADO service:" + url, e); e.printStackTrace(); ! return new WADOStreamResponseObjectImpl(null, CONTENT_TYPE_JPEG, ! HttpServletResponse.SC_NOT_FOUND, ! "Redirect to find requested object failed! (Can't connect to remote WADO service:"+url+")!"); } } |