Index: /trunk/DataStore/MANIFEST
===================================================================
--- /trunk/DataStore/MANIFEST	(revision 6611)
+++ /trunk/DataStore/MANIFEST	(revision 6612)
@@ -15,4 +15,5 @@
 lib/DataStore/Record.pm
 lib/DataStore/Response.pm
+lib/DataStore/Utils.pm
 t/00_distribution.t
 t/01_load.t
Index: /trunk/DataStore/lib/DataStore.pm
===================================================================
--- /trunk/DataStore/lib/DataStore.pm	(revision 6611)
+++ /trunk/DataStore/lib/DataStore.pm	(revision 6612)
@@ -1,5 +1,5 @@
 # Copyright (C) 2006  Joshua Hoblitt
 #
-# $Id: DataStore.pm,v 1.2 2006-03-16 21:44:57 jhoblitt Exp $
+# $Id: DataStore.pm,v 1.3 2006-03-16 23:52:56 jhoblitt Exp $
 
 package DataStore;
@@ -29,4 +29,5 @@
     use DataStore::Product;
     use DataStore::Response;
+    use DataStore::Utils;
 
 =head1 DESCRIPTION
@@ -112,4 +113,5 @@
 use DataStore::Product;
 use DataStore::Response;
+use DataStore::Utils;
 
 =head1 CREDITS
Index: /trunk/DataStore/lib/DataStore/FileSet.pm
===================================================================
--- /trunk/DataStore/lib/DataStore/FileSet.pm	(revision 6611)
+++ /trunk/DataStore/lib/DataStore/FileSet.pm	(revision 6612)
@@ -1,5 +1,5 @@
 # Copyright (C) 2006  Joshua Hoblitt
 #
-# $Id: FileSet.pm,v 1.6 2006-03-16 21:57:29 jhoblitt Exp $
+# $Id: FileSet.pm,v 1.7 2006-03-16 23:52:56 jhoblitt Exp $
 
 package DataStore::FileSet;
@@ -16,4 +16,5 @@
 use DataStore::File::Parser;
 use DataStore::Response;
+use DataStore::Utils qw( $STD_FIELD $TIME_FIELD %KNOWN_FILESET_TYPES );
 use LWP::UserAgent;
 use Params::Validate qw( validate SCALAR );
@@ -116,7 +117,19 @@
                 },
             },
-            fileset     => 1,
-            datetime    => 1,
-            type        => 1,
+            fileset     => {
+                type    => SCALAR,
+                regex   => $STD_FIELD,
+            },
+            datetime    => {
+                type    => SCALAR,
+                regex   => $TIME_FIELD,
+            },
+            type        => {
+                type    => SCALAR,
+                callbacks => {
+                    'is valid type' => 
+                        sub { exists $KNOWN_FILESET_TYPES{$_[0]} },
+                },
+            },
         },
     );
Index: /trunk/DataStore/lib/DataStore/Product.pm
===================================================================
--- /trunk/DataStore/lib/DataStore/Product.pm	(revision 6611)
+++ /trunk/DataStore/lib/DataStore/Product.pm	(revision 6612)
@@ -1,5 +1,5 @@
 # Copyright (C) 2006  Joshua Hoblitt
 #
-# $Id: Product.pm,v 1.6 2006-03-16 21:57:29 jhoblitt Exp $
+# $Id: Product.pm,v 1.7 2006-03-16 23:52:56 jhoblitt Exp $
 
 package DataStore::Product;
@@ -17,8 +17,7 @@
 use DataStore::Record;
 use DataStore::Response;
+use DataStore::Utils qw( $STD_FIELD );
 use LWP::UserAgent;
 use Params::Validate qw( validate SCALAR);
-
-my $std_field = qr/^[a-z0-9-_.]+$/;
 
 use vars qw( @BASE_FIELDS );
@@ -110,5 +109,5 @@
                 type        => SCALAR,
                 callbacks   => {
-                    'is valid fileset ID' => sub { $_[0] =~ $std_field },
+                    'is valid fileset ID' => sub { $_[0] =~ $STD_FIELD },
                 },
                 optional    => 1,
Index: /trunk/DataStore/lib/DataStore/Utils.pm
===================================================================
--- /trunk/DataStore/lib/DataStore/Utils.pm	(revision 6612)
+++ /trunk/DataStore/lib/DataStore/Utils.pm	(revision 6612)
@@ -0,0 +1,101 @@
+# Copyright (C) 2006  Joshua Hoblitt
+#
+# $Id: Utils.pm,v 1.1 2006-03-16 23:52:56 jhoblitt Exp $
+
+package DataStore::Utils;
+
+use strict;
+use warnings;
+
+use vars qw( $VERSION );
+$VERSION = '0.01';
+
+use base qw( Exporter );
+
+use Carp qw( carp );
+use Data::Validate::URI qw( is_uri );
+
+use vars qw(
+    @EXPORT_OK
+    $STD_FIELD
+    $TIME_FIELD
+    $BYTE_FIELD
+    $MD5_FIELD
+    %KNOWN_FILE_TYPES
+    %KNOWN_FILESET_TYPES
+);
+
+@EXPORT_OK = qw(
+    @EXPORT_OK
+    $STD_FIELD
+    $TIME_FIELD
+    $BYTE_FIELD
+    $MD5_FIELD
+    %KNOWN_FILE_TYPES
+    %KNOWN_FILESET_TYPES
+);
+
+$STD_FIELD = qr/^[a-z0-9-_.]+$/;
+$TIME_FIELD = qr/^ (\d{4})-(\d\d)-(\d\d) T (\d\d):(\d\d):(\d\d) Z $/x;
+$BYTE_FIELD = qr/^\d+$/;
+$MD5_FIELD = qr/^[0-9a-f]{32}$/;
+%KNOWN_FILE_TYPES = map { $_ => 1 } qw( chip );
+%KNOWN_FILESET_TYPES = map { $_ => 1 } qw( object domeflat skyflat bias dark );
+
+=pod
+
+=head1 NAME
+
+DataStore::Utils - functions and/or regexs common to DataStore::* modules
+
+=head1 SYNOPSIS
+
+    use DataStore::Utils qw( ... );
+
+=head1 DESCRIPTION
+
+This class parses a DataStore listing of I<FileSet>s into an array of L<DataStore::FileSet> objects.
+
+=head1 USAGE
+
+=head2 Import Parameters
+
+This module exports no I<symbols> by default. It will export these symbols upon request:
+
+=over 4
+
+=item * C<$STD_FIELD>
+
+A C<qr> for the standard DataStore list field type.
+
+=item * C<$TIME_FIELD>
+
+A C<qr> for the standard DataStore time field type.
+
+=item * C<$BYTE_FIELD>
+
+A C<qr> for the standard DataStore byte field type.
+
+=item * C<$MD5_FIELD>
+
+A C<qr> for the standard DataStore hex encoded md5 field type.
+
+=item * C%<KNOWN_FILE_TYPES>
+
+A a hash of the known I<File> types.
+
+=item * C%<KNOWN_FILESET_TYPES>
+
+A a hash of the known I<FileSet> types.
+
+=back
+
+=head2 Methods
+
+None.
+
+=cut
+
+1;
+
+__END__
Index: /trunk/DataStore/t/01_load.t
===================================================================
--- /trunk/DataStore/t/01_load.t	(revision 6611)
+++ /trunk/DataStore/t/01_load.t	(revision 6612)
@@ -5,5 +5,5 @@
 use lib qw( ./lib ./t );
 
-use Test::More tests => 8;
+use Test::More tests => 9;
 
 BEGIN { use_ok('DataStore'); }
@@ -15,2 +15,3 @@
 BEGIN { use_ok('DataStore::Record'); }
 BEGIN { use_ok('DataStore::Response'); }
+BEGIN { use_ok('DataStore::Utils'); }
Index: /trunk/DataStore/t/06_fileset.t
===================================================================
--- /trunk/DataStore/t/06_fileset.t	(revision 6611)
+++ /trunk/DataStore/t/06_fileset.t	(revision 6612)
@@ -3,5 +3,5 @@
 # Copyright (C) 2006  Joshua Hoblitt
 #
-# $Id: 06_fileset.t,v 1.3 2006-03-15 22:06:58 jhoblitt Exp $
+# $Id: 06_fileset.t,v 1.4 2006-03-16 23:52:56 jhoblitt Exp $
 
 use strict;
@@ -36,5 +36,5 @@
         fileset     => '12buckelyourshoe',
         datetime    => '2042-01-01T00:00:00Z',
-        type        => 'foo',
+        type        => 'object',
     );
 
@@ -47,5 +47,5 @@
         fileset     => '12buckelyourshoe',
         datetime    => '2042-01-01T00:00:00Z',
-        type        => 'foo',
+        type        => 'object',
         foo         => 1,
     );
@@ -119,5 +119,5 @@
         fileset     => '12buckelyourshoe',
         datetime    => '2042-01-01T00:00:00Z',
-        type        => 'foo',
+        type        => 'object',
     );
 
@@ -130,5 +130,5 @@
         fileset     => '12buckelyourshoe',
         datetime    => '2042-01-01T00:00:00Z',
-        type        => 'foo',
+        type        => 'object',
     );
 
@@ -157,5 +157,5 @@
         fileset     => '12buckelyourshoe',
         datetime    => '2042-01-01T00:00:00Z',
-        type        => 'foo',
+        type        => 'object',
     );
 
