Java tutorial
/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is part of dcm4che, an implementation of DICOM(TM) in * Java(TM), hosted at https://github.com/dcm4che. * * The Initial Developer of the Original Code is * Agfa Healthcare. * Portions created by the Initial Developer are Copyright (C) 2012 * the Initial Developer. All Rights Reserved. * * Contributor(s): * See @authors listed below * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ package org.dcm4chee.wizard.edit; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox; import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.TextArea; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.validation.ValidationError; import org.apache.wicket.validation.validator.RangeValidator; import org.dcm4che3.conf.api.ConfigurationException; import org.dcm4che3.data.Code; import org.dcm4che3.data.Issuer; import org.dcm4che3.net.Device; import org.dcm4che3.net.DeviceExtension; import org.dcm4che3.net.audit.AuditRecordRepository; import org.dcm4che3.net.hl7.HL7DeviceExtension; import org.dcm4chee.proxy.conf.ProxyDeviceExtension; import org.dcm4chee.storage.conf.StorageConfiguration; import org.dcm4chee.wizard.common.behavior.FocusOnLoadBehavior; import org.dcm4chee.wizard.common.component.ExtendedForm; import org.dcm4chee.wizard.common.component.ModalWindowRuntimeException; import org.dcm4chee.wizard.model.DeviceModel; import org.dcm4chee.wizard.model.InstitutionCodeModel; import org.dcm4chee.wizard.model.StringArrayModel; import org.dcm4chee.wizard.page.DicomConfigurationWebPage; import org.dcm4chee.wizard.tree.ConfigTreeProvider; import org.dcm4chee.wizard.tree.ConfigTreeProvider.ConfigurationType; import org.dcm4chee.wizard.validator.CodeValidator; import org.dcm4chee.wizard.validator.DeviceNameValidator; import org.dcm4chee.wizard.validator.UrlValidator; import org.dcm4chee.xds2.conf.XCAInitiatingGWCfg; import org.dcm4chee.xds2.conf.XCARespondingGWCfg; import org.dcm4chee.xds2.conf.XCAiInitiatingGWCfg; import org.dcm4chee.xds2.conf.XCAiRespondingGWCfg; import org.dcm4chee.xds2.conf.XDSiSourceCfg; import org.dcm4chee.xds2.conf.XdsRegistry; import org.dcm4chee.xds2.conf.XdsRepository; import org.dcm4chee.xds2.conf.XdsSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Robert David <robert.david@agfa.com> * @author Michael Backhaus <michael.backhaus@agfa.com> */ public class CreateOrEditDevicePage extends DicomConfigurationWebPage { private static final long serialVersionUID = 1L; private static Logger log = LoggerFactory.getLogger(CreateOrEditDevicePage.class); private List<String> keyStoreTypes = Arrays.asList(new String[] { "JKS", "PKCS12" }); // configuration type selection private Model<ConfigurationType> typeModel; // Mandatory Device Attributes private Model<String> deviceNameModel; private IModel<Boolean> installedModel; // Optional Device Attributes private Model<String> descriptionModel; private Model<String> deviceSerialNumberModel; private StringArrayModel institutionAddressModel; private InstitutionCodeModel institutionCodeModel; private StringArrayModel institutionalDepartmentNameModel; private StringArrayModel institutionNameModel; private Model<String> issuerOfAccessionNumberModel; private Model<String> issuerOfAdmissionIDModel; private Model<String> issuerOfContainerIdentifierModel; private Model<String> issuerOfPatientIDModel; private Model<String> issuerOfServiceEpisodeIDModel; private Model<String> issuerOfSpecimenIdentifierModel; private Model<String> manufacturerModel; private Model<String> manufacturerModelNameModel; private Model<String> orderFillerIdentifierModel; private Model<String> orderPlacerIdentifierModel; private StringArrayModel primaryDeviceTypesModel; private StringArrayModel relatedDeviceRefsModel; private StringArrayModel softwareVersionsModel; private Model<String> stationNameModel; private Model<String> vendorDataModel; private Model<String> trustStoreURLModel; private Model<String> trustStoreTypeModel; private Model<String> trustStorePinModel; private Model<Boolean> useTrustStorePinProperty; private Model<String> keyStoreURLModel; private Model<String> keyStoreTypeModel; private Model<String> keyStorePinModel; private Model<Boolean> useKeyStorePinProperty; private Model<String> keyStoreKeyPinModel; private Model<Boolean> useKeyStoreKeyPinProperty; // Proxy Device Attributes private Model<Integer> schedulerIntervalModel; private Model<Integer> forwardThreadsModel; private Model<Integer> staleTimeoutModel; // XDS Device Extensions private IModel<Boolean> xcaiInitiatingGatewayModel; private IModel<Boolean> xcaiRespondingGatewayModel; private IModel<Boolean> xcaInitiatingGatewayModel; private IModel<Boolean> xcaRespondingGatewayModel; private IModel<Boolean> xdsRegistryModel; private IModel<Boolean> xdsRepositoryModel; private IModel<Boolean> xdsSourceModel; private IModel<Boolean> xdsStorageModel; private IModel<Boolean> xdsiSourceModel; public CreateOrEditDevicePage(final ModalWindow window, final DeviceModel deviceModel) { super(); add(new WebMarkupContainer("create-device-title").setVisible(deviceModel == null)); add(new WebMarkupContainer("edit-device-title").setVisible(deviceModel != null)); setOutputMarkupId(true); final ExtendedForm form = new ExtendedForm("form"); form.setResourceIdPrefix("dicom.edit.device."); add(form); if (deviceModel == null) initNewConfigurationTypeModel(); else initDeviceModel(deviceModel); addTypeLabel(form); DropDownChoice<ConfigTreeProvider.ConfigurationType> typeDropDown = setConfigurationTypeList(); addDeviceTitle(deviceModel, form); addInstalledLabel(form); form.add(proxyWebMarkupContainer()); form.add(xdsWebMarkupContainer(form)); addOptionalContainer(form); addSaveButton(window, deviceModel, form); addCancelButton(window, form); addOnChangeUpdate(deviceModel, form, typeDropDown); } private void addOptionalContainer(final ExtendedForm form) { final Form<?> optionalContainer = new Form<Object>("optional"); optionalContainer.setOutputMarkupId(true); optionalContainer.setOutputMarkupPlaceholderTag(true); optionalContainer.setVisible(false); form.add(optionalContainer); addTextField(optionalContainer, "dicom.edit.device.optional.description.label", "description.label", "description", descriptionModel); addToggleOptionalCheckBox(form, optionalContainer); addOptionalParameters(optionalContainer); optionalContainer.add(getOptionalProxyContainer()); optionalContainer.add(getRelatedDeviceRefsContainer()); addWebMarkupContainer(optionalContainer); } private void addToggleOptionalCheckBox(final ExtendedForm form, final Form<?> optionalContainer) { form.add(new Label("toggleOptional.label", new ResourceModel("dicom.edit.toggleOptional.label"))); AjaxCheckBox ajaxCheckBox = new AjaxCheckBox("toggleOptional", new Model<Boolean>()) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { target.add(optionalContainer.setVisible(this.getModelObject())); } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(optionalContainer, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; ajaxCheckBox.add(onClick); form.add(ajaxCheckBox); } private void addWebMarkupContainer(final Form<?> optionalContainer) { WebMarkupContainer vendorDataContainer = new WebMarkupContainer("vendorDataContainer"); optionalContainer.add(vendorDataContainer); vendorDataContainer.add( new Label("vendorData.label", new ResourceModel("dicom.edit.applicationEntity.vendorData.label"))); vendorDataContainer.add(new Label("vendorData", vendorDataModel)); vendorDataContainer.setVisible(!vendorDataModel.getObject().equals("size 0")); } private WebMarkupContainer getRelatedDeviceRefsContainer() { WebMarkupContainer relatedDeviceRefsContainer = new WebMarkupContainer("relatedDeviceRefsContainer"); relatedDeviceRefsContainer.add(new Label("relatedDeviceRefs.label", new ResourceModel("dicom.edit.device.relatedDeviceRefs.label"))); relatedDeviceRefsContainer .add(new TextArea<String>("relatedDeviceRefs", relatedDeviceRefsModel).setEnabled(false)); relatedDeviceRefsContainer.setVisible(relatedDeviceRefsModel.getArray().length > 0); return relatedDeviceRefsContainer; } private WebMarkupContainer getOptionalProxyContainer() { WebMarkupContainer optionalProxyContainer = new WebMarkupContainer("optionalProxyContainer") { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return typeModel.getObject().equals(ConfigurationType.Proxy); } }; optionalProxyContainer.add(new Label("forwardThreads.label", new ResourceModel("dicom.edit.device.optional.forwardThreads.label")) .setOutputMarkupPlaceholderTag(true)); optionalProxyContainer.add(new TextField<Integer>("forwardThreads", forwardThreadsModel) .setType(Integer.class).add(new RangeValidator<Integer>(1, 256))); optionalProxyContainer.add( new Label("staleTimeout.label", new ResourceModel("dicom.edit.device.optional.staleTimeout.label")) .setOutputMarkupPlaceholderTag(true)); optionalProxyContainer.add(new TextField<Integer>("staleTimeout", staleTimeoutModel).setType(Integer.class) .add(new RangeValidator<Integer>(0, Integer.MAX_VALUE))); optionalProxyContainer.setOutputMarkupId(true); optionalProxyContainer.setOutputMarkupPlaceholderTag(true); return optionalProxyContainer; } private void addOptionalParameters(final Form<?> optionalContainer) { addTextField(optionalContainer, "dicom.edit.device.optional.deviceSerialNumber.label", "deviceSerialNumber.label", "deviceSerialNumber", deviceSerialNumberModel); addTextArea(optionalContainer, "dicom.edit.device.optional.institutionAddress.label", "institutionAddress.label", "institutionAddress", institutionAddressModel); TextField<String> codeValueTextField = addTextField(optionalContainer, "dicom.edit.device.optional.institutionCodeValue.label", "institutionCodeValue.label", "institutionCodeValue", institutionCodeModel.getCodeFieldModel(0)); TextField<String> codingSchemeDesignatorTextField = addTextField(optionalContainer, "dicom.edit.device.optional.institutionCodingSchemeDesignator.label", "institutionCodingSchemeDesignator.label", "institutionCodingSchemeDesignator", institutionCodeModel.getCodeFieldModel(1)); TextField<String> codingSchemeVersionTextField = addTextField(optionalContainer, "dicom.edit.device.optional.institutionCodingSchemeVersion.label", "institutionCodingSchemeVersion.label", "institutionCodingSchemeVersion", institutionCodeModel.getCodeFieldModel(2)); TextField<String> codeMeaningTextField = addTextField(optionalContainer, "dicom.edit.device.optional.institutionCodeMeaning.label", "institutionCodeMeaning.label", "institutionCodeMeaning", institutionCodeModel.getCodeFieldModel(3)); optionalContainer.add(new CodeValidator(codeValueTextField, codingSchemeDesignatorTextField, codingSchemeVersionTextField, codeMeaningTextField)); addTextArea(optionalContainer, "dicom.edit.device.optional.institutionalDepartmentName.label", "institutionalDepartmentName.label", "institutionalDepartmentName", institutionalDepartmentNameModel); addTextArea(optionalContainer, "dicom.edit.device.optional.institutionName.label", "institutionName.label", "institutionName", institutionNameModel); addTextField(optionalContainer, "dicom.edit.device.optional.issuerOfAccessionNumber.label", "issuerOfAccessionNumber.label", "issuerOfAccessionNumber", issuerOfAccessionNumberModel); optionalContainer.add(new Label("issuerOfAdmissionID.label", new ResourceModel("dicom.edit.device.optional.issuerOfAdmissionID.label"))); optionalContainer.add(new TextField<String>("issuerOfAdmissionID", issuerOfAdmissionIDModel)); optionalContainer.add(new Label("issuerOfContainerIdentifier.label", new ResourceModel("dicom.edit.device.optional.issuerOfContainerIdentifier.label"))); optionalContainer .add(new TextField<String>("issuerOfContainerIdentifier", issuerOfContainerIdentifierModel)); optionalContainer.add(new Label("issuerOfPatientID.label", new ResourceModel("dicom.edit.device.optional.issuerOfPatientID.label"))); optionalContainer.add(new TextField<String>("issuerOfPatientID", issuerOfPatientIDModel)); optionalContainer.add(new Label("issuerOfServiceEpisodeID.label", new ResourceModel("dicom.edit.device.optional.issuerOfServiceEpisodeID.label"))); optionalContainer.add(new TextField<String>("issuerOfServiceEpisodeID", issuerOfServiceEpisodeIDModel)); optionalContainer.add(new Label("issuerOfSpecimenIdentifier.label", new ResourceModel("dicom.edit.device.optional.issuerOfSpecimenIdentifier.label"))); optionalContainer.add(new TextField<String>("issuerOfSpecimenIdentifier", issuerOfSpecimenIdentifierModel)); optionalContainer.add(new Label("manufacturer.label", new ResourceModel("dicom.edit.device.optional.manufacturer.label"))); optionalContainer.add(new TextField<String>("manufacturer", manufacturerModel)); optionalContainer.add(new Label("manufacturerModelName.label", new ResourceModel("dicom.edit.device.optional.manufacturerModelName.label"))); optionalContainer.add(new TextField<String>("manufacturerModelName", manufacturerModelNameModel)); optionalContainer.add(new Label("orderFillerIdentifier.label", new ResourceModel("dicom.edit.device.optional.orderFillerIdentifier.label"))); optionalContainer.add(new TextField<String>("orderFillerIdentifier", orderFillerIdentifierModel)); optionalContainer.add(new Label("orderPlacerIdentifier.label", new ResourceModel("dicom.edit.device.optional.orderPlacerIdentifier.label"))); optionalContainer.add(new TextField<String>("orderPlacerIdentifier", orderPlacerIdentifierModel)); optionalContainer.add(new Label("primaryDeviceTypes.label", new ResourceModel("dicom.edit.device.optional.primaryDeviceTypes.label"))); optionalContainer.add(new TextArea<String>("primaryDeviceTypes", primaryDeviceTypesModel)); optionalContainer.add(new Label("softwareVersions.label", new ResourceModel("dicom.edit.device.optional.softwareVersions.label"))); optionalContainer.add(new TextArea<String>("softwareVersions", softwareVersionsModel)); optionalContainer.add( new Label("stationName.label", new ResourceModel("dicom.edit.device.optional.stationName.label"))); optionalContainer.add(new TextField<String>("stationName", stationNameModel)); optionalContainer.add(new Label("trustStoreURL.label", new ResourceModel("dicom.edit.device.optional.trustStoreURL.label"))); optionalContainer.add(new TextField<String>("trustStoreURL", trustStoreURLModel).add(new UrlValidator())); optionalContainer.add(new Label("trustStoreType.label", new ResourceModel("dicom.edit.device.optional.trustStoreType.label"))); optionalContainer.add(new DropDownChoice<String>("trustStoreType", trustStoreTypeModel, keyStoreTypes) .setNullValid(true)); optionalContainer.add(new Label("trustStorePin.label", new ResourceModel("dicom.edit.device.optional.trustStorePin.label"))); optionalContainer.add(new TextField<String>("trustStorePin", trustStorePinModel)); optionalContainer.add(new CheckBox("useTrustStorePinProperty", useTrustStorePinProperty)); optionalContainer.add( new Label("keyStoreURL.label", new ResourceModel("dicom.edit.device.optional.keyStoreURL.label"))); optionalContainer.add(new TextField<String>("keyStoreURL", keyStoreURLModel).add(new UrlValidator())); optionalContainer.add(new Label("keyStoreType.label", new ResourceModel("dicom.edit.device.optional.keyStoreType.label"))); optionalContainer.add( new DropDownChoice<String>("keyStoreType", keyStoreTypeModel, keyStoreTypes).setNullValid(true)); optionalContainer.add( new Label("keyStorePin.label", new ResourceModel("dicom.edit.device.optional.keyStorePin.label"))); optionalContainer.add(new TextField<String>("keyStorePin", keyStorePinModel)); optionalContainer.add(new CheckBox("useKeyStorePinProperty", useKeyStorePinProperty)); optionalContainer.add(new Label("keyStoreKeyPin.label", new ResourceModel("dicom.edit.device.optional.keyStoreKeyPin.label"))); optionalContainer.add(new TextField<String>("keyStoreKeyPin", keyStoreKeyPinModel)); optionalContainer.add(new CheckBox("useKeyStoreKeyPinProperty", useKeyStoreKeyPinProperty)); } private void addTextArea(Form<?> form, String resourceModelString, String labelString, String textAreaString, StringArrayModel textAreaModel) { form.add(new Label(labelString, new ResourceModel(resourceModelString))); form.add(new TextArea<String>(textAreaString, textAreaModel)); } private TextField<String> addTextField(Form<?> form, String resourceModelString, String labelString, String textFieldId, IModel<String> textFieldModel) { form.add(new Label(labelString, new ResourceModel(resourceModelString))); TextField<String> textField = new TextField<String>(textFieldId, textFieldModel); form.add(textField); return textField; } private WebMarkupContainer proxyWebMarkupContainer() { WebMarkupContainer proxyWMC = new WebMarkupContainer("proxy") { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return typeModel.getObject().equals(ConfigurationType.Proxy); } }; Label schedulerIntervalLabel = new Label("schedulerInterval.label", new ResourceModel("dicom.edit.device.proxy.schedulerInterval.label")); proxyWMC.add(schedulerIntervalLabel); FormComponent<Integer> schedulerIntervalTextField = new TextField<Integer>("schedulerInterval", schedulerIntervalModel); schedulerIntervalTextField.setType(Integer.class); schedulerIntervalTextField.setRequired(true); proxyWMC.add(schedulerIntervalTextField); proxyWMC.setOutputMarkupPlaceholderTag(true); return proxyWMC; } private WebMarkupContainer xdsWebMarkupContainer(ExtendedForm form) { WebMarkupContainer xdsWMC = new WebMarkupContainer("xds") { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return typeModel.getObject().equals(ConfigurationType.XDS); } }; addXdsConfigurationTypeCheckBoxes(xdsWMC, form); xdsWMC.setOutputMarkupPlaceholderTag(true); return xdsWMC; } private void addXdsConfigurationTypeCheckBoxes(final WebMarkupContainer xdsWMC, ExtendedForm form) { addXcaiInitiatingGatewayCheckBox(xdsWMC, form); addXcaInitiatingGatewayCheckBox(xdsWMC, form); addXcaiRespondingGatewayCheckBox(xdsWMC, form); addXcaRespondingGatewayCheckBox(xdsWMC, form); addXdsRegistryCheckBox(xdsWMC, form); addXdsRepositoryCheckBox(xdsWMC, form); addXdsSourceCheckBox(xdsWMC, form); addXdsStorageCheckBox(xdsWMC, form); } private void addXdsStorageCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { xdsWMC.add(new Label("xdsStorage.label", new ResourceModel("dicom.edit.xds.xdsStorage.label"))); AjaxCheckBox xdsStorageCheckBox = new AjaxCheckBox("xdsStorage", xdsStorageModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xdsStorageModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xdsStorageModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xdsStorageCheckBox.add(onClick); xdsWMC.add(xdsStorageCheckBox.setOutputMarkupId(true)); } private void addXdsSourceCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { xdsWMC.add(new Label("xdsSource.label", new ResourceModel("dicom.edit.xds.xdsSource.label"))); AjaxCheckBox xdsSourceCheckBox = new AjaxCheckBox("xdsSource", xdsSourceModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xdsSourceModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xdsSourceModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xdsSourceCheckBox.add(onClick); xdsWMC.add(xdsSourceCheckBox.setOutputMarkupId(true)); } private void addXdsiSourceCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { xdsWMC.add(new Label("xdsSource.label", new ResourceModel("dicom.edit.xds.xdsSource.label"))); AjaxCheckBox xdsiSourceCheckBox = new AjaxCheckBox("xdsiSource", xdsiSourceModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xdsiSourceModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xdsiSourceModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xdsiSourceCheckBox.add(onClick); xdsWMC.add(xdsiSourceCheckBox.setOutputMarkupId(true)); } private void addXdsRegistryCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { xdsWMC.add(new Label("xdsRegistry.label", new ResourceModel("dicom.edit.xds.xdsRegistry.label"))); AjaxCheckBox xdsRegistryCheckBox = new AjaxCheckBox("xdsRegistry", xdsRegistryModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xdsRegistryModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xdsRegistryModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xdsRegistryCheckBox.add(onClick); xdsWMC.add(xdsRegistryCheckBox.setOutputMarkupId(true)); } private void addXcaRespondingGatewayCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { xdsWMC.add(new Label("xcaRespondingGateway.label", new ResourceModel("dicom.edit.xds.xcaRespondingGateway.label"))); AjaxCheckBox xcaRespondingGatewayCheckBox = new AjaxCheckBox("xcaRespondingGateway", xcaRespondingGatewayModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xcaRespondingGatewayModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xcaRespondingGatewayModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xcaRespondingGatewayCheckBox.add(onClick); xdsWMC.add(xcaRespondingGatewayCheckBox.setOutputMarkupId(true)); } private void addXcaiRespondingGatewayCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { xdsWMC.add(new Label("xcaiRespondingGateway.label", new ResourceModel("dicom.edit.xds.xcaiRespondingGateway.label"))); AjaxCheckBox xcaiRespondingGatewayCheckBox = new AjaxCheckBox("xcaiRespondingGateway", xcaiRespondingGatewayModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xcaiRespondingGatewayModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xcaiRespondingGatewayModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xcaiRespondingGatewayCheckBox.add(onClick); xdsWMC.add(xcaiRespondingGatewayCheckBox.setOutputMarkupId(true)); } private void addXcaInitiatingGatewayCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { xdsWMC.add(new Label("xcaInitiatingGateway.label", new ResourceModel("dicom.edit.xds.xcaInitiatingGateway.label"))); AjaxCheckBox xcaInitiatingGatewayCheckBox = new AjaxCheckBox("xcaInitiatingGateway", xcaInitiatingGatewayModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xcaInitiatingGatewayModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xcaInitiatingGatewayModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xcaInitiatingGatewayCheckBox.add(onClick); xdsWMC.add(xcaInitiatingGatewayCheckBox.setOutputMarkupId(true)); } private void addXdsRepositoryCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { xdsWMC.add(new Label("xdsRepository.label", new ResourceModel("dicom.edit.xds.xdsRepository.label"))); AjaxCheckBox xdsRepositoryCheckBox = new AjaxCheckBox("xdsRepository", xdsRepositoryModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xdsRepositoryModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xdsRepositoryModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xdsRepositoryCheckBox.add(onClick); xdsWMC.add(xdsRepositoryCheckBox.setOutputMarkupId(true)); } private void addXcaiInitiatingGatewayCheckBox(final WebMarkupContainer xdsWMC, ExtendedForm form) { AjaxFormSubmitBehavior onClick = new AjaxFormSubmitBehavior(form, "change") { private static final long serialVersionUID = 1L; protected void onEvent(final AjaxRequestTarget target) { super.onEvent(target); } }; xdsWMC.add(new Label("xcaiInitiatingGateway.label", new ResourceModel("dicom.edit.xds.xcaiInitiatingGateway.label"))); AjaxCheckBox xcaiInitiatingGatewayCheckBox = new AjaxCheckBox("xcaiInitiatingGateway", xcaiInitiatingGatewayModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { if (xcaiInitiatingGatewayModel.getObject().booleanValue()) return; if (!isXdsExtensionSelected()) { log.error("{}: Need to select at least one XDS Extension", this); xcaiInitiatingGatewayModel.setObject(true); this.error(new ValidationError("Need to select at least one XDS Extension")); target.add(this); } } }; xcaiInitiatingGatewayCheckBox.add(onClick); xdsWMC.add(xcaiInitiatingGatewayCheckBox); } private boolean isXdsExtensionSelected() { return xcaiInitiatingGatewayModel.getObject().booleanValue() || xcaiRespondingGatewayModel.getObject().booleanValue() || xcaInitiatingGatewayModel.getObject().booleanValue() || xcaRespondingGatewayModel.getObject().booleanValue() || xdsRegistryModel.getObject().booleanValue() || xdsSourceModel.getObject().booleanValue() || xdsiSourceModel.getObject().booleanValue() || xdsStorageModel.getObject().booleanValue() || xdsRepositoryModel.getObject().booleanValue(); } private void addInstalledLabel(final ExtendedForm form) { form.add(new Label("installed.label", new ResourceModel("dicom.edit.device.installed.label"))); form.add(new CheckBox("installed", installedModel)); } private void addTypeLabel(final ExtendedForm form) { form.add(new Label("type.label", new ResourceModel("dicom.edit.device.type.label"))); } private void addOnChangeUpdate(final DeviceModel deviceModel, final ExtendedForm form, DropDownChoice<ConfigTreeProvider.ConfigurationType> typeDropDown) { form.add(typeDropDown.setNullValid(false).setEnabled(deviceModel == null) .add(new AjaxFormComponentUpdatingBehavior("onchange") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { target.add(form.get("proxy")); target.add(form.get("xds")); target.add(form.get("optional")); } })); } private void addDeviceTitle(final DeviceModel deviceModel, final ExtendedForm form) { try { form.add(new Label("title.label", new ResourceModel("dicom.edit.device.title.label"))) .add(new TextField<String>("title", deviceNameModel) .add(new DeviceNameValidator(getDicomConfigurationManager().listDevices(), deviceNameModel.getObject())) .setRequired(true).add(FocusOnLoadBehavior.newFocusAndSelectBehaviour()) .setEnabled(deviceModel == null)); } catch (ConfigurationException ce) { log.error(this.getClass().toString() + ": " + "Error listing devices: " + ce.getMessage()); log.debug("Exception", ce); throw new ModalWindowRuntimeException(ce.getLocalizedMessage()); } } private void initDeviceModel(final DeviceModel deviceModel) { try { setTypeModel(deviceModel); setDeviceConfiguration(deviceModel); setProxyDevExtConfiguration(deviceModel); setXdsDevExtConfiguration(deviceModel); } catch (ConfigurationException ce) { log.error(this.getClass().toString() + ": " + "Error retrieving device data: " + ce.getMessage()); log.debug("Exception", ce); throw new ModalWindowRuntimeException(ce.getLocalizedMessage()); } } private void setTypeModel(final DeviceModel deviceModel) throws ConfigurationException { Iterator<DeviceExtension> iter = deviceModel.getDevice().listDeviceExtensions().iterator(); while (iter.hasNext()) { DeviceExtension ext = iter.next(); if (ext instanceof ProxyDeviceExtension) { typeModel = Model.of(ConfigTreeProvider.ConfigurationType.Proxy); break; } else if (ext instanceof XCAiInitiatingGWCfg || ext instanceof XCAInitiatingGWCfg || ext instanceof XCAiRespondingGWCfg || ext instanceof XCARespondingGWCfg || ext instanceof XdsRegistry || ext instanceof XdsSource || ext instanceof StorageConfiguration || ext instanceof XdsRepository) { typeModel = Model.of(ConfigTreeProvider.ConfigurationType.XDS); break; } } if (typeModel == null) typeModel = Model.of(ConfigTreeProvider.ConfigurationType.Basic); } private void setXdsDevExtConfiguration(DeviceModel deviceModel) throws ConfigurationException { if (!typeModel.getObject().equals(ConfigurationType.XDS)) return; xcaiInitiatingGatewayModel = Model .of(deviceModel.getDevice().getDeviceExtension(XCAiInitiatingGWCfg.class) != null); xcaiRespondingGatewayModel = Model .of(deviceModel.getDevice().getDeviceExtension(XCAiRespondingGWCfg.class) != null); xcaInitiatingGatewayModel = Model .of(deviceModel.getDevice().getDeviceExtension(XCAInitiatingGWCfg.class) != null); xcaRespondingGatewayModel = Model .of(deviceModel.getDevice().getDeviceExtension(XCARespondingGWCfg.class) != null); xdsRegistryModel = Model.of(deviceModel.getDevice().getDeviceExtension(XdsRegistry.class) != null); xdsRepositoryModel = Model.of(deviceModel.getDevice().getDeviceExtension(XdsRepository.class) != null); xdsSourceModel = Model.of(deviceModel.getDevice().getDeviceExtension(XdsSource.class) != null); xdsStorageModel = Model.of(deviceModel.getDevice().getDeviceExtension(StorageConfiguration.class) != null); xdsiSourceModel = Model.of(deviceModel.getDevice().getDeviceExtension(XDSiSourceCfg.class) != null); } private void setDeviceConfiguration(final DeviceModel deviceModel) throws ConfigurationException { deviceNameModel = Model.of(deviceModel.getDevice().getDeviceName()); installedModel = Model.of(deviceModel.getDevice().isInstalled()); descriptionModel = Model.of(deviceModel.getDevice().getDescription()); deviceSerialNumberModel = Model.of(deviceModel.getDevice().getDeviceSerialNumber()); institutionAddressModel = new StringArrayModel(deviceModel.getDevice().getInstitutionAddresses()); institutionCodeModel = deviceModel.getDevice().getInstitutionCodes().length > 0 ? new InstitutionCodeModel(deviceModel.getDevice().getInstitutionCodes()[0]) : new InstitutionCodeModel(null); institutionalDepartmentNameModel = new StringArrayModel( deviceModel.getDevice().getInstitutionalDepartmentNames()); institutionNameModel = new StringArrayModel(deviceModel.getDevice().getInstitutionNames()); issuerOfAccessionNumberModel = deviceModel.getDevice().getIssuerOfAccessionNumber() == null ? new Model<String>() : Model.of(deviceModel.getDevice().getIssuerOfAccessionNumber().toString()); issuerOfAdmissionIDModel = deviceModel.getDevice().getIssuerOfAdmissionID() == null ? new Model<String>() : Model.of(deviceModel.getDevice().getIssuerOfAdmissionID().toString()); issuerOfContainerIdentifierModel = deviceModel.getDevice().getIssuerOfContainerIdentifier() == null ? new Model<String>() : Model.of(deviceModel.getDevice().getIssuerOfContainerIdentifier().toString()); issuerOfPatientIDModel = deviceModel.getDevice().getIssuerOfPatientID() == null ? new Model<String>() : Model.of(deviceModel.getDevice().getIssuerOfPatientID().toString()); issuerOfServiceEpisodeIDModel = deviceModel.getDevice().getIssuerOfServiceEpisodeID() == null ? new Model<String>() : Model.of(deviceModel.getDevice().getIssuerOfServiceEpisodeID().toString()); issuerOfSpecimenIdentifierModel = deviceModel.getDevice().getIssuerOfSpecimenIdentifier() == null ? new Model<String>() : Model.of(deviceModel.getDevice().getIssuerOfSpecimenIdentifier().toString()); manufacturerModel = Model.of(deviceModel.getDevice().getManufacturer()); manufacturerModelNameModel = Model.of(deviceModel.getDevice().getManufacturerModelName()); orderFillerIdentifierModel = deviceModel.getDevice().getOrderFillerIdentifier() == null ? new Model<String>() : Model.of(deviceModel.getDevice().getOrderFillerIdentifier().toString()); orderPlacerIdentifierModel = deviceModel.getDevice().getOrderPlacerIdentifier() == null ? new Model<String>() : Model.of(deviceModel.getDevice().getOrderPlacerIdentifier().toString()); primaryDeviceTypesModel = new StringArrayModel(deviceModel.getDevice().getPrimaryDeviceTypes()); relatedDeviceRefsModel = new StringArrayModel(deviceModel.getDevice().getRelatedDeviceRefs()); softwareVersionsModel = new StringArrayModel(deviceModel.getDevice().getSoftwareVersions()); stationNameModel = Model.of(deviceModel.getDevice().getStationName()); vendorDataModel = Model.of("size " + deviceModel.getDevice().getVendorData().length); trustStoreURLModel = Model.of(deviceModel.getDevice().getTrustStoreURL()); trustStoreTypeModel = Model.of(deviceModel.getDevice().getTrustStoreType()); trustStorePinModel = Model.of(deviceModel.getDevice().getTrustStorePinProperty() != null ? deviceModel.getDevice().getTrustStorePinProperty() : deviceModel.getDevice().getTrustStorePin()); useTrustStorePinProperty = Model.of(deviceModel.getDevice().getTrustStorePinProperty() != null); keyStoreURLModel = Model.of(deviceModel.getDevice().getKeyStoreURL()); keyStoreTypeModel = Model.of(deviceModel.getDevice().getKeyStoreType()); keyStorePinModel = Model.of(deviceModel.getDevice().getKeyStorePinProperty() != null ? deviceModel.getDevice().getKeyStorePinProperty() : deviceModel.getDevice().getKeyStorePin()); useKeyStorePinProperty = Model.of(deviceModel.getDevice().getKeyStorePinProperty() != null); keyStoreKeyPinModel = Model.of(deviceModel.getDevice().getKeyStoreKeyPinProperty() != null ? deviceModel.getDevice().getKeyStoreKeyPinProperty() : deviceModel.getDevice().getKeyStoreKeyPin()); useKeyStoreKeyPinProperty = Model.of(deviceModel.getDevice().getKeyStoreKeyPinProperty() != null); } private void setProxyDevExtConfiguration(final DeviceModel deviceModel) throws ConfigurationException { if (!typeModel.getObject().equals(ConfigurationType.Proxy)) return; ProxyDeviceExtension proxyDevExt = deviceModel.getDevice().getDeviceExtension(ProxyDeviceExtension.class); schedulerIntervalModel = Model.of(proxyDevExt.getSchedulerInterval()); forwardThreadsModel = Model.of(proxyDevExt.getForwardThreads()); staleTimeoutModel = Model.of(proxyDevExt.getConfigurationStaleTimeout()); } private void initNewConfigurationTypeModel() { initBasicDeviceConfigurationTypeModel(); initProxyConfigurationTypeModel(); initXdsConfigurationTypeModel(); } private void initXdsConfigurationTypeModel() { xcaiInitiatingGatewayModel = Model.of(true); xcaInitiatingGatewayModel = Model.of(true); xcaiRespondingGatewayModel = Model.of(true); xcaRespondingGatewayModel = Model.of(true); xdsRegistryModel = Model.of(true); xdsRepositoryModel = Model.of(true); xdsSourceModel = Model.of(true); xdsStorageModel = Model.of(true); xdsiSourceModel = Model.of(true); } private void initBasicDeviceConfigurationTypeModel() { typeModel = Model.of(ConfigTreeProvider.ConfigurationType.Basic); deviceNameModel = Model.of(); installedModel = Model.of(true); descriptionModel = Model.of(); deviceSerialNumberModel = Model.of(); institutionAddressModel = new StringArrayModel(null); institutionCodeModel = new InstitutionCodeModel(null); institutionalDepartmentNameModel = new StringArrayModel(null); institutionNameModel = new StringArrayModel(null); issuerOfAccessionNumberModel = Model.of(); issuerOfAdmissionIDModel = Model.of(); issuerOfContainerIdentifierModel = Model.of(); issuerOfPatientIDModel = Model.of(); issuerOfServiceEpisodeIDModel = Model.of(); issuerOfSpecimenIdentifierModel = Model.of(); manufacturerModel = Model.of(); manufacturerModelNameModel = Model.of(); orderFillerIdentifierModel = Model.of(); orderPlacerIdentifierModel = Model.of(); primaryDeviceTypesModel = new StringArrayModel(null); relatedDeviceRefsModel = new StringArrayModel(null); softwareVersionsModel = new StringArrayModel(null); stationNameModel = Model.of(); vendorDataModel = Model.of("size 0"); trustStoreURLModel = Model.of(); trustStoreTypeModel = Model.of(); trustStorePinModel = Model.of(); useTrustStorePinProperty = Model.of(false); keyStoreURLModel = Model.of(); keyStoreTypeModel = Model.of(); keyStorePinModel = Model.of(); useKeyStorePinProperty = Model.of(false); keyStoreKeyPinModel = Model.of(); useKeyStoreKeyPinProperty = Model.of(false); } private void initProxyConfigurationTypeModel() { schedulerIntervalModel = Model.of(ProxyDeviceExtension.DEFAULT_SCHEDULER_INTERVAL); forwardThreadsModel = Model.of(ProxyDeviceExtension.DEFAULT_FORWARD_THREADS); staleTimeoutModel = Model.of(60); } private void addCancelButton(final ModalWindow window, final ExtendedForm form) { form.add(new AjaxButton("cancel", new ResourceModel("cancelBtn"), form) { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { window.close(target); } @Override protected void onError(AjaxRequestTarget arg0, Form<?> arg1) { } }.setDefaultFormProcessing(false)); } private void addSaveButton(final ModalWindow window, final DeviceModel deviceModel, final ExtendedForm form) { form.add(new IndicatingAjaxButton("submit", new ResourceModel("saveBtn"), form) { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { try { Device device = deviceModel != null ? deviceModel.getDevice() : initDeviceExtensions(); setDeviceAttributes(device); setProxyDeviceAttributes(device); setXdsDeviceAttributes(device); if (deviceModel == null) ConfigTreeProvider.get().persistDevice(device); else ConfigTreeProvider.get().mergeDevice(device); window.close(target); } catch (Exception e) { log.error(this.getClass().toString() + ": " + "Error modifying device: " + e.getMessage()); if (log.isDebugEnabled()) e.printStackTrace(); throw new ModalWindowRuntimeException(e.getLocalizedMessage()); } } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { if (target != null) target.add(form); } }); } private void setProxyDeviceAttributes(Device device) { ProxyDeviceExtension proxyDevExt = device.getDeviceExtension(ProxyDeviceExtension.class); if (proxyDevExt == null) return; // mandatory proxyDevExt.setSchedulerInterval(schedulerIntervalModel.getObject()); // optional if (staleTimeoutModel.getObject() != null) proxyDevExt.setConfigurationStaleTimeout(staleTimeoutModel.getObject()); if (forwardThreadsModel.getObject() != null) proxyDevExt.setForwardThreads(forwardThreadsModel.getObject()); } private void setXdsDeviceAttributes(Device device) { if (!typeModel.getObject().equals(ConfigTreeProvider.ConfigurationType.XDS)) return; XCAiInitiatingGWCfg xcaiInit = device.getDeviceExtension(XCAiInitiatingGWCfg.class); Boolean xcaiInitCheck = xcaiInitiatingGatewayModel.getObject(); if (xcaiInitCheck && xcaiInit == null) { XCAiInitiatingGWCfg xcai = new XCAiInitiatingGWCfg(); xcai.setApplicationName("SAMPLE^APPLICATION"); xcai.setHomeCommunityID("SAMPLE-ID"); device.addDeviceExtension(xcai); } else if (xcaiInit != null && !xcaiInitCheck) device.removeDeviceExtension(xcaiInit); XCAInitiatingGWCfg xcaInit = device.getDeviceExtension(XCAInitiatingGWCfg.class); Boolean xcaInitCheck = xcaInitiatingGatewayModel.getObject(); if (xcaInitCheck && xcaInit == null) { XCAInitiatingGWCfg xca = new XCAInitiatingGWCfg(); xca.setApplicationName("SAMPLE^APPLICATION"); xca.setHomeCommunityID("SAMPLE-ID"); device.addDeviceExtension(xca); } else if (xcaInit != null && !xcaInitCheck) device.removeDeviceExtension(xcaInit); XCAiRespondingGWCfg xcaiResp = device.getDeviceExtension(XCAiRespondingGWCfg.class); Boolean xcaiRespCheck = xcaiRespondingGatewayModel.getObject(); if (xcaiRespCheck && xcaiResp == null) { XCAiRespondingGWCfg xcai = new XCAiRespondingGWCfg(); xcai.setApplicationName("SAMPLE^APPLICATION"); xcai.setHomeCommunityID("SAMPLE-ID"); device.addDeviceExtension(xcai); } else if (xcaiResp != null && !xcaiRespCheck) device.removeDeviceExtension(xcaiResp); XCARespondingGWCfg xcaResp = device.getDeviceExtension(XCARespondingGWCfg.class); Boolean xcaRespCheck = xcaRespondingGatewayModel.getObject(); if (xcaRespCheck && xcaResp == null) { XCARespondingGWCfg xca = new XCARespondingGWCfg(); xca.setApplicationName("SAMPLE^APPLICATION"); xca.setHomeCommunityID("SAMPLE-ID"); device.addDeviceExtension(xca); } else if (xcaResp != null && !xcaRespCheck) device.removeDeviceExtension(xcaResp); XdsRegistry xdsReg = device.getDeviceExtension(XdsRegistry.class); Boolean xdsRegCheck = xdsRegistryModel.getObject(); if (xdsRegCheck && xdsReg == null) { XdsRegistry xds = new XdsRegistry(); xds.setApplicationName("SAMPLE^APPLICATION"); xds.setAffinityDomain(new String[] { "SAMPLE-DOMAIN" }); xds.setAffinityDomainConfigDir("SAMPLE-DIR"); device.addDeviceExtension(xds); } else if (xdsReg != null && !xdsRegCheck) device.removeDeviceExtension(xdsReg); XdsRepository xdsRep = device.getDeviceExtension(XdsRepository.class); Boolean xdsRepCheck = xdsRepositoryModel.getObject(); if (xdsRepCheck && xdsRep == null) { XdsRepository xds = new XdsRepository(); xds.setApplicationName("SAMPLE^APPLICATION"); xds.setRepositoryUID("SAMPLE-UID"); device.addDeviceExtension(xds); } else if (xdsRep != null && !xdsRepCheck) device.removeDeviceExtension(xdsRep); XdsSource xdsSrc = device.getDeviceExtension(XdsSource.class); Boolean xdsSrcCheck = xdsSourceModel.getObject(); if (xdsSrcCheck && xdsSrc == null) { XdsSource xds = new XdsSource(); device.addDeviceExtension(xds); } else if (xdsSrc != null && !xdsSrcCheck) device.removeDeviceExtension(xdsSrc); StorageConfiguration xdsStorage = device.getDeviceExtension(StorageConfiguration.class); Boolean xdsStorageCheck = xdsStorageModel.getObject(); if (xdsStorageCheck && xdsStorage == null) { StorageConfiguration xds = new StorageConfiguration(); device.addDeviceExtension(xds); } else if (xdsStorage != null && !xdsStorageCheck) device.removeDeviceExtension(xdsStorage); XDSiSourceCfg xdsiSrc = device.getDeviceExtension(XDSiSourceCfg.class); Boolean xdsiSrcCheck = xdsiSourceModel.getObject(); if (xdsiSrcCheck && xdsiSrc == null) { XDSiSourceCfg xds = new XDSiSourceCfg(); device.addDeviceExtension(xds); } else if (xdsiSrc != null && !xdsiSrcCheck) device.removeDeviceExtension(xdsiSrc); } private Device initDeviceExtensions() { Device device = new Device(deviceNameModel.getObject()); if (typeModel.getObject().equals(ConfigurationType.Proxy)) initProxyDeviceExtension(device); if (typeModel.getObject().equals(ConfigurationType.AuditRecordRepository)) initARRExtension(device); return device; } private void initARRExtension(Device device) { AuditRecordRepository auditRecordRepository = new AuditRecordRepository(); device.addDeviceExtension(auditRecordRepository); } private void initProxyDeviceExtension(Device device) { ProxyDeviceExtension proxyDeviceExtension = new ProxyDeviceExtension(); proxyDeviceExtension.setSchedulerInterval(schedulerIntervalModel.getObject()); device.addDeviceExtension(proxyDeviceExtension); device.addDeviceExtension(new HL7DeviceExtension()); } private void setDeviceAttributes(Device device) { // mandatory device.setInstalled(installedModel.getObject()); // optional device.setDescription(descriptionModel.getObject()); device.setDeviceSerialNumber(deviceSerialNumberModel.getObject()); device.setInstitutionAddresses(institutionAddressModel.getArray()); device.setInstitutionCodes(institutionCodeModel.getCode() == null ? new Code[] {} : new Code[] { institutionCodeModel.getCode() }); device.setInstitutionalDepartmentNames(institutionalDepartmentNameModel.getArray()); device.setInstitutionNames(institutionNameModel.getArray()); device.setIssuerOfAccessionNumber(issuerOfAccessionNumberModel.getObject() == null ? null : new Issuer(issuerOfAccessionNumberModel.getObject())); device.setIssuerOfAdmissionID(issuerOfAdmissionIDModel.getObject() == null ? null : new Issuer(issuerOfAdmissionIDModel.getObject())); device.setIssuerOfContainerIdentifier(issuerOfContainerIdentifierModel.getObject() == null ? null : new Issuer(issuerOfContainerIdentifierModel.getObject())); device.setIssuerOfPatientID( issuerOfPatientIDModel.getObject() == null ? null : new Issuer(issuerOfPatientIDModel.getObject())); device.setIssuerOfServiceEpisodeID(issuerOfServiceEpisodeIDModel.getObject() == null ? null : new Issuer(issuerOfServiceEpisodeIDModel.getObject())); device.setIssuerOfSpecimenIdentifier(issuerOfSpecimenIdentifierModel.getObject() == null ? null : new Issuer(issuerOfSpecimenIdentifierModel.getObject())); device.setManufacturer(manufacturerModel.getObject()); device.setManufacturerModelName(manufacturerModelNameModel.getObject()); device.setOrderFillerIdentifier(orderFillerIdentifierModel.getObject() == null ? null : new Issuer(orderFillerIdentifierModel.getObject())); device.setOrderPlacerIdentifier(orderPlacerIdentifierModel.getObject() == null ? null : new Issuer(orderPlacerIdentifierModel.getObject())); device.setPrimaryDeviceTypes(primaryDeviceTypesModel.getArray()); device.setRelatedDeviceRefs(relatedDeviceRefsModel.getArray()); device.setSoftwareVersions(softwareVersionsModel.getArray()); device.setStationName(stationNameModel.getObject()); device.setTrustStoreURL(trustStoreURLModel.getObject()); device.setTrustStoreType(trustStoreTypeModel.getObject()); device.setTrustStorePinProperty( useTrustStorePinProperty.getObject() ? trustStorePinModel.getObject() : null); device.setTrustStorePin(!useTrustStorePinProperty.getObject() ? trustStorePinModel.getObject() : null); device.setKeyStoreURL(keyStoreURLModel.getObject()); device.setKeyStoreType(keyStoreTypeModel.getObject()); device.setKeyStorePinProperty(useKeyStorePinProperty.getObject() ? keyStorePinModel.getObject() : null); device.setKeyStorePin(!useKeyStorePinProperty.getObject() ? keyStorePinModel.getObject() : null); device.setKeyStoreKeyPinProperty( useKeyStoreKeyPinProperty.getObject() ? keyStoreKeyPinModel.getObject() : null); device.setKeyStoreKeyPin(!useKeyStoreKeyPinProperty.getObject() ? keyStoreKeyPinModel.getObject() : null); } private DropDownChoice<ConfigTreeProvider.ConfigurationType> setConfigurationTypeList() { ArrayList<ConfigTreeProvider.ConfigurationType> configurationTypeList = new ArrayList<ConfigTreeProvider.ConfigurationType>(); configurationTypeList.add(ConfigTreeProvider.ConfigurationType.Basic); configurationTypeList.add(ConfigTreeProvider.ConfigurationType.Proxy); configurationTypeList.add(ConfigTreeProvider.ConfigurationType.XDS); configurationTypeList.add(ConfigTreeProvider.ConfigurationType.AuditRecordRepository); // configurationTypeList.add(ConfigTreeProvider.ConfigurationType.Archive); DropDownChoice<ConfigTreeProvider.ConfigurationType> typeDropDown = new DropDownChoice<ConfigTreeProvider.ConfigurationType>( "type", typeModel, configurationTypeList); return typeDropDown; } }