001/* ***** BEGIN LICENSE BLOCK ***** 002 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 003 * 004 * The contents of this file are subject to the Mozilla Public License Version 005 * 1.1 (the "License"); you may not use this file except in compliance with 006 * the License. You may obtain a copy of the License at 007 * http://www.mozilla.org/MPL/ 008 * 009 * Software distributed under the License is distributed on an "AS IS" basis, 010 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 011 * for the specific language governing rights and limitations under the 012 * License. 013 * 014 * The Original Code is part of dcm4che, an implementation of DICOM(TM) in 015 * Java(TM), hosted at https://github.com/gunterze/dcm4che. 016 * 017 * The Initial Developer of the Original Code is 018 * Agfa Healthcare. 019 * Portions created by the Initial Developer are Copyright (C) 2011 020 * the Initial Developer. All Rights Reserved. 021 * 022 * Contributor(s): 023 * See @authors listed below 024 * 025 * Alternatively, the contents of this file may be used under the terms of 026 * either the GNU General Public License Version 2 or later (the "GPL"), or 027 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), 028 * in which case the provisions of the GPL or the LGPL are applicable instead 029 * of those above. If you wish to allow use of your version of this file only 030 * under the terms of either the GPL or the LGPL, and not to allow others to 031 * use your version of this file under the terms of the MPL, indicate your 032 * decision by deleting the provisions above and replace them with the notice 033 * and other provisions required by the GPL or the LGPL. If you do not delete 034 * the provisions above, a recipient may use your version of this file under 035 * the terms of any one of the MPL, the GPL or the LGPL. 036 * 037 * ***** END LICENSE BLOCK ***** */ 038 039package org.dcm4che3.net.pdu; 040 041import java.io.IOException; 042 043import org.dcm4che3.util.StringUtils; 044 045/** 046 * @author Gunter Zeilinger <gunterze@gmail.com> 047 * 048 */ 049public class AAbort extends IOException { 050 051 private static final long serialVersionUID = -1825815767517748111L; 052 053 public static final int UL_SERIVE_USER = 0; 054 public static final int UL_SERIVE_PROVIDER = 2; 055 056 public static final int REASON_NOT_SPECIFIED = 0; 057 public static final int UNRECOGNIZED_PDU = 1; 058 public static final int UNEXPECTED_PDU = 2; 059 public static final int UNRECOGNIZED_PDU_PARAMETER = 4; 060 public static final int UNEXPECTED_PDU_PARAMETER = 5; 061 public static final int INVALID_PDU_PARAMETER_VALUE = 6; 062 063 private static final String[] SOURCES = { 064 "0 - service-user", 065 "1", 066 "2 - service-provider", 067 }; 068 069 private static final String[] SERVICE_USER_REASONS = { 070 "0", 071 }; 072 073 private static final String[] SERVICE_PROVIDER_REASONS = { 074 "0 - reason-not-specified", 075 "1 - unrecognized-PDU", 076 "2 - unexpected-PDU", 077 "3", 078 "4 - unrecognized-PDU-parameter", 079 "5 - unexpected-PDU-parameter", 080 "6 - invalid-PDU-parameter-value" 081 }; 082 083 private static final String[][] REASONS = { 084 SERVICE_USER_REASONS, 085 StringUtils.EMPTY_STRING, 086 SERVICE_PROVIDER_REASONS 087 }; 088 089 private final int source; 090 private final int reason; 091 092 public AAbort(int source, int reason) { 093 super("A-ABORT[source: " + toString(SOURCES, source) 094 + ", reason: " + toReason(source, reason) 095 + ']'); 096 this.source = source; 097 this.reason = reason; 098 } 099 100 public AAbort() { 101 this(UL_SERIVE_USER, 0); 102 } 103 104 private static String toString(String[] ss, int i) { 105 try { 106 return ss[i]; 107 } catch (IndexOutOfBoundsException e) { 108 return Integer.toString(i); 109 } 110 } 111 112 private static String toReason(int source, int reason) { 113 try { 114 return toString(REASONS[source], reason); 115 } catch (IndexOutOfBoundsException e) { 116 return Integer.toString(reason); 117 } 118 } 119 120 public final int getReason() { 121 return reason; 122 } 123 124 public final int getSource() { 125 return source; 126 } 127 128 @Override 129 public String toString() { 130 return getMessage(); 131 } 132}