X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMain.hs;h=6c8223db5628b397405eaeeaec454e571e8ceac8;hb=ef96e8bf0cadf5d602022f8c91914d3cabeb35a0;hp=a5e05ebef6722602259c051f57d8b5054c6edbfa;hpb=5124833f973f6c47a4eda3f4e343d3d8631897c6;p=dead%2Fhtsn-import.git diff --git a/src/Main.hs b/src/Main.hs index a5e05eb..6c8223d 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -3,6 +3,7 @@ module Main where +-- System imports. import Control.Arrow ( (&&&), (>>^), arr, returnA ) import Control.Concurrent ( threadDelay ) import Control.Exception ( SomeException, catch ) @@ -29,9 +30,9 @@ import Text.XML.HXT.Core ( hasName, readDocument, runX, - unpickleDoc, - xpickle) + unpickleDoc ) +-- Local imports. import Backend ( Backend(..) ) import CommandLine ( get_args ) import Configuration ( Configuration(..), merge_optional ) @@ -45,25 +46,25 @@ import Network.Services.TSN.Report ( report_error ) import TSN.DbImport ( DbImport(..), ImportResult(..) ) import qualified TSN.XML.Heartbeat as Heartbeat ( verify ) -import qualified TSN.XML.Injuries as Injuries ( Message ) -import qualified TSN.XML.InjuriesDetail as InjuriesDetail ( Message ) -import qualified TSN.XML.News as News ( Message ) -import qualified TSN.XML.Odds as Odds ( Message ) +import qualified TSN.XML.Injuries as Injuries ( pickle_message ) +import qualified TSN.XML.InjuriesDetail as InjuriesDetail ( pickle_message ) +import qualified TSN.XML.News as News ( pickle_message ) +import qualified TSN.XML.Odds as Odds ( pickle_message ) import Xml ( DtdName(..), parse_opts ) -- | This is where most of the work happens. This function is called -- on every file that we would like to import. It determines which --- importer to use based on the DTD, processes the file, and then --- returns whether or not any records were imported. If the file was --- processed, the number of records imported is returned (wrapped in --- a Just). Otherwise, if the file was not processed, 'Nothing' is +-- importer to use based on the DTD, attempts to process the file, +-- and then returns whether or not it was successful. If the file +-- was processed, 'True' is returned. Otherwise, 'False' is -- returned. -- --- Since we are already in arrow world with HXT, the --- 'import_with_dtd' function is lifted to an 'Arrow' as well with --- 'arr'. This prevents us from having to do a bunch of unwrapping --- and rewrapping with the associated error checking. +-- The implementation is straightforward with one exception: since +-- we are already in arrow world with HXT, the @import_with_dtd@ +-- function is lifted to an 'Arrow' as well with 'arr'. This +-- prevents us from having to do a bunch of unwrapping and +-- rewrapping with the associated error checking. -- import_file :: Configuration -- ^ A configuration object needed for the -- 'backend' and 'connection_string'. @@ -150,23 +151,23 @@ import_file cfg path = do importer | dtd == "injuriesxml.dtd" = do - let m = unpickleDoc xpickle xml :: Maybe Injuries.Message + let m = unpickleDoc Injuries.pickle_message xml let errmsg = "Could not unpickle injuriesxml." maybe (return $ ImportFailed errmsg) migrate_and_import m | dtd == "Injuries_Detail_XML.dtd" = do - let m = unpickleDoc xpickle xml :: Maybe InjuriesDetail.Message + let m = unpickleDoc InjuriesDetail.pickle_message xml let errmsg = "Could not unpickle Injuries_Detail_XML." maybe (return $ ImportFailed errmsg) migrate_and_import m | dtd == "newsxml.dtd" = do - let m = unpickleDoc xpickle xml :: Maybe News.Message + let m = unpickleDoc News.pickle_message xml let errmsg = "Could not unpickle newsxml." maybe (return $ ImportFailed errmsg) migrate_and_import m | dtd == "Odds_XML.dtd" = do - let m = unpickleDoc xpickle xml :: Maybe Odds.Message + let m = unpickleDoc Odds.pickle_message xml let errmsg = "Could not unpickle Odds_XML." maybe (return $ ImportFailed errmsg) migrate_and_import m @@ -177,10 +178,11 @@ import_file cfg path = do -- | Entry point of the program. It twiddles some knobs for --- configuration options and then calls 'import_file' on each XML file --- given on the command-line. +-- configuration options and then calls 'import_file' on each XML +-- file given on the command-line. -- --- Any file successfully processed is then removed, and we're done. +-- Any file successfully processed is then optionally removed, and +-- we're done. -- main :: IO () main = do