diff --git a/src/main/java/org/oscarehr/integration/mcedt/DelegateFactory.java b/src/main/java/org/oscarehr/integration/mcedt/DelegateFactory.java index 84487a0f95..5de3f9438b 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/DelegateFactory.java +++ b/src/main/java/org/oscarehr/integration/mcedt/DelegateFactory.java @@ -28,40 +28,35 @@ import org.oscarehr.common.model.UserProperty; import org.oscarehr.integration.ebs.client.EdtClientBuilder; import org.oscarehr.integration.ebs.client.EdtClientBuilderConfig; +import org.oscarehr.integration.mcedt.mailbox.ActionUtils; import org.oscarehr.util.MiscUtils; import org.oscarehr.util.SpringUtils; import oscar.OscarProperties; import ca.ontario.health.edt.EDTDelegate; +import java.util.HashMap; +import java.util.Map; + public class DelegateFactory { private static Logger logger = MiscUtils.getLogger(); private static UserPropertyDAO userPropertyDAO = SpringUtils.getBean(UserPropertyDAO.class); + private static Map edtDelegates = new HashMap<>(); - public static EDTDelegate newDelegate() { - OscarProperties props = OscarProperties.getInstance(); - EdtClientBuilderConfig config = new EdtClientBuilderConfig(); - config.setLoggingRequired(!Boolean.valueOf(props.getProperty("mcedt.logging.skip"))); - config.setKeystoreUser(props.getProperty("mcedt.keystore.user")); - config.setKeystorePassword(props.getProperty("mcedt.keystore.pass")); - config.setUserNameTokenUser(props.getProperty("mcedt.service.user")); - //config.setUserNameTokenPassword(props.getProperty("mcedt.service.pass")); - UserProperty prop = userPropertyDAO.getProp(UserProperty.MCEDT_ACCOUNT_PASSWORD); - config.setUserNameTokenPassword((prop==null||prop.getValue()==null || prop.getValue().trim().equals(""))?props.getProperty("mcedt.service.pass"):prop.getValue()); - config.setServiceUrl(props.getProperty("mcedt.service.url")); - config.setConformanceKey(props.getProperty("mcedt.service.conformanceKey")); - config.setServiceId(props.getProperty("mcedt.service.id")); - config.setMtomEnabled(true); - EdtClientBuilder builder = new EdtClientBuilder(config); - EDTDelegate result = builder.build(EDTDelegate.class); - if (logger.isInfoEnabled()) { - logger.info("Created new EDT delegate " + result); + public static EDTDelegate getEDTDelegateInstance(String serviceId) { + if (edtDelegates.get(serviceId) == null) { + edtDelegates.put(serviceId, newDelegate(serviceId)); } - return result; - } + return edtDelegates.get(serviceId); + } + + public static EDTDelegate getEDTDelegateInstance() { + OscarProperties props = OscarProperties.getInstance(); + return getEDTDelegateInstance(props.getProperty("mcedt.service.id")); + } - public static EDTDelegate newDelegate(String serviceId) { + private static EDTDelegate newDelegate(String serviceId) { OscarProperties props = OscarProperties.getInstance(); EdtClientBuilderConfig config = new EdtClientBuilderConfig(); config.setLoggingRequired(!Boolean.valueOf(props.getProperty("mcedt.logging.skip"))); @@ -76,12 +71,24 @@ public static EDTDelegate newDelegate(String serviceId) { config.setServiceId((serviceId==null ||serviceId.trim().equals(""))?props.getProperty("mcedt.service.id"):serviceId); config.setMtomEnabled(true); EdtClientBuilder builder = new EdtClientBuilder(config); - EDTDelegate result = builder.build(EDTDelegate.class); + EDTDelegate edtDelegate = builder.build(EDTDelegate.class); if (logger.isInfoEnabled()) { - logger.info("Created new EDT delegate " + result); + logger.info("Created new EDT delegate " + edtDelegate); } - return result; - } + return edtDelegate; + } + + /** + * Refreshes created delegates in the event that information has been updated + */ + public static void refreshDelegates() { + // For each service id, create a new updated delegate + for (String serviceId : ActionUtils.getServiceIds()){ + edtDelegates.put(serviceId, newDelegate(serviceId)); + } + // Suggests for the Garbage Collector to run in an effort to clean up any lingering connections + System.gc(); + } public static UserPropertyDAO getUserPropertyDAO() { return userPropertyDAO; diff --git a/src/main/java/org/oscarehr/integration/mcedt/InfoAction.java b/src/main/java/org/oscarehr/integration/mcedt/InfoAction.java index 2a5406116e..4fe92649af 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/InfoAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/InfoAction.java @@ -45,7 +45,7 @@ public class InfoAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { List resourceIds = getResourceIds(request); - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); Detail detail = delegate.info(resourceIds); request.setAttribute("detail", detail); diff --git a/src/main/java/org/oscarehr/integration/mcedt/ResourceAction.java b/src/main/java/org/oscarehr/integration/mcedt/ResourceAction.java index c0b9fe3ea6..ca2c4903fb 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/ResourceAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/ResourceAction.java @@ -57,7 +57,7 @@ public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpSer HttpServletResponse response) throws Exception { ResourceForm resourceForm = (ResourceForm) form; - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); resourceForm.setTypeListResult(getTypeList(request, delegate)); resourceForm.setDetail(getResourceList(request, resourceForm, delegate)); @@ -114,7 +114,7 @@ public ActionForward delete(ActionMapping mapping, ActionForm form, ResourceResult result = null; try { - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); result = delegate.delete(ids); } catch (Exception e) { logger.error("Unable to delete", e); @@ -138,7 +138,7 @@ public ActionForward submit(ActionMapping mapping, ActionForm form, List ids = getResourceIds(request); try { - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); ResourceResult result = delegate.submit(ids); reset(mapping, form, request, response); @@ -156,7 +156,7 @@ public ActionForward download(ActionMapping mapping, ActionForm form, List ids = getResourceIds(request); DownloadResult downloadResult = null; try { - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); downloadResult = delegate.download(ids); } catch (Exception e) { saveErrors(request, ActionUtils.addMessage("resourceAction.download.fault", McedtMessageCreator.exceptionToString(e))); diff --git a/src/main/java/org/oscarehr/integration/mcedt/UpdateAction.java b/src/main/java/org/oscarehr/integration/mcedt/UpdateAction.java index e62eefac87..f65d52b02c 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/UpdateAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/UpdateAction.java @@ -58,7 +58,7 @@ public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpSer Detail details = (Detail) request.getSession().getAttribute(SESSION_KEY_UPLOAD_DETAILS); if (details == null) { - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); try { details = delegate.info(resourceIds); } catch (Exception e) { @@ -113,7 +113,7 @@ public ActionForward sendUpdateRequest(ActionMapping mapping, ActionForm form, } try { - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); ResourceResult result = delegate.update(updates); clearUpdateList(request); saveMessages(request.getSession(), ActionUtils.addMessage("updateAction.sendUpdateRequest.success", McedtMessageCreator.resourceResultToString(result))); diff --git a/src/main/java/org/oscarehr/integration/mcedt/UploadAction.java b/src/main/java/org/oscarehr/integration/mcedt/UploadAction.java index a1748b3870..e7444ef538 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/UploadAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/UploadAction.java @@ -104,7 +104,7 @@ public ActionForward uploadToMcedt(ActionMapping mapping, ActionForm form, List uploads = ActionUtils.getUploadList(request.getSession()); try { - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); ResourceResult result = delegate.upload(uploads); clearSession(request); diff --git a/src/main/java/org/oscarehr/integration/mcedt/mailbox/DownloadAction.java b/src/main/java/org/oscarehr/integration/mcedt/mailbox/DownloadAction.java index c8a48839bb..40b1fa82e4 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/mailbox/DownloadAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/mailbox/DownloadAction.java @@ -73,7 +73,7 @@ public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpSer try{ if(request.getSession().getAttribute("resourceTypeList")==null){ - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); resourceForm.setTypeListResult(getTypeList(request, delegate)); request.getSession().setAttribute("resourceTypeList",resourceForm.getTypeListResult()); } @@ -83,7 +83,7 @@ public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpSer Detail result = ActionUtils.getDetails(request); if (result == null) { for (String serviceId: ActionUtils.getServiceIds()) { - EDTDelegate delegate = DelegateFactory.newDelegate(serviceId); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(serviceId); result= getResourceList(request, resourceForm, delegate, serviceId, result); } List resourceList= resourceForm.getData(); @@ -214,7 +214,7 @@ public ActionForward download(ActionMapping mapping, ActionForm form, DownloadResult downloadResult = null; try { - EDTDelegate delegate = DelegateFactory.newDelegate(serviceId); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(serviceId); downloadResult = delegate.download(ids); @@ -348,7 +348,7 @@ public ActionForward userDownload(ActionMapping mapping, ActionForm form, DownloadResult downloadResult = null; DownloadForm downloadForm= (DownloadForm) form; try { - EDTDelegate delegate = DelegateFactory.newDelegate(downloadForm.getServiceId()==null? ActionUtils.getDefaultServiceId():downloadForm.getServiceId()); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(downloadForm.getServiceId()==null? ActionUtils.getDefaultServiceId():downloadForm.getServiceId()); downloadResult = delegate.download(ids); @@ -396,7 +396,7 @@ private List getResourceList(HttpServletRequest request, Actio resourceType = null; } - EDTDelegate delegate = DelegateFactory.newDelegate(resourceForm.getServiceId()); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(resourceForm.getServiceId()); result = delegate.list(resourceType, ResourceStatus.DOWNLOADABLE, resourceForm.getPageNoAsBigInt()); if(request.getSession().getAttribute("resourceTypeList")==null){ diff --git a/src/main/java/org/oscarehr/integration/mcedt/mailbox/InfoAction.java b/src/main/java/org/oscarehr/integration/mcedt/mailbox/InfoAction.java index 1fe94f3f8b..39d9cd9bd4 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/mailbox/InfoAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/mailbox/InfoAction.java @@ -76,7 +76,7 @@ public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpSer request.getSession().setAttribute("info", "true");*/ //---------- - EDTDelegate delegate = DelegateFactory.newDelegate(serviceId); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(serviceId); Detail detail = delegate.info(resourceIds); request.setAttribute("detail", detail); request.getSession().setAttribute("info", "true"); @@ -90,30 +90,6 @@ public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpSer } } - /*public ActionForward reSubmit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { - List resourceIds = getResourceIds(request); - - try{ - ResourceResult result=null; - EDTDelegate delegate = DelegateFactory.newDelegate(); - if (resourceIds.size()>0) result =delegate.submit(resourceIds); - for (ResponseResult edtResponse: result.getResponse()) { - if (edtResponse.getResult().getCode().equals("IEDTS0001")) { - saveMessages(request, ActionUtils.addMessage("uploadAction.submit.success", McedtMessageCreator.resourceResultToString(result))); - } else { - saveErrors(request, ActionUtils.addMessage("uploadAction.submit.failure", edtResponse.getDescription()+": "+edtResponse.getResult().getMsg())); - } - } - - return mapping.findForward("success"); - }catch(Exception e){ - logger.error("Unable to submit resource ", e); - saveErrors(request, ActionUtils.addMessage("uploadAction.submit.failure", McedtMessageCreator.exceptionToString(e))); - return mapping.findForward("success"); - } - - }*/ - public ActionForward deleteFiles(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { List ids = getResourceIds(request); @@ -122,7 +98,7 @@ public ActionForward deleteFiles(ActionMapping mapping, ActionForm form, ResourceResult result = null; try { - EDTDelegate delegate = DelegateFactory.newDelegate(serviceId); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(serviceId); result = delegate.delete(ids); } catch (Exception e) { logger.error("Unable to delete", e); @@ -162,7 +138,7 @@ private List getResourceList(HttpServletRequest request, Actio BigInteger resultSize = null; - EDTDelegate delegate = DelegateFactory.newDelegate(resourceForm.getServiceIdSent()); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(resourceForm.getServiceIdSent()); result = delegate.list(resourceType, resourceForm.getStatusAsResourceStatus(), resourceForm.getPageNoAsBigInt()); if(result!=null) diff --git a/src/main/java/org/oscarehr/integration/mcedt/mailbox/ReSubmitAction.java b/src/main/java/org/oscarehr/integration/mcedt/mailbox/ReSubmitAction.java index f4d5fe1657..8b3b638b91 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/mailbox/ReSubmitAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/mailbox/ReSubmitAction.java @@ -62,7 +62,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet try{ ResourceResult result=null; - EDTDelegate delegate = DelegateFactory.newDelegate(serviceId); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(serviceId); if (resourceIds.size()>0) result =delegate.submit(resourceIds); for (ResponseResult edtResponse: result.getResponse()) { if (edtResponse.getResult().getCode().equals("IEDTS0001")) { @@ -100,7 +100,7 @@ private List getResourceList(HttpServletRequest request, Actio resourceType = null; } - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); result = delegate.list(resourceType, resourceForm.getStatusAsResourceStatus(), resourceForm.getPageNoAsBigInt()); BigInteger resultSize = null; diff --git a/src/main/java/org/oscarehr/integration/mcedt/mailbox/ResourceAction.java b/src/main/java/org/oscarehr/integration/mcedt/mailbox/ResourceAction.java index ec444b0fff..af9334f480 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/mailbox/ResourceAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/mailbox/ResourceAction.java @@ -118,32 +118,17 @@ private void resetPage(ActionForm form){ public ActionForward loadSentList(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ResourceForm resourceForm = (ResourceForm) form; - //resourceForm.setStatus(""); resetPage(form); List resourceList; List resourceListFiltered = new ArrayList(); try{ if(request.getSession().getAttribute("resourceTypeList")==null){ - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); resourceForm.setTypeListResult(getTypeList(request, delegate)); - //request.getSession().setAttribute("resourceTypeList",resourceForm.getTypeListResult()); - //List typeListData = getTypeList(request, delegate).getData(); - //request.getSession().setAttribute("typeListData",typeListData); } - //resourceForm.setResourceType(""); - //resourceForm.setPageNo(1); resourceForm.setStatus("UPLOADED"); resourceList = loadList(form,request,response,ResourceStatus.UPLOADED); - /*if(resourceList.size()>0){ - for(DetailDataCustom detailDataK:resourceList){ - //if(ActionUtils.filterResourceStatus(detailDataK)){ - resourceListFiltered.add(detailDataK); - //} - } - - request.getSession().setAttribute("resourceListSent",resourceListFiltered); - }*/ request.getSession().setAttribute("resourceListSent",resourceList); request.getSession().setAttribute("resourceStatus","UPLOADED"); } @@ -159,7 +144,7 @@ public List loadList( ActionForm form, HttpServletRequest requ ResourceForm resourceForm = (ResourceForm) form; try{ - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); if(request.getSession().getAttribute("resourceTypeList")==null){ diff --git a/src/main/java/org/oscarehr/integration/mcedt/mailbox/UploadAction.java b/src/main/java/org/oscarehr/integration/mcedt/mailbox/UploadAction.java index cd82267888..77cef7aa3d 100644 --- a/src/main/java/org/oscarehr/integration/mcedt/mailbox/UploadAction.java +++ b/src/main/java/org/oscarehr/integration/mcedt/mailbox/UploadAction.java @@ -134,7 +134,7 @@ public ActionForward uploadToMcedt(ActionMapping mapping, ActionForm form, HttpS }*/ try { - EDTDelegate delegate = DelegateFactory.newDelegate(ActionUtils.getServiceId(uploadForm.getDescription())); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(ActionUtils.getServiceId(uploadForm.getDescription())); ResourceResult result = new ResourceResult(); try { @@ -193,7 +193,7 @@ public ActionForward submitToMcedt(ActionMapping mapping, ActionForm form, HttpS }*/ try { - EDTDelegate delegate = DelegateFactory.newDelegate(ActionUtils.getServiceId(submitForm.getFileName())); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(ActionUtils.getServiceId(submitForm.getFileName())); ResourceResult result = new ResourceResult(); try { @@ -235,7 +235,7 @@ public ActionForward uploadSubmitToMcedt(ActionMapping mapping, ActionForm form, for (UploadData upload: uploads) { List uploadData= new ArrayList(); uploadData.add(upload); - EDTDelegate delegate = DelegateFactory.newDelegate(ActionUtils.getServiceId(upload.getDescription())); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(ActionUtils.getServiceId(upload.getDescription())); ResourceResult result = new ResourceResult(); try { diff --git a/src/main/java/org/oscarehr/integration/mchcv/OBECRunner.java b/src/main/java/org/oscarehr/integration/mchcv/OBECRunner.java index 19479bfda5..06d640a9ac 100644 --- a/src/main/java/org/oscarehr/integration/mchcv/OBECRunner.java +++ b/src/main/java/org/oscarehr/integration/mchcv/OBECRunner.java @@ -84,7 +84,7 @@ private void sendUploadData(UploadData uploadData) { List uploads = new ArrayList(); uploads.add(uploadData); try { - EDTDelegate delegate = DelegateFactory.newDelegate(); + EDTDelegate delegate = DelegateFactory.getEDTDelegateInstance(); delegate.upload(uploads); } catch (Exception e) { logger.error("Unable to upload to MCEDT", e); diff --git a/src/main/resources/clientKeystore.properties b/src/main/resources/clientKeystore.properties index 08854d31de..3e9bd453de 100644 --- a/src/main/resources/clientKeystore.properties +++ b/src/main/resources/clientKeystore.properties @@ -8,7 +8,7 @@ org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin org.apache.ws.security.crypto.merlin.keystore.type=jks -org.apache.ws.security.crypto.merlin.keystore.password=pass -org.apache.ws.security.crypto.merlin.keystore.alias=alias +org.apache.ws.security.crypto.merlin.keystore.password=changeit +org.apache.ws.security.crypto.merlin.keystore.alias=signaturealias org.apache.ws.security.crypto.merlin.keystore.file=/var/lib/Oscar/mcedt.jks org.apache.ws.security.crypto.merlin.file=/var/lib/Oscar/mcedt.jks