content: -- ----------------------------------------------------------------------------
  
  {- |
    Module     : Holumbus.FileSystem.Node.NodePort
    Copyright  : Copyright (C) 2008 Stefan Schmidt
    License    : MIT
  
    Maintainer : Stefan Schmidt (stefanschmidt@web.de)
    Stability  : experimental
    Portability: portable
    Version    : 0.1
  
  
  -}
  
  -- ----------------------------------------------------------------------------
  
  module Holumbus.FileSystem.Node.NodePort
  (
  -- * Datatypes
    NodePort
    
  -- * Creation and Destruction
  , newNodePort
  )
  where
  
  import Holumbus.Common.Debug
  import Holumbus.Network.Communication
  import Holumbus.FileSystem.Messages
  import Holumbus.FileSystem.Node
  
  
  -- ----------------------------------------------------------------------------
  -- Datatypes
  -- ----------------------------------------------------------------------------
  
  
  data NodePort = NodePort ClientPort
    deriving (Show)
  
  
  -- | Creates a new NodePort.
  newNodePort :: ClientPort -> NodePort
  newNodePort p = NodePort p
  
  
  
  
  -- ----------------------------------------------------------------------------
  -- Typeclass instanciation
  -- ----------------------------------------------------------------------------
  
  
  instance NodeClass NodePort where
    
    closeNode _ = return ()
    
    
    createFile i c (NodePort p)
      = do
        sendRequestToClient p time30 (NReqCreate i c) $
          \rsp ->
          do
          case rsp of
              (NRspSuccess) -> return (Just ())
              _ -> return Nothing
  
    createFiles l (NodePort p)
      = do
        sendRequestToClient p time60 (NReqCreateS l) $
          \rsp ->
          do
          case rsp of
              (NRspSuccess) -> return (Just ())
              _ -> return Nothing
  
    appendFile i c (NodePort p)
      = do
        sendRequestToClient p time30 (NReqAppend i c) $
          \rsp ->
          do
          case rsp of
            (NRspSuccess) -> return (Just ())
            _ -> return Nothing
  
  
    deleteFile i b (NodePort p) 
      = do
        sendRequestToClient p time30 (NReqDelete i b) $
          \rsp ->
          do
          case rsp of
            (NRspSuccess) -> return (Just ())
            _ -> return Nothing
  
  
    copyFile i cp (NodePort p)
      = do
        sendRequestToClient p time30 (NReqCopy i cp) $
          \rsp ->
          do
          case rsp of
            (NRspSuccess) -> return (Just ())
            _ -> return Nothing
  
  
    containsFile i (NodePort p)
      = do
        sendRequestToClient p time30 (NReqContains i) $
          \rsp ->
          do
          case rsp of
            (NRspContains b) -> return (Just b)
            _ -> return Nothing
  
  
    getFileContent i (NodePort p)
      = do
        sendRequestToClient p time30 (NReqGetFileContent i) $
          \rsp ->
          do
          case rsp of
            (NRspGetFileContent c) -> return (Just c)
            _ -> return Nothing
  
    getMultiFileContent l (NodePort p) 
        = do
        sendRequestToClient p time30 (NReqGetMultiFileContent l) $
          \rsp ->
          do
          case rsp of
            (NRspGetMultiFileContent lc) -> return (Just lc)
            _ -> return Nothing
  
      
    getFileData i (NodePort p)
      = do
        sendRequestToClient p time30 (NReqGetFileData i) $
          \rsp ->
          do
          case rsp of
            (NRspGetFileData d) -> return (Just d)
            _ -> return Nothing
  
  
    getFileIds (NodePort p)
      = do
        sendRequestToClient p time30 (NReqGetFileIds) $
          \rsp ->
          do
          case rsp of
            (NRspGetFileIds ls) -> return (Just ls)
            _ -> return Nothing
  
  
  instance Debug NodePort where
    printDebug (NodePort p)
      = do
        putStrLn "NodePort:"
        putStrLn $ show p
    getDebug (NodePort p)
      = return ("NodePort:\n"++show p++"\n")
  