blob: 5e170c5009982a23da2bf9c03e3168cad6f4bb52 [file] [log] [blame]
#ifndef _GEMFIRE_REGIONXMLCREATION_HPP_
#define _GEMFIRE_REGIONXMLCREATION_HPP_
/*=========================================================================
* Copyright (c) 2004-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
#include <string>
#include <vector>
#include "../gfcpp_globals.hpp"
#include "../ExceptionTypes.hpp"
#include "../Region.hpp"
#include "RegionXmlCreation.hpp"
#include "../RegionAttributes.hpp"
namespace gemfire {
class Cache;
/**
* Represents a {@link Region} that is created declaratively.
* @author Sonal Gadkari
* @since 1.0
*/
class CPPCACHE_EXPORT RegionXmlCreation
{
private:
/** An <code>AttributesFactory</code> for creating default
* <code>RegionAttribute</code>s */
AttributesFactory attrFactory;
/** The name of this region */
std::string regionName;
/** attributeId mentioned in XML file" */
std::string attrId;
/** True if region is a root */
bool isRoot;
/** The attributes of this region */
RegionAttributesPtr regAttrs;
/** This region's subregions */
std::vector<RegionXmlCreation*> subRegions;
public:
/**
* Fills in the state (that is, creates subregions)
* of a given <code>Region</code> based on the description provided
* by this <code>RegionXmlCreation</code>.
*
*/
void fillIn(RegionPtr region);
public:
~RegionXmlCreation();
/**
* Creates a new <code>RegionCreation</code> with the given name.
*/
RegionXmlCreation(char* name, bool isRoot = false);
/**
* Adds a subregion with the given name to this region
*/
void addSubregion(RegionXmlCreation* regionPtr);
/**
* Sets the attributes of this region
*/
void setAttributes(RegionAttributesPtr attrsPtr);
/**
* Gets the attributes of this region
*/
RegionAttributesPtr getAttributes();
/**
* Creates a root {@link Region} in a given <code>Cache</code>
* based on the description provided by this
* <code>RegionCreation</code>
*
* @throws OutOfMemoryException if the memory allocation failed
* @throws NotConnectedException if the cache is not connected
* @throws InvalidArgumentException if the attributePtr is NULL.
* or if RegionAttributes is null or if regionName is null,
* the empty string, or contains a '/'
* @throws RegionExistsException
* @throws CacheClosedException if the cache is closed
* at the time of region creation
* @throws UnknownException otherwise
*/
void createRoot(Cache* cache);
/**
* Creates a {@link Region} with the given parent using the
* description provided by this <code>RegionCreation</code>.
*
* @throws OutOfMemoryException if the memory allocation failed
* @throws NotConnectedException if the cache is not connected
* @throws InvalidArgumentException if the attributePtr is NULL.
* or if RegionAttributes is null or if regionName is null,
* the empty string,or contains a '/'
* @throws RegionExistsException
* @throws CacheClosedException if the cache is closed
* at the time of region creation
* @throws UnknownException otherwise
*
*/
void create(RegionPtr parent);
std::string getAttrId() const;
void setAttrId(const std::string& attrId);
};
};
#endif // #ifndef _GEMFIRE_REGIONXMLCREATION_HPP_