/
################################################################################
#
# Four Worlds
# Copyright (c) 2009-????
#
# Package: polc
#    File: data.py
#
# The automatic Python OLC system, capable of generating an online content editor
# for a given Python class or dict by using dictionaries to discover properties.
#
# OLC Data Storage
#
# Author: Stendec
#
################################################################################

import mudsys, auxiliary, storage, copy

################################################################################
# Variables
################################################################################

menukeys = "1234567890ABCDEFGHIJKLMNOPRSTUVWXYZ"
fancy_keys = {
	'desc'        : 'Description',
	'rdesc'       : 'Room Description',
	'mdesc' 			: 'Room Description for Multiple Occurences',
	'edesc'       : 'Extra Descriptions',
	'mname'				: 'Name for Multiple Occurences',
}

################################################################################
# Storage Class
################################################################################
class OLCAuxData:
	def __init__(self, set = None):
		self.working	= None
		self.key			= None
	
	def copy(self):
		c = OLCAuxData()
		self.copyTo(c)
		return c
	
	def copyTo(self, to):
		to.working	= self.working
		to.key			= self.key
	
	def store(self):
		set = storage.StorageSet()
		return set

class OLCData:
	def __init__(self, set = None):
		self.reset()
	
	def reset(self):
		self.object		= None
		self.saver		= None
		self.key			= None
		self.opts			= None
		self.sock			= None
		self.ekey			= None
	
	def hk(self, key, okey = None):
		'''Determines if we have a key. No value.'''
		key = "_" + key
		return self.opts.has_key(key) and self.opts[key].has_key(okey)
	
	def k(self, key, okey = None):
		'''Get the value of the option in key, or None if it doesn't exist.'''
		if self.hk(key,okey): return self.opts['_'+key][okey]
		return None
	
	def copy(self):
		newdata = OLCData()
		self.copyTo(newdata)
		return newdata
	
	def copyTo(self, to):
		to.object		= self.object
		to.saver    = self.saver
		to.key			= self.key
		to.opts			= self.opts
		to.sock			= self.sock
		to.ekey			= self.ekey
	
	def store(self):
		set = storage.StorageSet()
		return set

################################################################################
# Initialization
################################################################################
auxiliary.install("olc", OLCAuxData, "socket")