--- /dev/null
+# ---------------------------------------------------------------
+# Copyright © 2014 Jason J.A. Stephenson <jason@sigio.com>
+#
+# This file is part of NCIPServer.
+#
+# NCIPServer is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# NCIPServer is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with NCIPServer. If not, see <http://www.gnu.org/licenses/>.
+# ---------------------------------------------------------------
+package NCIP::Header;
+use parent qw(Class::Accessor);
+
+# This is a NCIP ResponseHeader object. We do not implement an
+# initator, so we do not implement the InitiationHeader and we do not
+# attempt to make this object generic enough to handle that field.
+# The fields are as defined in Z39.83-1-2012. Ext is provided but is
+# not used by the current iteration of NCIPServer.
+
+NCIP::Problem->mk_accessors(qw(FromSystemId FromSystemAuthentication
+ FromAgencyId FromAgencyAuthentication
+ ToSystemId ToAgencyId Ext));
+
+1;
sub lookupversion {
}
+# A few helper methods:
+
+# All subclasses will possibly want to create a ResponseHeader and the
+# code for that would be highly redundant. We supply a default
+# implementation here that can retrieve the agency information from
+# the InitiationHeader of the message, swap their values, and return a
+# NCIP::Header.
+sub make_header {
+ my $self = shift;
+ my $initheader = shfit;
+
+ my $header;
+
+ if ($initheader && $initheader->{FromAgencyId}
+ && $initheader->{ToAgencyId}) {
+ $header = NCIP::Header->new(
+ FromAgencyId => $initheader->{ToAgencyId},
+ ToAgencyId => $initheader->{FromAgencyId}
+ );
+ }
+
+ return $header;
+}
+
1;
package NCIP::Problem;
use parent qw(Class::Accessor);
-NCIP::Problem->mk_accessors(qw(type scheme detail element value ext));
+# NCIP::Problem is the object used to report that a problem occurred
+# during message processing. The fields are as defined in
+# Z39.83-1-2012. Ext is avaialable for future use, but it is not
+# presently used by the problem template. The obsolete
+# ProcessingError fields have been excluded.
+
+NCIP::Problem->mk_accessors(qw(ProblemType Scheme ProblemDetail ProblemElement
+ ProblemValue Ext));
1;
--- /dev/null
+# ---------------------------------------------------------------
+# Copyright © 2014 Jason J.A. Stephenson <jason@sigio.com>
+#
+# This file is part of NCIPServer.
+#
+# NCIPServer is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# NCIPServer is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with NCIPServer. If not, see <http://www.gnu.org/licenses/>.
+# ---------------------------------------------------------------
+package NCIP::Response;
+use parent qw(Class::Accessor);
+
+# This is the Response object to be returned by the ILS' handlers.
+# The fields are:
+#
+# type: A string representing the name of the response this is usually
+# the initiation message name with Response tacked on, i.e.
+# LookupUserResponse, etc. This value is used to lookup the
+# appropriate template include for formatting the response message to
+# the initiator.
+#
+# data: This is an object or struct with the response data for a
+# successful result. It's value and needs vary by message type.
+#
+# problem: If the response is reporting a problem, this should point
+# to a NCIP::Problem object to be used in the problem template.
+#
+# header: A NCIP::Header object for the optional ResponseHeader in the
+# response template.
+
+# Presently, only one data or problem object is supported. If one is
+# supplied the other must be left undefined/unset. Only 1 header is
+# supported, but it is entirely optional according to the standard.
+
+NCIP::Problem->mk_accessors(qw(type data problem header));
+
+1;
package NCIP::StructuredAddress;
use parent qw(Class::Accessor);
+# This a "StructuredAddress" as defined by Z39.83-1-2012. It is used
+# for returning user address information when requested. The fields
+# are as defined in the standard.
+
NCIP::StructuredAddress->mk_accessors(qw(line1 line2 locality region postalcode
country));