{-- TerraHS - Interface between TerraLib and Haskell

    (c) Sergio Costa (INPE) - Setembro, 2005

	This program is free software; you can redistribute it 
    and/or modify it under the terms of the GNU General 
    Public License 2.1 as published by the Free Software Foundation
    (http://www.opensource.org/licenses/gpl-license.php)
--}

{--  --}


module TerraHS.Algebras.DB.Model
		--(
		--)
		where


import TerraHS.TerraLib
import TerraHS.TerraLib.TeLayer
import TerraHS.Algebras.DB.Databases
import TerraHS.TerraLib.TeDatabase
import TerraHS.Algebras.Base.Object
import TerraHS.TerraLib.TeGeoObject		
--
class ModelConvert m where
	toGeoObjects :: m -> [TeGeoObject]
	fromGeoObjects :: [TeGeoObject] -> m
	

	

{--

class (ModelConvert m) => ModelPersistence m p  where
	-- operations
	storeModel :: TeDatabasePtr -> String -> m -> IO Bool
	retrieveModel ::  TeDatabasePtr -> Parameter -> IO m 
	
	-- axioms
	storeModel db p m = (store db p (toGeoObjects m) )
	retrieveModel db p = ( (retrieve db p)::(IO [TeGeoObject]) ) >>= ( \go -> return (fromGeoObjects go) ) 

--}


class (ModelConvert m) => ModelPersistence m p  where
	-- operations
	storeModel :: TeDatabasePtr -> p -> m -> IO Bool
	retrieveModel ::  TeDatabasePtr -> p -> IO m 
	
instance (ModelConvert m) => ModelPersistence m String where

	storeModel db p m = (store db p (toGeoObjects m) )
	retrieveModel db p = ( (retrieve db p)::(IO [TeGeoObject]) ) >>= ( \go -> return (fromGeoObjects go) ) 

instance (ModelConvert m) => ModelPersistence m (String,TeProjection) where

	storeModel db p m = (store db p (toGeoObjects m) )