/*
* **** 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/gunterze/dcm4che.
*
* The Initial Developer of the Original Code is
* Agfa Healthcare.
* Portions created by the Initial Developer are Copyright (C) 2014
* 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.dcm4che3.conf.dicom;
import org.dcm4che3.conf.core.api.Path;
import org.dcm4che3.conf.core.util.PathPattern;
import java.util.HashMap;
import java.util.Map;
/**
* Single source for all the DicomConfiguration-related xpaths
*
* @author Roman K
*/
public enum DicomPath {
DeviceNameByAEName,
DeviceNameByAENameAlias,
AllDeviceNames,
AllAETitles,
DeviceNameByHL7AppName,
AllHL7AppNames,
ConfigRoot,
TCGroups,
AllTCsOfAllAEsWithTCGroupExt,
DeviceNameByAEUUID,
DeviceNameByUUID,
DeviceUUIDByAnyUUID,
DeviceByNameForWrite,
DeviceByNameForRead,
AETransferCapabilities;
public static final Path TC_GROUPS_PATH = new Path("dicomConfigurationRoot","globalConfiguration","dcmTransferCapabilities");
public static final Path CONFIG_ROOT_PATH = new Path("dicomConfigurationRoot");
public static final Map<DicomPath, String> PATHS = new HashMap<DicomPath, String>();
public static final Map<DicomPath, PathPattern> PATH_PATTERNS = new HashMap<DicomPath, PathPattern>();
static {
// search
PATHS.put(/**************/AllAETitles, "/dicomConfigurationRoot/dicomDevicesRoot/*/dicomNetworkAE/*/dicomAETitle | /dicomConfigurationRoot/dicomDevicesRoot/*/dicomNetworkAE/*/dcmAETitleAliases");
PATHS.put(/*******/DeviceNameByAEName, "/dicomConfigurationRoot/dicomDevicesRoot/*[dicomNetworkAE[@name='{aeName}']]/dicomDeviceName");
PATHS.put(/**/DeviceNameByAENameAlias, "/dicomConfigurationRoot/dicomDevicesRoot/*[dicomNetworkAE[*/dcmAETitleAliases='{aeNameAlias}']]/dicomDeviceName");
PATHS.put(/***********/AllDeviceNames, "/dicomConfigurationRoot/dicomDevicesRoot/*/dicomDeviceName");
PATHS.put(/***********/AllHL7AppNames, "/dicomConfigurationRoot/dicomDevicesRoot/*/deviceExtensions/HL7DeviceExtension/hl7Apps/*/hl7ApplicationName");
PATHS.put(/***/DeviceNameByHL7AppName, "/dicomConfigurationRoot/dicomDevicesRoot/*[deviceExtensions/HL7DeviceExtension/hl7Apps/*[hl7ApplicationName='{hl7AppName}']]/dicomDeviceName");
PATHS.put(/*******/DeviceNameByAEUUID, "/dicomConfigurationRoot/dicomDevicesRoot/*[dicomNetworkAE/*[_.uuid='{aeUUID}']]/dicomDeviceName");
PATHS.put(/*********/DeviceNameByUUID, "/dicomConfigurationRoot/dicomDevicesRoot/*[_.uuid='{deviceUUID}']/dicomDeviceName");
// Get device UUID of a device that contains (or itself is) an object with the specified UUID
PATHS.put(/******/DeviceUUIDByAnyUUID, "/dicomConfigurationRoot/dicomDevicesRoot/*[.//_.uuid='{UUID}']/_.uuid");
// single-result getNode (also can be used to store nodes)
PATHS.put(/***************/ConfigRoot, "/dicomConfigurationRoot");
PATHS.put(/*****/DeviceByNameForWrite, "/dicomConfigurationRoot/dicomDevicesRoot[@name='{deviceName}']");
PATHS.put(/******/DeviceByNameForRead, "/dicomConfigurationRoot/dicomDevicesRoot/{deviceName}");
// Transfer capabilities
PATHS.put(/*****************/TCGroups, TC_GROUPS_PATH.toSimpleEscapedXPath());
PATHS.put(AllTCsOfAllAEsWithTCGroupExt, "dicomNetworkAE/*[aeExtensions/TCGroupConfigAEExtension]/dcmTransferCapability");
PATHS.put(/****/AETransferCapabilities, "/dcmTransferCapability");
for (Map.Entry<DicomPath, String> entry : PATHS.entrySet()) {
PATH_PATTERNS.put(entry.getKey(), new PathPattern(entry.getValue()));
}
}
public static Path devicePath(String name) {
return new Path("dicomConfigurationRoot", "dicomDevicesRoot", name);
}
public static void validateDevicePath(Path path) {
if (path.getPathItems().size()>3 ||
!path.getPathItems().get(0).equals("dicomConfigurationRoot") ||
!path.getPathItems().get(1).equals("dicomDevicesRoot")) {
throw new IllegalArgumentException("Unexpected path:" + path);
}
}
/**
* Starts chaining
*
* @param paramName
* @param value
* @return
*/
public PathPattern.PathCreator set(String paramName, String value) {
return PATH_PATTERNS.get(this).set(paramName, value);
}
public PathPattern.PathParser parse(String path) {
return PATH_PATTERNS.get(this).parse(path);
}
public PathPattern.PathParser parseIfMatches(String path) {
return PATH_PATTERNS.get(this).parseIfMatches(path);
}
/**
* Gets path as is
*
* @return
*/
public String path() {
return PATHS.get(this);
}
}