r125 - in branches/work_jls17: . core doc lists output

jls17 at arinside.org jls17 at arinside.org
Tue Feb 2 10:43:08 CST 2010


Author: jls17
Date: Tue Feb  2 10:43:06 2010
New Revision: 125
URL: http://arinside.org/changeset/125

Log:
added CARContainerList; redesigned CARContainer class (updated all references); now CDocBase initializes pInside for all derived classes;

Added:
   branches/work_jls17/lists/ARContainerList.cpp
   branches/work_jls17/lists/ARContainerList.h
Modified:
   branches/work_jls17/ARInside.cpp
   branches/work_jls17/ARInside.h
   branches/work_jls17/ARInside.vcproj
   branches/work_jls17/core/ARContainer.cpp
   branches/work_jls17/core/ARContainer.h
   branches/work_jls17/doc/DocAlDetails.cpp
   branches/work_jls17/doc/DocAlGuideDetails.cpp
   branches/work_jls17/doc/DocAlGuideDetails.h
   branches/work_jls17/doc/DocAnalyzer.cpp
   branches/work_jls17/doc/DocAnalyzer.h
   branches/work_jls17/doc/DocApplicationDetails.cpp
   branches/work_jls17/doc/DocApplicationDetails.h
   branches/work_jls17/doc/DocBase.cpp
   branches/work_jls17/doc/DocCharMenuDetails.cpp
   branches/work_jls17/doc/DocContainerHelper.cpp
   branches/work_jls17/doc/DocContainerHelper.h
   branches/work_jls17/doc/DocEscalationDetails.cpp
   branches/work_jls17/doc/DocFieldDetails.cpp
   branches/work_jls17/doc/DocFilterDetails.cpp
   branches/work_jls17/doc/DocFilterGuideDetails.cpp
   branches/work_jls17/doc/DocFilterGuideDetails.h
   branches/work_jls17/doc/DocGroupDetails.cpp
   branches/work_jls17/doc/DocGroupDetails.h
   branches/work_jls17/doc/DocImageDetails.cpp
   branches/work_jls17/doc/DocMain.cpp
   branches/work_jls17/doc/DocMain.h
   branches/work_jls17/doc/DocPacklistDetails.cpp
   branches/work_jls17/doc/DocPacklistDetails.h
   branches/work_jls17/doc/DocRoleDetails.cpp
   branches/work_jls17/doc/DocRoleDetails.h
   branches/work_jls17/doc/DocSchemaDetails.cpp
   branches/work_jls17/doc/DocSummaryInfo.cpp
   branches/work_jls17/doc/DocUserDetails.cpp
   branches/work_jls17/doc/DocUserDetails.h
   branches/work_jls17/doc/DocValidator.cpp
   branches/work_jls17/doc/DocValidator.h
   branches/work_jls17/doc/DocVuiDetails.cpp
   branches/work_jls17/doc/DocWebserviceDetails.cpp
   branches/work_jls17/doc/DocWebserviceDetails.h
   branches/work_jls17/lists/ARMenuList.cpp
   branches/work_jls17/output/ContainerTable.cpp

Modified: branches/work_jls17/ARInside.cpp
==============================================================================
--- branches/work_jls17/ARInside.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/ARInside.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -72,7 +72,6 @@
 CARInside::CARInside(AppConfig &appConfig)
 {
 	this->appConfig = appConfig;
-	this->containerList.clear();
 	this->userList.clear();
 	this->groupList.clear();
 	this->roleList.clear();
@@ -257,7 +256,7 @@
 {	
 	CWindowsUtil wUtil(this->appConfig);
 
-	CDocMain *docMain = new CDocMain(*this);
+	CDocMain *docMain = new CDocMain();
 
 	if( docMain->Index() == 1)
 	{
@@ -344,15 +343,13 @@
 			&this->arStatus) == AR_RETURN_OK)
 		{			
 			cout << parsedObjects.numItems << " items loaded." << endl;
-			unsigned int arInsideIdSchema = 0; // TODO: this vars aren't needed if all new lists are finish
-			unsigned int arInsideIdCont = 0;
-			unsigned int arInsideIdImage = 0;
 
 			unsigned int schemaCount = 0;
 			unsigned int imagesCount = 0;
 			unsigned int activelinkCount = 0;
 			unsigned int filterCount = 0;
 			unsigned int escalationCount = 0;
+			unsigned int containerCount = 0;
 			unsigned int menuCount = 0;
 
 			for (unsigned int i=0; i < parsedObjects.numItems; ++i)
@@ -371,6 +368,9 @@
 				case AR_STRUCT_ITEM_XML_ESCALATION:
 					++escalationCount;
 					break;
+				case AR_STRUCT_ITEM_XML_CONTAINER:
+					++containerCount;
+					break;
 				case AR_STRUCT_ITEM_XML_CHAR_MENU:
 					++menuCount;
 					break;
@@ -386,6 +386,7 @@
 			if (activelinkCount > 0) alList.Reserve(activelinkCount);
 			if (filterCount > 0) filterList.Reserve(filterCount);
 			if (escalationCount > 0) escalationList.Reserve(escalationCount);
+			if (containerCount > 0) containerList.Reserve(containerCount);
 			if (menuCount > 0) menuList.Reserve(menuCount);
 #if AR_CURRENT_API_VERSION >= AR_API_VERSION_750
 			if (imagesCount > 0) imageList.Reserve(imagesCount);
@@ -463,40 +464,14 @@
 				case AR_STRUCT_ITEM_XML_CONTAINER:
 					{
 						LOG << "Loading Container: " << parsedObjects.structItemList[i].name; 
-						CARContainer *obj = new CARContainer(parsedObjects.structItemList[i].name, arInsideIdCont);
 
-						if( ARGetContainerFromXML(&this->arControl, 
-							&parsedStream,
-							parsedObjects.structItemList[i].name,
-							NULL,							
-							&obj->groupList,
-							&obj->admingrpList,
-							&obj->ownerObjList,
-							&obj->label,
-							&obj->description,
-							&obj->type,
-							&obj->references,
-							obj->owner,
-							obj->lastChanged,
-							&obj->timestamp,								
-							&obj->helptext,
-							&obj->changeDiary,
-							&obj->objPropList,
-							&obj->xmlDocVersion,
-							&this->arStatus) == AR_RETURN_OK)
-						{
-							ParseVersionString(obj->xmlDocVersion);
+						int objInsideId = containerList.AddContainerFromXML(parsedStream, parsedObjects.structItemList[i].name, &xmlDocVersion);
 
-							this->containerList.insert(this->containerList.end(), *obj);
-
-							LOG << " (InsideID: " << arInsideIdCont << ") [OK]" << endl;
-							arInsideIdCont++;								
+						if (objInsideId > -1)
+						{
+							ParseVersionString(xmlDocVersion);
+							LOG << " (InsideID: " << objInsideId << ") [OK]" << endl;
 						}
-						else
-							cerr << GetARStatusError();
-
-						delete obj;
-						FreeARStatusList(&this->arStatus, false);
 					}
 					break;
 #if AR_CURRENT_API_VERSION >= AR_API_VERSION_750
@@ -531,6 +506,7 @@
 			alList.Sort();
 			filterList.Sort();
 			escalationList.Sort();
+			containerList.Sort();
 			menuList.Sort();
 #if AR_CURRENT_API_VERSION >= AR_API_VERSION_750
 			imageList.Sort();
@@ -702,65 +678,10 @@
 
 int CARInside::LoadContainer(void)
 {
-	int insideId=0;
-
 	try
 	{
-		ARContainerInfoList conList;
-
-		ARReferenceTypeList		refTypes;
-		refTypes.refType = (int *) malloc(sizeof(unsigned int) * 1);
-		refTypes.numItems = 1;
-		refTypes.refType[0] = ARREF_ALL;
-
-		if(ARGetListContainer(&this->arControl, 0, ARCON_ALL, AR_HIDDEN_INCREMENT, NULL, NULL, &conList, &this->arStatus) == AR_RETURN_OK)
-		{
-			this->containerList.clear();	
-			for(unsigned int i=0; i< conList.numItems; i++)
-			{
-				if(!this->InBlacklist(ARREF_CONTAINER, conList.conInfoList[i].name))
-				{
-					LOG << "Loading " << CAREnum::ContainerType(conList.conInfoList[i].type) << ": " << conList.conInfoList[i].name; 
-					CARContainer *obj = new CARContainer(conList.conInfoList[i].name, insideId);
-
-					if( ARGetContainer(&this->arControl,
-						conList.conInfoList[i].name,
-						&refTypes,
-						&obj->groupList,
-						&obj->admingrpList,
-						&obj->ownerObjList,
-						&obj->label,
-						&obj->description,
-						&obj->type,
-						&obj->references,
-						&obj->helptext,
-						obj->owner,
-						&obj->timestamp,						
-						obj->lastChanged,
-						&obj->changeDiary,
-						&obj->objPropList,
-						&this->arStatus) == AR_RETURN_OK)
-					{
-						this->containerList.insert(this->containerList.end(), *obj);
-
-						LOG << " (InsideID: " << insideId << ") [OK]" << endl;						
-						insideId++;
-
-						FreeARStatusList(&this->arStatus, false);
-					}		
-					else
-						cerr << GetARStatusError();
-
-					delete obj;
-				}
-			}
-		}
-
-		delete (refTypes.refType);
-		FreeARContainerInfoList(&conList, false);
-		FreeARStatusList(&this->arStatus, false);
-
-		this->Sort(containerList);		
+		containerList.LoadFromServer();
+		containerList.Sort();		
 	}
 	catch(exception& e)
 	{
@@ -768,7 +689,7 @@
 		GetARStatusError();
 	}
 
-	return insideId;
+	return containerList.GetCount();
 }
 
 int CARInside::LoadCharMenus(void)
@@ -865,7 +786,7 @@
 	mTimer.StartTimer();
 
 	string strValue = "abcdefghijklmnopqrstuvwxyz0123456789#";
-	CDocMain *docMain = new CDocMain(*this);
+	CDocMain *docMain = new CDocMain();
 
 	//Server information
 	docMain->ServerInfoList();
@@ -887,25 +808,27 @@
 
 	//Application Details
 	int nTmpCnt = 1;
+
 	//Create documentation here to fill objects applicationName reference information	
-	list<CARContainer>::iterator listIter;	
 	cout << "Starting Container Documentation" << endl;
-	for ( listIter = this->containerList.begin(); listIter != this->containerList.end(); listIter++ )
+
+	unsigned int cntCount = this->containerList.GetCount();
+	for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 	{
-		CARContainer *cont = &(*listIter);
+		CARContainer cont(cntIndex);
 
-		switch(cont->type)
+		switch(cont.GetType())
 		{
 		case ARCON_APP:
 			{
-				LOG << "Application [" << nTmpCnt << "-" << containerList.size() << "] '" << cont->name << "': ";
-				CDocApplicationDetails appDetails(*this, *cont);
+				LOG << "Application [" << (cntIndex + 1) << "-" << cntCount << "] '" << cont.GetName() << "': ";
+				CDocApplicationDetails appDetails(cont);
 				appDetails.Documentation();
 			}
 			break;
 		default:
 			{
-				LOG << "Container [" << nTmpCnt << "-" << containerList.size() << "] '" << cont->name << "' [OK]" << endl;
+				LOG << "Container [" << (cntIndex + 1) << "-" << cntCount << "] '" << cont.GetName() << "' [OK]" << endl;
 			}
 			break;
 		}
@@ -913,43 +836,43 @@
 		nTmpCnt++;
 	}
 
-	nTmpCnt = 1;
-	for ( listIter = this->containerList.begin(); listIter != this->containerList.end(); listIter++ )
+	unsigned int tmpCount = this->containerList.GetCount();
+	for ( unsigned int cntIndex = 0; cntIndex < tmpCount; ++cntIndex )
 	{
-		CARContainer *cont = &(*listIter);
-		switch(cont->type)
+		CARContainer cont(cntIndex);
+		switch(cont.GetType())
 		{
 		case ARCON_WEBSERVICE:
 			{
-				LOG << "Webservice [" << nTmpCnt << "-" << containerList.size() << "] '" << cont->name << "': ";
-				CDocWebserviceDetails wsDetails(*this, *cont);
+				LOG << "Webservice [" << (cntIndex + 1) << "-" << tmpCount << "] '" << cont.GetName() << "': ";
+				CDocWebserviceDetails wsDetails(cont);
 				wsDetails.Documentation();
 			}
 			break;
 		case ARCON_GUIDE:
 			{
-				LOG << "ActiveLinkGuide [" << nTmpCnt << "-" << containerList.size() << "] '" << cont->name << "': ";
-				CDocAlGuideDetails guideDetails(*this, *cont);
+				LOG << "ActiveLinkGuide [" << (cntIndex + 1) << "-" << tmpCount << "] '" << cont.GetName() << "': ";
+				CDocAlGuideDetails guideDetails(cont);
 				guideDetails.Documentation();
 			}
 			break;
 		case ARCON_FILTER_GUIDE:
 			{
-				LOG << "FilterGuide [" << nTmpCnt << "-" << containerList.size() << "] '" << cont->name << "': ";
-				CDocFilterGuideDetails fltGuideDetails(*this, *cont);
+				LOG << "FilterGuide [" << (cntIndex + 1) << "-" << tmpCount << "] '" << cont.GetName() << "': ";
+				CDocFilterGuideDetails fltGuideDetails(cont);
 				fltGuideDetails.Documentation();
 			}
 			break;
 		case ARCON_PACK:
 			{
-				LOG << "PackingList [" << nTmpCnt << "-" << containerList.size() << "] '" << cont->name << "': ";
-				CDocPacklistDetails packDetails(*this, *cont);
+				LOG << "PackingList [" << (cntIndex + 1) << "-" << tmpCount << "] '" << cont.GetName() << "': ";
+				CDocPacklistDetails packDetails(cont);
 				packDetails.Documentation();
 			}
 			break;
 		case ARCON_APP:
 			{
-				LOG << "Application [" << nTmpCnt << "-" << containerList.size() << "] '" << cont->name << "' [OK]" << endl;
+				LOG << "Application [" << (cntIndex + 1) << "-" << tmpCount << "] '" << cont.GetName() << "' [OK]" << endl;
 			}
 			break;
 		}
@@ -967,7 +890,7 @@
 	docMain->ActiveLinkActionList("index_action");
 
 	//ActiveLink Details
-	unsigned int tmpCount = alList.GetCount();
+	tmpCount = alList.GetCount();
 	cout << "Starting ActiveLink Documentation" << endl;
 	for (unsigned int actlinkIndex = 0; actlinkIndex < tmpCount; ++actlinkIndex)
 	{	
@@ -1118,12 +1041,12 @@
 	docMain->MessageList();	
 
 	//Analyzer
-	CDocAnalyzer *analyzer = new CDocAnalyzer(*this, "other");
+	CDocAnalyzer *analyzer = new CDocAnalyzer("other");
 	analyzer->Documentation();
 	delete analyzer;
 
 	//Validation
-	CDocValidator *validator = new CDocValidator(*this, "other");
+	CDocValidator *validator = new CDocValidator("other");
 	validator->Main();
 	delete validator;
 
@@ -1144,7 +1067,7 @@
 		CARGroup *grp = &(*groupIter);
 
 		LOG << "Group [" << nTmpCnt << "-" << groupList.size() << "] '" << grp->name << "': ";
-		CDocGroupDetails *grpDetails = new CDocGroupDetails(*this, *grp);
+		CDocGroupDetails *grpDetails = new CDocGroupDetails(*grp);
 		grpDetails->Documentation();
 		delete grpDetails;
 		nTmpCnt++;
@@ -1167,7 +1090,7 @@
 		CARRole *role = &(*roleIter);
 
 		LOG << "Role [" << nTmpCnt << "-" << roleList.size() << "] '" << role->name << "': ";
-		CDocRoleDetails *roleDetails = new CDocRoleDetails(*this, *role);
+		CDocRoleDetails *roleDetails = new CDocRoleDetails(*role);
 		roleDetails->Documentation();
 		delete roleDetails;
 		nTmpCnt++;
@@ -1190,7 +1113,7 @@
 		CARUser *user = &(*userIter);
 
 		LOG << "User [" << nTmpCnt << "-" << userList.size() << "] '" << user->loginName << "': ";
-		CDocUserDetails *userDetails = new CDocUserDetails(*this, *user);
+		CDocUserDetails *userDetails = new CDocUserDetails(*user);
 		userDetails->Documentation();
 		delete userDetails;
 		nTmpCnt++;
@@ -1339,18 +1262,10 @@
 	return filterList.Find(searchObjName.c_str());
 }
 
+// TODO: the CARInside::...GetInsideId function should be removed .... use the objects instead, e.g. CARContainer
 int CARInside::ContainerGetInsideId(string searchObjName)
 {
-	list<CARContainer>::iterator iter;			
-	for ( iter = containerList.begin(); iter != containerList.end(); iter++ )
-	{			
-		CARContainer *obj = &(*iter);
-		if(strcmp(obj->name.c_str(), searchObjName.c_str())==0)
-		{
-			return obj->GetInsideId();
-		}
-	}
-	return -1;
+	return containerList.Find(searchObjName.c_str());
 }
 
 // TODO: the CARInside::...GetInsideId function should be removed .... use the objects instead, e.g. CARCharMenu
@@ -1573,15 +1488,10 @@
 
 string CARInside::LinkToContainer(string containerName, int fromRootLevel)
 {
-	list<CARContainer>::iterator contIter;
-	list<CARContainer>::iterator endIt = this->containerList.end();
-	for ( contIter = this->containerList.begin(); contIter != endIt; ++contIter )
-	{	
-		CARContainer *container = &(*contIter);
-		if(containerName.compare(container->name) == 0)
-		{			
-			return container->GetURL(fromRootLevel);
-		}
+	CARContainer cnt(containerName);
+	if (cnt.Exists())
+	{
+		return cnt.GetURL(fromRootLevel);
 	}
 	return containerName;
 }

Modified: branches/work_jls17/ARInside.h
==============================================================================
--- branches/work_jls17/ARInside.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/ARInside.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -39,6 +39,7 @@
 #include "lists/ARActiveLinkList.h"
 #include "lists/ARFilterList.h"
 #include "lists/AREscalationList.h"
+#include "lists/ARContainerList.h"
 #include "lists/ARMenuList.h"
 #include "lists/ARImageList.h"
 #include "lists/BlackList.h"
@@ -90,7 +91,7 @@
 	CARFilterList filterList;
 	CAREscalationList escalationList;
 	CARActiveLinkList alList;
-	list<CARContainer> containerList;
+	CARContainerList containerList;
 	CARMenuList menuList;
 	list<CARUser> userList;
 	list<CARGroup> groupList;

Modified: branches/work_jls17/ARInside.vcproj
==============================================================================
--- branches/work_jls17/ARInside.vcproj	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/ARInside.vcproj	Tue Feb  2 10:43:06 2010	(r125)
@@ -1588,6 +1588,14 @@
 				>
 			</File>
 			<File
+				RelativePath=".\lists\ARContainerList.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\lists\ARContainerList.h"
+				>
+			</File>
+			<File
 				RelativePath=".\lists\AREscalationList.cpp"
 				>
 			</File>

Modified: branches/work_jls17/core/ARContainer.cpp
==============================================================================
--- branches/work_jls17/core/ARContainer.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/core/ARContainer.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -16,44 +16,142 @@
 
 #include "stdafx.h"
 #include "ARContainer.h"
+#include "../ARInside.h"
 
-CARContainer::CARContainer(string name, int insideId)
-: CARServerObjectWithData(insideId)
+CARContainer::CARContainer(int insideId)
+: CARServerObject(insideId)
 {
-	this->name = name;
-	this->type = 0;
-	this->label = NULL;
-	this->description = NULL;
-
-	ARZeroMemory(&groupList);
-	ARZeroMemory(&admingrpList);
-	ARZeroMemory(&ownerObjList);
-	ARZeroMemory(&references);
-	ARZeroMemory(&objPropList);
+}
+
+CARContainer::CARContainer(const string& name)
+: CARServerObject(-1)
+{
+	insideId = CARInside::GetInstance()->containerList.Find(name.c_str());
+}
+
+CARContainer::CARContainer(const char* name)
+: CARServerObject(-1)
+{
+	insideId = CARInside::GetInstance()->containerList.Find(name);
+}
+
+bool CARContainer::Exists()
+{
+	return (insideId >= 0 && (unsigned int)insideId < CARInside::GetInstance()->containerList.GetCount());
 }
 
 CARContainer::~CARContainer(void)
 {
-	// TODO: move ARFree calls to separate method to allow copying of the object without 
-	// copying the whole structure
-	//try
-	//{
-	//	FreeARReferenceList(&references, false);
-	//	FreeARPermissionList(&groupList, false);
-	//	FreeARInternalIdList(&admingrpList, false);
-	//	FreeARContainerOwnerObjList(&ownerObjList, false);
-	//	FreeARReferenceList(&references, false);
-
-	//	if(objPropList.props != NULL)
-	//		FreeARPropList(&objPropList, false);
-	//}
-	//catch(...)
-	//{
-	//}
+}
+
+bool CARContainer::IsClonable()
+{
+	return true;
+}
+
+CARServerObject* CARContainer::Clone()
+{
+	return new CARContainer(*this);
 }
 
 string CARContainer::GetURL(int rootLevel, bool showImage)
 {
-	string tmp = CWebUtil::RootPath(rootLevel)+CAREnum::ContainerDir(this->type)+"/"+this->FileID()+"/"+CWebUtil::DocName("index");
-	return CWebUtil::Link(this->name, tmp, (showImage ? CAREnum::ContainerImage(this->type) : ""), rootLevel);
+	unsigned int type = GetType();
+	string tmp = CWebUtil::RootPath(rootLevel)+CAREnum::ContainerDir(type)+"/"+this->FileID()+"/"+CWebUtil::DocName("index");
+	return CWebUtil::Link(GetName(), tmp, (showImage ? CAREnum::ContainerImage(type) : ""), rootLevel);
+}
+
+string CARContainer::GetName()
+{
+	return CARInside::GetInstance()->containerList.ContainerGetName(GetInsideId());
+}
+
+string CARContainer::GetName() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetName(GetInsideId());
+}
+
+string CARContainer::GetNameFirstChar()
+{
+	return CUtil::String2Comp(std::string(1, CARInside::GetInstance()->containerList.ContainerGetName(GetInsideId())[0]));
+}
+
+bool CARContainer::NameStandardFirstChar()
+{
+	return CARObject::NameStandardFirstChar(GetNameFirstChar());
+}
+
+const string& CARContainer::GetAppRefName() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetAppRefName(GetInsideId());
+}
+
+void CARContainer::SetAppRefName(const string &appName)
+{
+	return CARInside::GetInstance()->containerList.ContainerSetAppRefName(GetInsideId(), appName);
+}
+
+const char* CARContainer::GetHelpText() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetHelptext(GetInsideId());
+}
+
+ARTimestamp CARContainer::GetTimestamp()
+{
+	return CARInside::GetInstance()->containerList.ContainerGetTimestamp(GetInsideId());
+}
+
+const ARAccessNameType& CARContainer::GetOwner() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetOwner(GetInsideId());
+}
+
+const ARAccessNameType& CARContainer::GetLastChanged() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetModifiedBy(GetInsideId());
+}
+
+const char* CARContainer::GetChangeDiary() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetChangeDiary(GetInsideId());
+}
+
+const ARNameType& CARContainer::GetARName() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetName(GetInsideId());
+}
+
+const ARPermissionList& CARContainer::GetPermissions() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetPermissions(GetInsideId());
+}
+
+const ARInternalIdList& CARContainer::GetSubadmins() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetSubadmins(GetInsideId());
+}
+
+const ARContainerOwnerObjList& CARContainer::GetOwnerObjects() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetOwnerObjects(GetInsideId());
+}
+
+char* CARContainer::GetLabel() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetLabel(GetInsideId());
+}
+
+char* CARContainer::GetDescription() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetDescription(GetInsideId());
+}
+
+unsigned int CARContainer::GetType() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetType(GetInsideId());
+}
+
+const ARReferenceList& CARContainer::GetReferences() const
+{
+	return CARInside::GetInstance()->containerList.ContainerGetReferences(GetInsideId());
 }

Modified: branches/work_jls17/core/ARContainer.h
==============================================================================
--- branches/work_jls17/core/ARContainer.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/core/ARContainer.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -16,24 +16,48 @@
 
 #pragma once
 #include "ARServerObject.h"
-#include "../core/AREnum.h"
 
 class CARContainer :
-	public CARServerObjectWithData
+	public CARServerObject
 {
 public:
-	CARContainer(string name, int insideId);
+	CARContainer(int insideId);
+	CARContainer(const char* name);
+	CARContainer(const string& name);
 	~CARContainer(void);
 
-	ARPermissionList	groupList;
-	ARInternalIdList	admingrpList;
-	ARContainerOwnerObjList	ownerObjList;
-	char	*label;
-	char	*description;
-	unsigned int	type;
-	ARReferenceList	references;
-	ARPropList	objPropList;
+	bool Exists();
+
+	// implement functions inherited from CARObject
+	string GetName();
+	string GetName() const;
+	string GetNameFirstChar();
+	bool NameStandardFirstChar();
+
+	// implement functions inherited from CARServerObject
+	const char* GetHelpText() const;
+	ARTimestamp GetTimestamp();
+	const ARAccessNameType& GetOwner() const;
+	const ARAccessNameType& GetLastChanged() const;
+	const char* GetChangeDiary() const;
+
+	const ARNameType& GetARName() const;
+	const ARPermissionList& GetPermissions() const;
+	const ARInternalIdList& GetSubadmins() const;
+	const ARContainerOwnerObjList& GetOwnerObjects() const;
+	char* GetLabel() const;
+	char* GetDescription() const;
+	unsigned int GetType() const;
+	const ARReferenceList& GetReferences() const;
+	const ARPropList& GetProps() const;
+
+	const string& GetAppRefName() const;
+	void SetAppRefName(const string& appName);
 
 	string GetURL(int rootLevel, bool showImage = true);
+
 	int GetServerObjectTypeXML() { return AR_STRUCT_ITEM_XML_CONTAINER; }
+	bool IsClonable();
+	CARServerObject* Clone();
+private:
 };

Modified: branches/work_jls17/doc/DocAlDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocAlDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocAlDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -20,7 +20,6 @@
 CDocAlDetails::CDocAlDetails(int alInsideId, int rootLevel)
 : al(alInsideId)
 {
-	this->pInside = CARInside::GetInstance();
 	this->path = "active_link/" + CARObject::FileID(alInsideId);
 	this->rootLevel = rootLevel;
 	this->props = NULL;
@@ -189,20 +188,22 @@
 	try
 	{
 		CContainerTable *contTable = new CContainerTable(*this->pInside);
-		list<CARContainer>::iterator listContIter;
-		for ( listContIter = this->pInside->containerList.begin();  listContIter != this->pInside->containerList.end(); listContIter++ )
+		unsigned int cntCount = this->pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{
-			CARContainer *cont = &(*listContIter);
-			for(unsigned int nCnt = 0; nCnt < cont->references.numItems; nCnt++)
+			CARContainer cont(cntIndex);
+
+			if(cont.GetType() != ARCON_APP)
 			{
-				if(cont->type != ARCON_APP)
+				const ARReferenceList& refs = cont.GetReferences();
+				for(unsigned int nCnt = 0; nCnt < refs.numItems; nCnt++)
 				{
-					if(cont->references.referenceList[nCnt].reference.u.name != NULL)
+					if(refs.referenceList[nCnt].type == ARREF_ACTLINK)
 					{
-						if(strcmp(cont->references.referenceList[nCnt].reference.u.name, this->al.GetName().c_str())==0
-							&& cont->references.referenceList[nCnt].type == ARREF_ACTLINK)
+						if(refs.referenceList[nCnt].reference.u.name != NULL &&
+						   this->al.GetName() == refs.referenceList[nCnt].reference.u.name)
 						{
-							contTable->AddRow(*cont, rootLevel);
+							contTable->AddRow(cont, rootLevel);
 						}
 					}
 				}

Modified: branches/work_jls17/doc/DocAlGuideDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocAlGuideDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocAlGuideDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,10 +17,9 @@
 #include "stdafx.h"
 #include "DocAlGuideDetails.h"
 
-CDocAlGuideDetails::CDocAlGuideDetails(CARInside &arIn, CARContainer &alGuide)
+CDocAlGuideDetails::CDocAlGuideDetails(CARContainer &container)
+: alGuide(container)
 {
-	this->pInside = &arIn;
-	this->pAlGuide = &alGuide;
 	this->rootLevel = 2;
 }
 
@@ -30,25 +29,25 @@
 
 void CDocAlGuideDetails::Documentation()
 {
-	string dir = CAREnum::ContainerDir(ARCON_GUIDE)+"/"+pAlGuide->FileID();
+	string dir = CAREnum::ContainerDir(ARCON_GUIDE)+"/"+alGuide.FileID();
 
 	CWindowsUtil winUtil(pInside->appConfig);
 	if(winUtil.CreateSubDirectory(dir)>=0)
 	{
-		CWebPage webPage("index", pAlGuide->name, rootLevel, pInside->appConfig);
+		CWebPage webPage("index", alGuide.GetName(), rootLevel, pInside->appConfig);
 
 		//ContentHead informations
 		stringstream strmHead;
 		strmHead.str("");
 
-		strmHead << CWebUtil::LinkToActiveLinkGuideIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->pAlGuide->name);
-		if(this->pAlGuide->appRefName.c_str() != NULL && this->pAlGuide->appRefName.size() > 0)
-			strmHead << MenuSeparator << " Application " << this->pInside->LinkToContainer(this->pAlGuide->appRefName, this->rootLevel);
+		strmHead << CWebUtil::LinkToActiveLinkGuideIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->alGuide.GetName());
+		if(!this->alGuide.GetAppRefName().empty())
+			strmHead << MenuSeparator << " Application " << this->pInside->LinkToContainer(this->alGuide.GetAppRefName(), this->rootLevel);
 
 		webPage.AddContentHead(strmHead.str());
 
 		//Container Base Informations
-		CDocContainerHelper *contHelper = new CDocContainerHelper(*this->pInside, *this->pAlGuide, this->rootLevel);
+		CDocContainerHelper *contHelper = new CDocContainerHelper(this->alGuide, this->rootLevel);
 		webPage.AddContent(contHelper->BaseInfo());
 		delete contHelper;
 
@@ -57,7 +56,7 @@
 		webPage.AddContent(ActiveLinkActions());
 
 		//History
-		webPage.AddContent(this->pInside->ServerObjectHistory(this->pAlGuide, this->rootLevel));
+		webPage.AddContent(this->pInside->ServerObjectHistory(&this->alGuide, this->rootLevel));
 
 		//Save File
 		webPage.SaveInFolder(dir);
@@ -73,22 +72,23 @@
 
 	try
 	{
-		for(unsigned int i=0; i< pAlGuide->references.numItems; i++)
+		const ARReferenceList& refs = this->alGuide.GetReferences();
+		for(unsigned int i=0; i< refs.numItems; i++)
 		{
 			stringstream label, actLink;
 			label.str("");
 			actLink.str("");
 
-			switch(pAlGuide->references.referenceList[i].type)
+			switch(refs.referenceList[i].type)
 			{
 			case ARREF_ACTLINK:
 				{
-					actLink << pInside->LinkToAl(pAlGuide->references.referenceList[i].reference.u.name, rootLevel);
+					actLink << pInside->LinkToAl(refs.referenceList[i].reference.u.name, rootLevel);
 				}
 				break;
 			case ARREF_NULL_STRING:
 				{
-					label << pAlGuide->references.referenceList[i].label;
+					label << refs.referenceList[i].label;
 				}
 				break;			
 			}
@@ -131,7 +131,7 @@
 				const ARActiveLinkActionStruct &action = al.GetIfActions().actionList[nAction];
 				if(action.action == AR_ACTIVE_LINK_ACTION_CALLGUIDE)
 				{
-					if(strcmp(action.u.callGuide.guideName, pAlGuide->name.c_str())==0)
+					if(strcmp(action.u.callGuide.guideName, alGuide.GetName().c_str())==0)
 					{
 						stringstream tmp;
 						tmp << "If-Action " << nAction;
@@ -152,7 +152,7 @@
 				const ARActiveLinkActionStruct &action = al.GetElseActions().actionList[nAction];
 				if(action.action == AR_ACTIVE_LINK_ACTION_CALLGUIDE)
 				{
-					if(strcmp(action.u.callGuide.guideName, pAlGuide->name.c_str())==0)
+					if(strcmp(action.u.callGuide.guideName, alGuide.GetName().c_str())==0)
 					{
 						stringstream tmp;
 						tmp << "Else-Action " << nAction;

Modified: branches/work_jls17/doc/DocAlGuideDetails.h
==============================================================================
--- branches/work_jls17/doc/DocAlGuideDetails.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocAlGuideDetails.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -22,13 +22,13 @@
 	public CDocBase
 {
 public:
-	CDocAlGuideDetails(CARInside &arIn, CARContainer &alGuide);
+	CDocAlGuideDetails(CARContainer &container);
 	~CDocAlGuideDetails(void);
 
 	void Documentation();
 
 private:
-	CARContainer *pAlGuide;
+	CARContainer& alGuide;
 	string AlGuideInformation();
 	string ActiveLinkActions();
 };

Modified: branches/work_jls17/doc/DocAnalyzer.cpp
==============================================================================
--- branches/work_jls17/doc/DocAnalyzer.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocAnalyzer.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,9 +17,8 @@
 #include "stdafx.h"
 #include "DocAnalyzer.h"
 
-CDocAnalyzer::CDocAnalyzer(CARInside &arIn, string path)
+CDocAnalyzer::CDocAnalyzer(string path)
 {
-	this->pInside = &arIn;
 	this->path = path;
 	this->rootLevel = 1;
 }

Modified: branches/work_jls17/doc/DocAnalyzer.h
==============================================================================
--- branches/work_jls17/doc/DocAnalyzer.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocAnalyzer.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -21,7 +21,7 @@
 	public CDocBase
 {
 public:
-	CDocAnalyzer(CARInside &arIn, string path);
+	CDocAnalyzer(string path);
 	~CDocAnalyzer(void);
 
 	void Documentation();

Modified: branches/work_jls17/doc/DocApplicationDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocApplicationDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocApplicationDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,10 +17,9 @@
 #include "stdafx.h"
 #include "DocApplicationDetails.h"
 
-CDocApplicationDetails::CDocApplicationDetails(CARInside &arIn, CARContainer &application)
+CDocApplicationDetails::CDocApplicationDetails(CARContainer &application)
+: pApp(application)
 {
-	this->pInside = &arIn;
-	this->pApp = &application;
 	this->rootLevel = 2;
 }
 
@@ -32,18 +31,18 @@
 {
 	try
 	{
-		string dir = CAREnum::ContainerDir(ARCON_APP)+"/"+ this->pApp->FileID();
+		string dir = CAREnum::ContainerDir(ARCON_APP)+"/"+ this->pApp.FileID();
 
 		CWindowsUtil winUtil(pInside->appConfig);
 		if(winUtil.CreateSubDirectory(dir)>=0)
 		{
-			CWebPage webPage("index", this->pApp->name, rootLevel, pInside->appConfig);
+			CWebPage webPage("index", this->pApp.GetName(), rootLevel, pInside->appConfig);
 
 			//ContentHead informations
-			webPage.AddContentHead(CWebUtil::LinkToApplicationIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->pApp->name));
+			webPage.AddContentHead(CWebUtil::LinkToApplicationIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->pApp.GetName()));
 
 			//Container Base Informations
-			CDocContainerHelper *contHelper = new CDocContainerHelper(*this->pInside, *this->pApp, this->rootLevel);
+			CDocContainerHelper *contHelper = new CDocContainerHelper(this->pApp, this->rootLevel);
 			webPage.AddContent(contHelper->BaseInfo());
 			delete contHelper;
 
@@ -51,7 +50,7 @@
 			webPage.AddContent(ApplicationInformation());
 
 			//History
-			webPage.AddContent(this->pInside->ServerObjectHistory(this->pApp, this->rootLevel));
+			webPage.AddContent(this->pInside->ServerObjectHistory(&this->pApp, this->rootLevel));
 
 			//Save File
 			webPage.SaveInFolder(dir);
@@ -69,18 +68,13 @@
 {
 	try
 	{
-		for(unsigned int i=0; i< this->pApp->references.numItems; i++)
+		const ARReferenceList& refs = this->pApp.GetReferences();
+		for(unsigned int i=0; i< refs.numItems; i++)
 		{
-			switch(this->pApp->references.referenceList[i].type)
+			switch(refs.referenceList[i].type)
 			{						
-				//case ARREF_APPLICATION_PRIMARY_FORM:
 			case ARREF_SCHEMA:
-				{
-					if(InList(this->pApp->references.referenceList[i].reference.u.name, ARREF_SCHEMA))
-					{
-						return this->pApp->references.referenceList[i].reference.u.name;
-					}
-				}
+				return refs.referenceList[i].reference.u.name;
 			}
 		}
 	}
@@ -92,15 +86,17 @@
 	return EmptyValue;
 }
 
+// TODO: check all calls to this function for code/loop optimizations
 bool CDocApplicationDetails::InList(string searchName, int nType)
 {
 	try
 	{
-		for(unsigned int i=0; i< this->pApp->references.numItems; i++)
+		const ARReferenceList& refs = this->pApp.GetReferences();
+		for(unsigned int i=0; i< refs.numItems; i++)
 		{
-			if(this->pApp->references.referenceList[i].type == nType)
+			if(refs.referenceList[i].type == nType)
 			{	
-				if(strcmp(this->pApp->references.referenceList[i].reference.u.name, searchName.c_str())==0)
+				if(searchName == refs.referenceList[i].reference.u.name)
 				{
 					return true;
 				}
@@ -242,18 +238,20 @@
 	try
 	{
 		//Update the schema informations
-		unsigned int schemaCount = pInside->schemaList.GetCount();
-		for ( unsigned int schemaIndex = 0; schemaIndex < schemaCount; ++schemaIndex )
-		{	
-			CARSchema schema(schemaIndex);
-			if(this->InList(schema.GetName(), ARREF_SCHEMA))
+		const ARReferenceList& refs = this->pApp.GetReferences();
+		for ( unsigned int refIndex = 0; refIndex < refs.numItems; ++refIndex )
+		{
+			if (refs.referenceList[refIndex].type == ARREF_SCHEMA)
 			{
-				nResult++;	
-				strmResult << schema.GetURL(this->rootLevel) << "<br/>" << endl;
-
-				schema.SetAppRefName(this->pApp->name);
-			}
-		}	
+				CARSchema schema(refs.referenceList[refIndex].reference.u.name);
+				if (schema.Exists())
+				{
+					nResult++;
+					strmResult << schema.GetURL(this->rootLevel) << "<br/>" << endl;
+					schema.SetAppRefName(this->pApp.GetName());
+				}
+			};
+		}
 	}
 	catch(exception& e)
 	{
@@ -294,7 +292,7 @@
 			{
 				nResult++;
 				strmResult << obj.GetURL(rootLevel) << "<br/>" << endl;
-				obj.SetAppRefName(this->pApp->name);
+				obj.SetAppRefName(this->pApp.GetName());
 			}
 		}		
 	}
@@ -337,7 +335,7 @@
 			{
 				nResult++;
 				strmResult << obj.GetURL(rootLevel) << "<br/>" << endl;
-				obj.SetAppRefName(this->pApp->name);
+				obj.SetAppRefName(this->pApp.GetName());
 			}
 		}
 	}
@@ -379,7 +377,7 @@
 			{
 				nResult++;
 				strmResult << escalation.GetURL(rootLevel) << "<br/>" << endl;
-				escalation.SetAppRefName(this->pApp->name);
+				escalation.SetAppRefName(this->pApp.GetName());
 			}
 		}		
 	}
@@ -401,27 +399,29 @@
 
 	try
 	{
-		list<CARContainer>::iterator objIter;				
-		for ( objIter = pInside->containerList.begin(); objIter != pInside->containerList.end(); objIter++ )
+		unsigned int cntCount = pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{	
 			bool bInsert = false;
-			CARContainer *obj = &(*objIter);	
+			CARContainer obj(cntIndex);
 
-			if(obj->type == nType)
-			{	
-				if(this->InList(obj->name, ARREF_CONTAINER))
+			if(obj.GetType() == nType)
+			{
+				// first check, if the container is contained in the application
+				if(this->InList(obj.GetName(), ARREF_CONTAINER))
 				{
 					bInsert = true;
 				}
-
-				CARContainer *obj = &(*objIter);			
-				if(obj->type == nType)
+				else
 				{
-					for(unsigned int i=0; i< obj->ownerObjList.numItems; i++)
+					// if the container is not contained in the application, check if there is a schema, that is part of the app
+					const ARContainerOwnerObjList& ownerObjList = obj.GetOwnerObjects();
+					for(unsigned int i=0; i< ownerObjList.numItems; i++)
 					{
-						if(this->InList(obj->ownerObjList.ownerObjList[i].ownerName, ARREF_SCHEMA))
+						if(this->InList(ownerObjList.ownerObjList[i].ownerName, ARREF_SCHEMA))
 						{
 							bInsert = true;
+							break;	// stop here, one is enough
 						}
 					}
 				}
@@ -429,9 +429,9 @@
 				if(bInsert)
 				{
 					nResult++;
-					strmResult << obj->GetURL(rootLevel) << "<br/>" << endl;
+					strmResult << obj.GetURL(rootLevel) << "<br/>" << endl;
 
-					obj->appRefName = this->pApp->name;
+					obj.SetAppRefName(this->pApp.GetName());
 				}
 			}
 		}	
@@ -494,7 +494,7 @@
 				nResult++;
 				strmResult << obj.GetURL(rootLevel) << "<br/>" << endl;
 
-				obj.SetAppRefName(this->pApp->name);
+				obj.SetAppRefName(this->pApp.GetName());
 			}
 		}
 	}

Modified: branches/work_jls17/doc/DocApplicationDetails.h
==============================================================================
--- branches/work_jls17/doc/DocApplicationDetails.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocApplicationDetails.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -22,13 +22,13 @@
 	public CDocBase
 {
 public:
-	CDocApplicationDetails(CARInside &arIn, CARContainer &application);
+	CDocApplicationDetails(CARContainer &application);
 	~CDocApplicationDetails(void);
 
 	void Documentation();
 
 private:
-	CARContainer *pApp;
+	CARContainer &pApp;
 
 	string GetPrimaryForm();
 	string ApplicationInformation();

Modified: branches/work_jls17/doc/DocBase.cpp
==============================================================================
--- branches/work_jls17/doc/DocBase.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocBase.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -19,6 +19,7 @@
 
 CDocBase::CDocBase(void)
 {
+	this->pInside = CARInside::GetInstance();
 }
 
 CDocBase::~CDocBase(void)

Modified: branches/work_jls17/doc/DocCharMenuDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocCharMenuDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocCharMenuDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -20,7 +20,6 @@
 CDocCharMenuDetails::CDocCharMenuDetails(unsigned int menuInsideId, int rootLevel)
 : menu(menuInsideId)
 {
-	this->pInside = CARInside::GetInstance();
 	this->path = "menu/" + menu.FileID();
 	this->rootLevel = rootLevel;
 }

Modified: branches/work_jls17/doc/DocContainerHelper.cpp
==============================================================================
--- branches/work_jls17/doc/DocContainerHelper.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocContainerHelper.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,10 +17,9 @@
 #include "stdafx.h"
 #include "DocContainerHelper.h"
 
-CDocContainerHelper::CDocContainerHelper(CARInside &arIn, CARContainer &container, int rootLevel)
+CDocContainerHelper::CDocContainerHelper(CARContainer &contObj, int rootLevel)
+: container(contObj)
 {
-	this->pInside = &arIn;
-	this->pContainer = &container;
 	this->rootLevel = rootLevel;
 }
 
@@ -40,24 +39,24 @@
 		CTableRow row("");		
 
 		//Label
-		if(this->pContainer->label != NULL)
+		if(this->container.GetLabel() != NULL)
 		{
-			row.AddCellList(CTableCell("Label"), CTableCell(this->pContainer->label));			
+			row.AddCellList(CTableCell("Label"), CTableCell(this->container.GetLabel()));
 		}
 		else
 		{
-			row.AddCellList(CTableCell("Label"), CTableCell(EmptyValue));		
+			row.AddCellList(CTableCell("Label"), CTableCell(EmptyValue));
 		}
 		tblProp.AddRow(row);
 
 		//Description
-		if(this->pContainer->description != NULL)
+		if(this->container.GetDescription() != NULL)
 		{
-			row.AddCellList(CTableCell("Description"), CTableCell(this->pContainer->description));			
+			row.AddCellList(CTableCell("Description"), CTableCell(this->container.GetDescription()));
 		}
 		else
 		{
-			row.AddCellList(CTableCell("Description"), CTableCell(EmptyValue));		
+			row.AddCellList(CTableCell("Description"), CTableCell(EmptyValue));	
 		}
 		tblProp.AddRow(row);
 
@@ -66,19 +65,19 @@
 		tblProp.AddRow(row);	
 
 		//SubAdminList
-		if(this->pContainer->type == ARCON_PACK
-			|| this->pContainer->type == ARCON_GUIDE
-			|| this->pContainer->type == ARCON_APP
+		unsigned int type = this->container.GetType();
+		if(type == ARCON_PACK
+			|| type == ARCON_GUIDE
+			|| type == ARCON_APP
 			)
 		{
-			row.AddCellList(CTableCell("Subadministrator Permissions"), CTableCell(this->SubadminList()));	
+			row.AddCellList(CTableCell("Subadministrator Permissions"), CTableCell(this->SubadminList()));
 			tblProp.AddRow(row);	
 		}
 
 
 		//Forms
-		if(this->pContainer->type == ARCON_GUIDE
-			|| this->pContainer->type == ARCON_FILTER_GUIDE)
+		if(type == ARCON_GUIDE || type == ARCON_FILTER_GUIDE)
 		{
 			row.AddCellList(CTableCell("Owner Object List"), CTableCell(this->ContainerForms()));	
 			tblProp.AddRow(row);	
@@ -102,9 +101,11 @@
 	try
 	{
 		CGroupTable *grpTbl = new CGroupTable(*this->pInside);
-		for(unsigned int i=0; i< this->pContainer->admingrpList.numItems; i++)
+
+		const ARInternalIdList& admingrpList = this->container.GetSubadmins();
+		for(unsigned int i=0; i< admingrpList.numItems; i++)
 		{			
-			grpTbl->AddRow(this->pContainer->appRefName, this->pContainer->admingrpList.internalIdList[i], this->rootLevel);
+			grpTbl->AddRow(this->container.GetAppRefName(), admingrpList.internalIdList[i], this->rootLevel);
 		}
 
 		strm << grpTbl->Print();
@@ -129,23 +130,27 @@
 		tbl.AddColumn(75, "Name");
 		tbl.AddColumn(10, "Id");
 
-		for(unsigned int i=0; i< this->pContainer->groupList.numItems; i++)
+		const ARPermissionList& groupList = this->container.GetPermissions();
+		for(unsigned int i=0; i< groupList.numItems; i++)
 		{			
 			CTableRow row("");			
-			string img = CWebUtil::ImageTag("visible.gif", rootLevel);
+			string img;
 
-			if(this->pContainer->groupList.permissionList[i].permissions == AR_PERMISSIONS_HIDDEN)
+			if(groupList.permissionList[i].permissions == AR_PERMISSIONS_HIDDEN)
 				img = CWebUtil::ImageTag("hidden.gif", rootLevel);
+			else
+				img = CWebUtil::ImageTag("visible.gif", rootLevel);
 
-			string appRefName = this->pContainer->appRefName;
-			if(strcmp(appRefName.c_str(), "")==0)
-				appRefName = this->pContainer->name;
-
+			string appRefName;
+			if(this->container.GetAppRefName().empty())
+				appRefName = this->container.GetName();
+			else
+				appRefName = this->container.GetAppRefName();
 
 			row.AddCell(CTableCell(img));
-			row.AddCell(CTableCell(CAREnum::ObjectPermission(this->pContainer->groupList.permissionList[i].permissions)));
-			row.AddCell(CTableCell(this->pInside->LinkToGroup(appRefName, this->pContainer->groupList.permissionList[i].groupId, rootLevel)));
-			row.AddCell(CTableCell(this->pContainer->groupList.permissionList[i].groupId));			
+			row.AddCell(CTableCell(CAREnum::ObjectPermission(groupList.permissionList[i].permissions)));
+			row.AddCell(CTableCell(this->pInside->LinkToGroup(appRefName, groupList.permissionList[i].groupId, rootLevel)));
+			row.AddCell(CTableCell(groupList.permissionList[i].groupId));			
 			tbl.AddRow(row);
 		}
 	}
@@ -164,11 +169,12 @@
 	tbl.AddColumn(100, "Form Name");
 
 	try
-	{	
-		for(unsigned int i=0; i< this->pContainer->ownerObjList.numItems; i++)
+	{
+		const ARContainerOwnerObjList& objList = this->container.GetOwnerObjects();
+		for(unsigned int i=0; i< objList.numItems; i++)
 		{
 			CTableRow row("");            
-			row.AddCell(CTableCell(this->pInside->LinkToSchema(this->pContainer->ownerObjList.ownerObjList[i].ownerName, rootLevel)));
+			row.AddCell(CTableCell(this->pInside->LinkToSchema(objList.ownerObjList[i].ownerName, rootLevel)));
 			tbl.AddRow(row);
 		}
 	}

Modified: branches/work_jls17/doc/DocContainerHelper.h
==============================================================================
--- branches/work_jls17/doc/DocContainerHelper.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocContainerHelper.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -23,12 +23,12 @@
 	public CDocBase
 {
 public:
-	CDocContainerHelper(CARInside &arIn, CARContainer &container, int rootLevel);
+	CDocContainerHelper(CARContainer &contObj, int rootLevel);
 	~CDocContainerHelper(void);
 
 	string BaseInfo();
 private:
-	CARContainer *pContainer;
+	CARContainer &container;
 	int rootLevel;
 
 	string PermissionList();	

Modified: branches/work_jls17/doc/DocEscalationDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocEscalationDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocEscalationDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -161,21 +161,22 @@
 	{
 		CContainerTable *contTable = new CContainerTable(*this->pInside);
 
-		list<CARContainer>::iterator listContIter;		
-		CARContainer *cont;
-		for ( listContIter = this->pInside->containerList.begin();  listContIter != this->pInside->containerList.end(); listContIter++ )
+		unsigned int cntCount = this->pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{
-			cont = &(*listContIter);
-			for(unsigned int nCnt = 0; nCnt < cont->references.numItems; nCnt++)
+			CARContainer cont(cntIndex);
+			
+			if(cont.GetType() != ARCON_APP)
 			{
-				if(cont->type != ARCON_APP)
+				const ARReferenceList& refs = cont.GetReferences();
+				for(unsigned int nCnt = 0; nCnt < refs.numItems; nCnt++)
 				{
-					if(cont->references.referenceList[nCnt].reference.u.name != NULL)
+					if(refs.referenceList[nCnt].type == ARREF_ESCALATION)
 					{
-						if(this->escalation.GetName().compare(cont->references.referenceList[nCnt].reference.u.name)==0
-							&& cont->references.referenceList[nCnt].type == ARREF_ESCALATION)
+						if(refs.referenceList[nCnt].reference.u.name != NULL && 
+							 this->escalation.GetName() == refs.referenceList[nCnt].reference.u.name)
 						{
-							contTable->AddRow(*cont, rootLevel);
+							contTable->AddRow(cont, rootLevel);
 						}
 					}
 				}

Modified: branches/work_jls17/doc/DocFieldDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocFieldDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocFieldDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -21,7 +21,6 @@
 CDocFieldDetails::CDocFieldDetails(unsigned int SchemaInsideId, const CARField& fieldObj, int rootLevel)
 : schema(SchemaInsideId), field(fieldObj)
 {
-	this->pInside = CARInside::GetInstance();
 	this->path = "schema/" + schema.FileID();
 	this->rootLevel = rootLevel;
 }

Modified: branches/work_jls17/doc/DocFilterDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocFilterDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocFilterDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -20,7 +20,6 @@
 CDocFilterDetails::CDocFilterDetails(unsigned int filterInsideId, int rootLevel)
 : filter(filterInsideId)
 {	
-	this->pInside = CARInside::GetInstance();
 	this->path = "filter/" + filter.FileID();
 	this->rootLevel = rootLevel;
 }
@@ -142,21 +141,22 @@
 	{
 		CContainerTable contTable(*this->pInside);
 
-		list<CARContainer>::iterator listContIter = this->pInside->containerList.begin();		
-		list<CARContainer>::iterator listContEnd = this->pInside->containerList.end();
-		for ( ; listContIter != listContEnd; ++listContIter )
+		unsigned int cntCount = this->pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{
-			CARContainer *cont = &(*listContIter);
-			for(unsigned int nCnt = 0; nCnt < cont->references.numItems; nCnt++)
+			CARContainer cont(cntIndex);
+			
+			if(cont.GetType() != ARCON_APP)
 			{
-				if(cont->type != ARCON_APP)
+				const ARReferenceList& refs = cont.GetReferences();
+				for(unsigned int nCnt = 0; nCnt < refs.numItems; nCnt++)
 				{
-					if(cont->references.referenceList[nCnt].reference.u.name[0] != 0)
+					if(refs.referenceList[nCnt].type == ARREF_FILTER)
 					{
-						if(strcmp(cont->references.referenceList[nCnt].reference.u.name, filter.GetName().c_str())==0
-							&& cont->references.referenceList[nCnt].type == ARREF_FILTER)
+						if(refs.referenceList[nCnt].reference.u.name != NULL && 
+							 refs.referenceList[nCnt].reference.u.name == filter.GetName())
 						{
-							contTable.AddRow(*cont, rootLevel);
+							contTable.AddRow(cont, rootLevel);
 						}
 					}
 				}

Modified: branches/work_jls17/doc/DocFilterGuideDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocFilterGuideDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocFilterGuideDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,9 +17,8 @@
 #include "stdafx.h"
 #include "DocFilterGuideDetails.h"
 
-CDocFilterGuideDetails::CDocFilterGuideDetails(CARInside &arIn, CARContainer &filterGuide)
+CDocFilterGuideDetails::CDocFilterGuideDetails(CARContainer &filterGuide)
 {
-	this->pInside = &arIn;
 	this->pFilterGuide = &filterGuide;
 	this->rootLevel = 2;
 }
@@ -37,20 +36,20 @@
 		CWindowsUtil winUtil(this->pInside->appConfig);
 		if(winUtil.CreateSubDirectory(dir)>=0)
 		{
-			CWebPage webPage("index", pFilterGuide->name, rootLevel, this->pInside->appConfig);
+			CWebPage webPage("index", pFilterGuide->GetName(), rootLevel, this->pInside->appConfig);
 
 			//ContentHead informations
 			stringstream strmHead;
 			strmHead.str("");
 
-			strmHead << CWebUtil::LinkToFilterGuideIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->pFilterGuide->name);
-			if(this->pFilterGuide->appRefName.c_str() != NULL && this->pFilterGuide->appRefName.size() > 0)
-				strmHead << MenuSeparator << " Application " << this->pInside->LinkToContainer(this->pFilterGuide->appRefName, this->rootLevel);
+			strmHead << CWebUtil::LinkToFilterGuideIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->pFilterGuide->GetName());
+			if(!this->pFilterGuide->GetAppRefName().empty())
+				strmHead << MenuSeparator << " Application " << this->pInside->LinkToContainer(this->pFilterGuide->GetAppRefName(), this->rootLevel);
 
 			webPage.AddContentHead(strmHead.str());
 
 			//Container Base Informations
-			CDocContainerHelper *contHelper = new CDocContainerHelper(*this->pInside, *this->pFilterGuide, this->rootLevel);
+			CDocContainerHelper *contHelper = new CDocContainerHelper(*this->pFilterGuide, this->rootLevel);
 			webPage.AddContent(contHelper->BaseInfo());
 			delete contHelper;
 
@@ -80,22 +79,23 @@
 
 	try
 	{
-		for(unsigned int i=0; i< pFilterGuide->references.numItems; i++)
+		const ARReferenceList& refs = pFilterGuide->GetReferences();
+		for(unsigned int i=0; i< refs.numItems; i++)
 		{
 			stringstream label, filter;
 			label.str("");
 			filter.str("");
 
-			switch(pFilterGuide->references.referenceList[i].type)
+			switch(refs.referenceList[i].type)
 			{
 			case ARREF_FILTER:
 				{
-					filter << pInside->LinkToFilter(pFilterGuide->references.referenceList[i].reference.u.name, rootLevel);
+					filter << pInside->LinkToFilter(refs.referenceList[i].reference.u.name, rootLevel);
 				}
 				break;
 			case ARREF_NULL_STRING:
 				{
-					label << pFilterGuide->references.referenceList[i].label;
+					label << refs.referenceList[i].label;
 				}
 				break;			
 			}
@@ -139,7 +139,7 @@
 				const ARFilterActionStruct& action = IfActions.actionList[nAction];
 				if(action.action == AR_FILTER_ACTION_CALLGUIDE)
 				{
-					if(strcmp(action.u.callGuide.guideName, pFilterGuide->name.c_str())==0)
+					if(strcmp(action.u.callGuide.guideName, pFilterGuide->GetName().c_str())==0)
 					{
 						stringstream tmp;
 						tmp << "If-Action " << nAction;
@@ -161,7 +161,7 @@
 				ARFilterActionStruct action = ElseActions.actionList[nAction];
 				if(action.action == AR_FILTER_ACTION_CALLGUIDE)
 				{
-					if(strcmp(action.u.callGuide.guideName, pFilterGuide->name.c_str())==0)
+					if(strcmp(action.u.callGuide.guideName, pFilterGuide->GetName().c_str())==0)
 					{
 						stringstream tmp;
 						tmp << "Else-Action " << nAction;

Modified: branches/work_jls17/doc/DocFilterGuideDetails.h
==============================================================================
--- branches/work_jls17/doc/DocFilterGuideDetails.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocFilterGuideDetails.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -22,7 +22,7 @@
 	public CDocBase
 {
 public:
-	CDocFilterGuideDetails(CARInside &arIn, CARContainer &filterGuide);
+	CDocFilterGuideDetails(CARContainer &filterGuide);
 	~CDocFilterGuideDetails(void);
 
 	void Documentation();

Modified: branches/work_jls17/doc/DocGroupDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocGroupDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocGroupDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,9 +17,8 @@
 #include "stdafx.h"
 #include "DocGroupDetails.h"
 
-CDocGroupDetails::CDocGroupDetails(CARInside &arIn, CARGroup &arGroup)
+CDocGroupDetails::CDocGroupDetails(CARGroup &arGroup)
 {
-	this->pInside = &arIn;
 	this->pGroup = &arGroup;
 	this->rootLevel = 1;
 }
@@ -437,55 +436,55 @@
 
 		//Create table with forms the role can access
 		CContainerTable *contTbl = new CContainerTable(*this->pInside);
+		CContainerTable *subadminTbl = (containerType == ARCON_PACK ? new CContainerTable(*this->pInside) : NULL);
+
 		contTbl->SetDescription("Container Permission");
 
-		list<CARContainer>::iterator contIter;		
-		for ( contIter = this->pInside->containerList.begin(); contIter != this->pInside->containerList.end(); contIter++ )
+		unsigned int cntCount = this->pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{	
-			CARContainer *cont = &(*contIter);
-			if(cont->type == containerType)
+			CARContainer cont(cntIndex);
+			if(cont.GetType() == containerType)
 			{
-				for(unsigned int nGrp = 0; nGrp < cont->groupList.numItems; nGrp++)
+				const ARPermissionList& groupList = cont.GetPermissions();
+				for(unsigned int nGrp = 0; nGrp < groupList.numItems; nGrp++)
 				{
-					if(this->pGroup->groupId == cont->groupList.permissionList[nGrp].groupId)
+					if(this->pGroup->groupId == groupList.permissionList[nGrp].groupId)
 					{
-						contTbl->AddRow(*cont, this->rootLevel);						
+						contTbl->AddRow(cont, this->rootLevel);
 						nResult++;
 					}
 				}
 			}
-		}
-
-
-		webPage.AddContent(contTbl->Print());
-		delete contTbl;
-
 
-		if(containerType == ARCON_PACK)
-		{						
-			//Create table with forms for role subadmin permission
-			CContainerTable *subadminTbl = new CContainerTable(*this->pInside);
-			subadminTbl->SetDescription("Subadministrator Permission");		
-
-			list<CARContainer>::iterator contIter;		
-			for ( contIter = this->pInside->containerList.begin(); contIter != this->pInside->containerList.end(); contIter++ )
-			{	
-				CARContainer *cont = &(*contIter);
-				for(unsigned int nGrp = 0; nGrp < cont->admingrpList.numItems; nGrp++)
+			if(containerType == ARCON_PACK)
+			{
+				//Create table with forms for role subadmin permission
+				subadminTbl->SetDescription("Subadministrator Permission");
+				
+				const ARInternalIdList& admingrpList = cont.GetSubadmins();
+				for(unsigned int nGrp = 0; nGrp < admingrpList.numItems; nGrp++)
 				{
-					if(this->pGroup->groupId == cont->admingrpList.internalIdList[nGrp])
+					if(this->pGroup->groupId == admingrpList.internalIdList[nGrp])
 					{
-						subadminTbl->AddRow(*cont, this->rootLevel);						
+						subadminTbl->AddRow(cont, this->rootLevel);
 						nResult++;
 					}
 				}
+
 			}
+		}
 
+
+		webPage.AddContent(contTbl->Print());
+		delete contTbl;
+
+		if (subadminTbl != NULL)
+		{
 			webPage.AddContent(subadminTbl->Print());
 			delete subadminTbl;
 		}
 
-
 		webPage.SaveInFolder("group");
 	}
 	catch(exception& e)

Modified: branches/work_jls17/doc/DocGroupDetails.h
==============================================================================
--- branches/work_jls17/doc/DocGroupDetails.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocGroupDetails.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -23,7 +23,7 @@
 	public CDocBase
 {
 public:
-	CDocGroupDetails(CARInside &arIn, CARGroup &arGroup);
+	CDocGroupDetails(CARGroup &arGroup);
 	~CDocGroupDetails(void);
 
 	void Documentation();

Modified: branches/work_jls17/doc/DocImageDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocImageDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocImageDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -25,7 +25,6 @@
 CDocImageDetails::CDocImageDetails(int imageIndex, int rootLevel)
 {
 	this->path = "image/" + CARObject::FileID(imageIndex);
-	this->pInside = CARInside::GetInstance();
 	this->imageIndex = imageIndex;
 	this->rootLevel = rootLevel;
 }

Modified: branches/work_jls17/doc/DocMain.cpp
==============================================================================
--- branches/work_jls17/doc/DocMain.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocMain.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,9 +17,8 @@
 #include "stdafx.h"
 #include "DocMain.h"
 
-CDocMain::CDocMain(CARInside &arIn)
+CDocMain::CDocMain()
 {
-	this->pInside = &arIn;
 }
 
 CDocMain::~CDocMain(void)
@@ -734,37 +733,37 @@
 
 		CContainerTable *tbl = new CContainerTable(*this->pInside);
 
-		list<CARContainer>::iterator contIter;		
-		for ( contIter = this->pInside->containerList.begin(); contIter != this->pInside->containerList.end(); contIter++ )
+		unsigned int cntCount = this->pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{	
-			CARContainer *cont = &(*contIter);
+			CARContainer cont(cntIndex);
 
-			bool bInsert = false;
-			if(searchChar == "*")  //All objecte
+			if (cont.GetType() == nType)	// the type must match
 			{
-				if(nType == cont->type)  //Only check type
+				bool bInsert = false;
+				if(searchChar == "*")  //All objecte
 				{
 					bInsert = true;
 				}
-			}
-			else if(searchChar != "#" && searchChar != "*")
-			{
-				if(nType == cont->type && cont->GetNameFirstChar() == searchChar)
+				else if(searchChar == "#")
 				{
-					bInsert = true;
+					if(!cont.NameStandardFirstChar())
+					{
+						bInsert = true;
+					}
 				}
-			}
-			else if(searchChar == "#")
-			{
-				if(nType == cont->type && !cont->NameStandardFirstChar())
+				else
 				{
-					bInsert = true;		
+					if(cont.GetNameFirstChar() == searchChar)
+					{
+						bInsert = true;
+					}
 				}
-			}
 
-			if(bInsert)
-			{
-				tbl->AddRow(*cont, rootLevel);
+				if(bInsert)
+				{
+					tbl->AddRow(cont, rootLevel);
+				}
 			}
 		}
 

Modified: branches/work_jls17/doc/DocMain.h
==============================================================================
--- branches/work_jls17/doc/DocMain.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocMain.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -36,7 +36,7 @@
 	public CDocBase
 {
 public:
-	CDocMain(CARInside &arIn);
+	CDocMain();
 	~CDocMain(void);
 
 	int Index();

Modified: branches/work_jls17/doc/DocPacklistDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocPacklistDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocPacklistDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,10 +17,9 @@
 #include "stdafx.h"
 #include "DocPacklistDetails.h"
 
-CDocPacklistDetails::CDocPacklistDetails(CARInside &arIn, CARContainer &packList)
+CDocPacklistDetails::CDocPacklistDetails(CARContainer &packList)
+: pPackList(packList)
 {
-	this->pInside = &arIn;
-	this->pPackList = &packList;
 	this->rootLevel = 2;
 }
 
@@ -32,25 +31,25 @@
 {
 	try
 	{
-		string dir = CAREnum::ContainerDir(ARCON_PACK)+"/"+this->pPackList->FileID();
+		string dir = CAREnum::ContainerDir(ARCON_PACK)+"/"+this->pPackList.FileID();
 
 		CWindowsUtil winUtil(this->pInside->appConfig);
 		if(winUtil.CreateSubDirectory(dir)>=0)
 		{
-			CWebPage webPage("index", this->pPackList->name, this->rootLevel, this->pInside->appConfig);
+			CWebPage webPage("index", this->pPackList.GetName(), this->rootLevel, this->pInside->appConfig);
 
 			//ContentHead informations
 			stringstream strmHead;
 			strmHead.str("");
 
-			strmHead << CWebUtil::LinkToPackingListIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->pPackList->name);
-			if(this->pPackList->appRefName.c_str() != NULL && this->pPackList->appRefName.size() > 0)
-				strmHead << MenuSeparator << " Application " << this->pInside->LinkToContainer(this->pPackList->appRefName, this->rootLevel);
+			strmHead << CWebUtil::LinkToPackingListIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->pPackList.GetName());
+			if(!this->pPackList.GetAppRefName().empty())
+				strmHead << MenuSeparator << " Application " << this->pInside->LinkToContainer(this->pPackList.GetAppRefName(), this->rootLevel);
 
 			webPage.AddContentHead(strmHead.str());
 
 			//Container Base Informations
-			CDocContainerHelper *contHelper = new CDocContainerHelper(*this->pInside, *this->pPackList, this->rootLevel);
+			CDocContainerHelper *contHelper = new CDocContainerHelper(this->pPackList, this->rootLevel);
 			webPage.AddContent(contHelper->BaseInfo());
 			delete contHelper;
 
@@ -58,7 +57,7 @@
 			webPage.AddContent(PackListInformation());
 
 			//History
-			webPage.AddContent(this->pInside->ServerObjectHistory(this->pPackList, this->rootLevel));
+			webPage.AddContent(this->pInside->ServerObjectHistory(&this->pPackList, this->rootLevel));
 
 			//Save File
 			webPage.SaveInFolder(dir);
@@ -79,69 +78,62 @@
 
 	try
 	{
-		for(unsigned int i=0; i< this->pPackList->references.numItems; i++)
+		const ARReferenceList& refs = this->pPackList.GetReferences();
+		for(unsigned int i=0; i< refs.numItems; i++)
 		{			
 			stringstream srvType, srvObj;
 			srvType.str("");
 			srvObj.str("");
 
-			switch(this->pPackList->references.referenceList[i].type)
+			switch(refs.referenceList[i].type)
 			{							
-				if(this->pPackList->references.referenceList[i].reference.u.name != NULL
-					&& strcmp(this->pPackList->references.referenceList[i].reference.u.name, "")!=0)
+				if(refs.referenceList[i].reference.u.name != NULL && refs.referenceList[i].reference.u.name[0] != 0)
 				{
 			case ARREF_SCHEMA:
 				{
-					srvType << CAREnum::ContainerRefType(this->pPackList->references.referenceList[i].type);
-					srvObj << this->pInside->LinkToSchema(this->pPackList->references.referenceList[i].reference.u.name, rootLevel);
+					srvType << CAREnum::ContainerRefType(refs.referenceList[i].type);
+					srvObj << this->pInside->LinkToSchema(refs.referenceList[i].reference.u.name, rootLevel);
 				}
 				break;
 			case ARREF_FILTER:
 				{
-					srvType << CAREnum::ContainerRefType(this->pPackList->references.referenceList[i].type);
-					srvObj << this->pInside->LinkToFilter(this->pPackList->references.referenceList[i].reference.u.name, rootLevel);
+					srvType << CAREnum::ContainerRefType(refs.referenceList[i].type);
+					srvObj << this->pInside->LinkToFilter(refs.referenceList[i].reference.u.name, rootLevel);
 				}
 				break;
 			case ARREF_ESCALATION:
 				{
-					srvType << CAREnum::ContainerRefType(this->pPackList->references.referenceList[i].type);
-					srvObj << this->pInside->LinkToEscalation(this->pPackList->references.referenceList[i].reference.u.name, rootLevel);
+					srvType << CAREnum::ContainerRefType(refs.referenceList[i].type);
+					srvObj << this->pInside->LinkToEscalation(refs.referenceList[i].reference.u.name, rootLevel);
 				}
 				break;
 			case ARREF_ACTLINK:
 				{
-					srvType << CAREnum::ContainerRefType(this->pPackList->references.referenceList[i].type);
-					srvObj << this->pInside->LinkToAl(this->pPackList->references.referenceList[i].reference.u.name, rootLevel);
+					srvType << CAREnum::ContainerRefType(refs.referenceList[i].type);
+					srvObj << this->pInside->LinkToAl(refs.referenceList[i].reference.u.name, rootLevel);
 				}
 				break;
 			case ARREF_CONTAINER:
 				{
 					bool found = false;
-					list<CARContainer>::iterator contIter;
-					for ( contIter = pInside->containerList.begin(); contIter != pInside->containerList.end() && found == false; contIter++ )
-					{	
-						CARContainer *container = &(*contIter);
-						if(strcmp(this->pPackList->references.referenceList[i].reference.u.name, container->name.c_str())==0)
-						{
-							srvType << CAREnum::ContainerType(container->type);
-							found = true;
-						}
-					}
-					if (!found)
-						srvType << CAREnum::ContainerRefType(this->pPackList->references.referenceList[i].type);
-					
-					srvObj << this->pInside->LinkToContainer(this->pPackList->references.referenceList[i].reference.u.name, rootLevel);
+					CARContainer container(refs.referenceList[i].reference.u.name);
+					if (container.Exists())
+						srvType << CAREnum::ContainerType(container.GetType());
+					else
+						srvType << CAREnum::ContainerRefType(refs.referenceList[i].type);
+				
+					srvObj << this->pInside->LinkToContainer(refs.referenceList[i].reference.u.name, rootLevel);
 				}
 				break;
 			case ARREF_CHAR_MENU:
 				{
 					bool menuFound = false;
-					srvType << CAREnum::ContainerRefType(this->pPackList->references.referenceList[i].type);
-					srvObj << this->pInside->LinkToMenu(this->pPackList->references.referenceList[i].reference.u.name, rootLevel, &menuFound);
+					srvType << CAREnum::ContainerRefType(refs.referenceList[i].type);
+					srvObj << this->pInside->LinkToMenu(refs.referenceList[i].reference.u.name, rootLevel, &menuFound);
 
 					if (!menuFound)
 					{
-						CMissingMenuRefItem refItemNotFound(this->pPackList->references.referenceList[i].reference.u.name, AR_STRUCT_ITEM_XML_CONTAINER, this->pPackList->name);
+						CMissingMenuRefItem refItemNotFound(refs.referenceList[i].reference.u.name, AR_STRUCT_ITEM_XML_CONTAINER, this->pPackList.GetName());
 						pInside->AddMissingMenu(refItemNotFound);
 					}
 				}
@@ -149,17 +141,17 @@
 #if AR_CURRENT_API_VERSION >= AR_API_VERSION_750
 			case ARREF_IMAGE:
 				{
-					srvType << CAREnum::ContainerRefType(this->pPackList->references.referenceList[i].type);
+					srvType << CAREnum::ContainerRefType(refs.referenceList[i].type);
 
-					int imageIndex = pInside->imageList.FindImage(this->pPackList->references.referenceList[i].reference.u.name);
+					int imageIndex = pInside->imageList.FindImage(refs.referenceList[i].reference.u.name);
 					if (imageIndex < 0)
-						srvObj << this->pInside->LinkToImage(this->pPackList->references.referenceList[i].reference.u.name, rootLevel);
+						srvObj << this->pInside->LinkToImage(refs.referenceList[i].reference.u.name, rootLevel);
 					else
 						srvObj << this->pInside->LinkToImage(imageIndex, rootLevel);
 
 					if (imageIndex >= 0)
 					{
-						CImageRefItem refItem(imageIndex, "Contained in packing list", pPackList);
+						CImageRefItem refItem(imageIndex, "Contained in packing list", &pPackList);
 						pInside->imageList.AddReference(refItem);
 					}
 				}

Modified: branches/work_jls17/doc/DocPacklistDetails.h
==============================================================================
--- branches/work_jls17/doc/DocPacklistDetails.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocPacklistDetails.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -22,12 +22,12 @@
 	public CDocBase
 {
 public:
-	CDocPacklistDetails(CARInside &arIn, CARContainer &packList);
+	CDocPacklistDetails(CARContainer &packList);
 	~CDocPacklistDetails(void);
 
 	void Documentation();
 
 private:
-	CARContainer *pPackList;
+	CARContainer& pPackList;
 	string PackListInformation();
 };

Modified: branches/work_jls17/doc/DocRoleDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocRoleDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocRoleDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,9 +17,8 @@
 #include "stdafx.h"
 #include "DocRoleDetails.h"
 
-CDocRoleDetails::CDocRoleDetails(CARInside &arIn, CARRole &arRole)
+CDocRoleDetails::CDocRoleDetails(CARRole &arRole)
 {
-	this->pInside = &arIn;
 	this->pRole = &arRole;
 	this->rootLevel = 1;
 }
@@ -335,19 +334,20 @@
 		CContainerTable *contTbl = new CContainerTable(*this->pInside);
 		contTbl->SetDescription("Container Permission");
 
-		list<CARContainer>::iterator contIter;		
-		for ( contIter = this->pInside->containerList.begin(); contIter != this->pInside->containerList.end(); contIter++ )
+		unsigned int cntCount = this->pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{	
-			CARContainer *cont = &(*contIter);
-			if(cont->type == containerType)
+			CARContainer cont(cntIndex);
+			if(cont.GetType() == containerType)
 			{
-				if(strcmp(cont->appRefName.c_str(), this->pRole->applicationName.c_str())==0)
+				if(cont.GetAppRefName() == this->pRole->applicationName)
 				{
-					for(unsigned int nGrp = 0; nGrp < cont->groupList.numItems; nGrp++)
+					const ARPermissionList& groupList = cont.GetPermissions();
+					for(unsigned int nGrp = 0; nGrp < groupList.numItems; nGrp++)
 					{
-						if(this->pRole->roleId == cont->groupList.permissionList[nGrp].groupId)
+						if(this->pRole->roleId == groupList.permissionList[nGrp].groupId)
 						{
-							contTbl->AddRow(*cont, this->rootLevel);						
+							contTbl->AddRow(cont, this->rootLevel);
 							nResult++;
 						}
 					}
@@ -366,17 +366,18 @@
 			CContainerTable *subadminTbl = new CContainerTable(*this->pInside);
 			subadminTbl->SetDescription("Subadministrator Permission");		
 
-			list<CARContainer>::iterator contIter;		
-			for ( contIter = this->pInside->containerList.begin(); contIter != this->pInside->containerList.end(); contIter++ )
+			unsigned int cntCount = this->pInside->containerList.GetCount();
+			for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 			{	
-				CARContainer *cont = &(*contIter);
-				if(strcmp(cont->appRefName.c_str(), this->pRole->applicationName.c_str())==0)
+				CARContainer cont(cntIndex);
+				if(cont.GetAppRefName() == this->pRole->applicationName)
 				{
-					for(unsigned int nGrp = 0; nGrp < cont->admingrpList.numItems; nGrp++)
+					const ARInternalIdList& admingrpList = cont.GetSubadmins();
+					for(unsigned int nGrp = 0; nGrp < admingrpList.numItems; nGrp++)
 					{
-						if(this->pRole->roleId == cont->admingrpList.internalIdList[nGrp])
+						if(this->pRole->roleId == admingrpList.internalIdList[nGrp])
 						{
-							subadminTbl->AddRow(*cont, this->rootLevel);						
+							subadminTbl->AddRow(cont, this->rootLevel);
 							nResult++;
 						}
 					}

Modified: branches/work_jls17/doc/DocRoleDetails.h
==============================================================================
--- branches/work_jls17/doc/DocRoleDetails.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocRoleDetails.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -23,7 +23,7 @@
 	public CDocBase
 {
 public:
-	CDocRoleDetails(CARInside &arIn, CARRole &arRole);
+	CDocRoleDetails(CARRole &arRole);
 	~CDocRoleDetails(void);
 
 	void Documentation();

Modified: branches/work_jls17/doc/DocSchemaDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocSchemaDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocSchemaDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -24,7 +24,6 @@
 CDocSchemaDetails::CDocSchemaDetails(unsigned int schemaInsideId, int rootLevel)
 : schema(schemaInsideId)
 {
-	this->pInside = CARInside::GetInstance();
 	this->path = "schema/" + schema.FileID();
 	this->rootLevel = rootLevel;
 
@@ -1291,20 +1290,22 @@
 		string schemaName = schema.GetName();
 		CContainerTable *contTable = new CContainerTable(*this->pInside);
 
-		list<CARContainer>::iterator listContIter;		
-		for ( listContIter = this->pInside->containerList.begin();  listContIter != this->pInside->containerList.end(); listContIter++ )
+		unsigned int cntCount = this->pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{
-			CARContainer *cont = &(*listContIter);
-			for(unsigned int nCnt = 0; nCnt < cont->references.numItems; nCnt++)
+			CARContainer cont(cntIndex);
+
+			if (cont.GetType() != ARCON_APP)
 			{
-				if(cont->type != ARCON_APP)
+				const ARReferenceList& refs = cont.GetReferences();
+				for(unsigned int nCnt = 0; nCnt < refs.numItems; nCnt++)
 				{
-					if(cont->references.referenceList[nCnt].reference.u.name != NULL)
+					if(refs.referenceList[nCnt].reference.u.name != NULL)
 					{
-						if(schemaName == cont->references.referenceList[nCnt].reference.u.name &&
-						   cont->references.referenceList[nCnt].type == ARREF_SCHEMA)
+						if(refs.referenceList[nCnt].type == ARREF_SCHEMA &&
+						   schemaName == refs.referenceList[nCnt].reference.u.name)
 						{
-							contTable->AddRow(*cont, rootLevel);
+							contTable->AddRow(cont, rootLevel);
 						}
 					}
 				}

Modified: branches/work_jls17/doc/DocSummaryInfo.cpp
==============================================================================
--- branches/work_jls17/doc/DocSummaryInfo.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocSummaryInfo.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -21,7 +21,6 @@
 
 CDocSummaryInfo::CDocSummaryInfo(CARInside &arIn, string path)
 {
-	this->pInside = &arIn;
 	this->path = path;
 	this->rootLevel = 0;
 }
@@ -57,11 +56,13 @@
 		unsigned int nFilterGuide = 0;
 		unsigned int nPacklist = 0;
 		unsigned int nApplication = 0;
-		list<CARContainer>::iterator contIter;
-		for ( contIter = this->pInside->containerList.begin(); contIter != this->pInside->containerList.end(); contIter++ )
+
+		unsigned int cntCount = this->pInside->containerList.GetCount();
+		for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 		{
-			CARContainer *cont = &(*contIter);
-			switch(cont->type)
+			CARContainer cont(cntIndex);
+
+			switch(cont.GetType())
 			{
 			case ARCON_WEBSERVICE:
 				{
@@ -162,7 +163,7 @@
 #endif
 
 		unsigned int nNumTotalObjects = (unsigned int)this->pInside->alList.GetCount();
-		nNumTotalObjects += (unsigned int)this->pInside->containerList.size();
+		nNumTotalObjects += (unsigned int)this->pInside->containerList.GetCount();
 		nNumTotalObjects += (unsigned int)this->pInside->escalationList.GetCount();
 		nNumTotalObjects += (unsigned int)this->pInside->filterList.GetCount();
 		nNumTotalObjects += (unsigned int)this->pInside->groupList.size();

Modified: branches/work_jls17/doc/DocUserDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocUserDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocUserDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,9 +17,8 @@
 #include "stdafx.h"
 #include "DocUserDetails.h"
 
-CDocUserDetails::CDocUserDetails(CARInside &arIn, CARUser &arUser)
+CDocUserDetails::CDocUserDetails(CARUser &arUser)
 {
-	this->pInside = &arIn;
 	this->pUser = &arUser;
 	this->rootLevel = 1;
 }

Modified: branches/work_jls17/doc/DocUserDetails.h
==============================================================================
--- branches/work_jls17/doc/DocUserDetails.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocUserDetails.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -21,7 +21,7 @@
 	public CDocBase
 {
 public:
-	CDocUserDetails(CARInside &arIn, CARUser &arUser);
+	CDocUserDetails(CARUser &arUser);
 	~CDocUserDetails(void);
 
 	void Documentation();

Modified: branches/work_jls17/doc/DocValidator.cpp
==============================================================================
--- branches/work_jls17/doc/DocValidator.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocValidator.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,9 +17,8 @@
 #include "stdafx.h"
 #include "DocValidator.h"
 
-CDocValidator::CDocValidator(CARInside &arIn, string path)
+CDocValidator::CDocValidator(string path)
 {
-	this->pInside = &arIn;
 	this->path = path;
 	this->rootLevel = 1;
 	uniqueMissingFieldList.clear();
@@ -114,22 +113,20 @@
 			tblObj.AddColumn(10, "Type");
 			tblObj.AddColumn(90, "Container");
 
-			list<CARContainer>::iterator contIter;		
-			for ( contIter = this->pInside->containerList.begin(); contIter != this->pInside->containerList.end(); contIter++ )
+			unsigned int cntCount = this->pInside->containerList.GetCount();
+			for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
 			{			
-				CARContainer *cont = &(*contIter);
+				CARContainer cont(cntIndex);
 
-				if(cont->type == ARCON_WEBSERVICE
-					|| cont->type == ARCON_GUIDE
-					|| cont->type == ARCON_APP)
+				unsigned int type = cont.GetType();
+				if(type == ARCON_WEBSERVICE || type == ARCON_GUIDE || type == ARCON_APP)
 				{
-					if(cont->groupList.permissionList == NULL		//Check if the container has no access group
-						|| cont->groupList.numItems == 0 )
+					if(cont.GetPermissions().numItems == 0)		//Check if the container has no access group
 					{
 						//Container has no access group
 						CTableRow row("");	
-						row.AddCell(CAREnum::ContainerType(cont->type));
-						row.AddCell(pInside->LinkToContainer(cont->name, this->rootLevel));
+						row.AddCell(CAREnum::ContainerType(type));
+						row.AddCell(pInside->LinkToContainer(cont.GetName(), this->rootLevel));
 						tblObj.AddRow(row);
 					}
 				}

Modified: branches/work_jls17/doc/DocValidator.h
==============================================================================
--- branches/work_jls17/doc/DocValidator.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocValidator.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -21,7 +21,7 @@
 	public CDocBase
 {
 public:
-	CDocValidator(CARInside &arIn, string path);
+	CDocValidator(string path);
 	~CDocValidator(void);
 
 	void Main();

Modified: branches/work_jls17/doc/DocVuiDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocVuiDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocVuiDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -21,7 +21,6 @@
 CDocVuiDetails::CDocVuiDetails(unsigned int SchemaInsideId, const CARVui& vuiObj, int rootLevel)
 : schema(SchemaInsideId), vui(vuiObj)
 {
-	this->pInside = CARInside::GetInstance();
 	this->path = "schema/" + schema.FileID();;
 	this->rootLevel = rootLevel;
 }

Modified: branches/work_jls17/doc/DocWebserviceDetails.cpp
==============================================================================
--- branches/work_jls17/doc/DocWebserviceDetails.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocWebserviceDetails.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -17,10 +17,9 @@
 #include "stdafx.h"
 #include "DocWebserviceDetails.h"
 
-CDocWebserviceDetails::CDocWebserviceDetails(CARInside &arIn, CARContainer &obj)
+CDocWebserviceDetails::CDocWebserviceDetails(CARContainer &obj)
+: ws(obj)
 {
-	this->pInside = &arIn;
-	this->pWs = &obj;
 	this->rootLevel = 2;
 }
 
@@ -32,18 +31,18 @@
 {
 	try
 	{
-		string dir = CAREnum::ContainerDir(ARCON_WEBSERVICE)+"/"+pWs->FileID();
+		string dir = CAREnum::ContainerDir(ARCON_WEBSERVICE)+"/" + ws.FileID();
 
 		CWindowsUtil winUtil(this->pInside->appConfig);
 		if(winUtil.CreateSubDirectory(dir)>=0)
 		{
-			CWebPage webPage("index", pWs->name, rootLevel, pInside->appConfig);
+			CWebPage webPage("index", ws.GetName(), rootLevel, pInside->appConfig);
 
 			//ContentHead informations
-			webPage.AddContentHead(CWebUtil::LinkToWebServiceIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->pWs->name) + " (Common Properties)");
+			webPage.AddContentHead(CWebUtil::LinkToWebServiceIndex(this->rootLevel) + MenuSeparator + CWebUtil::ObjName(this->ws.GetName()) + " (Common Properties)");
 
 			//Container Base Informations
-			CDocContainerHelper *contHelper = new CDocContainerHelper(*this->pInside, *this->pWs, this->rootLevel);
+			CDocContainerHelper *contHelper = new CDocContainerHelper(this->ws, this->rootLevel);
 			webPage.AddContent(contHelper->BaseInfo());
 			delete contHelper;
 
@@ -51,7 +50,7 @@
 			webPage.AddContent(WSInformation());
 
 			//History
-			webPage.AddContent(this->pInside->ServerObjectHistory(this->pWs, this->rootLevel));
+			webPage.AddContent(this->pInside->ServerObjectHistory(&this->ws, this->rootLevel));
 
 			//Save File
 			webPage.SaveInFolder(dir);
@@ -73,10 +72,10 @@
 	//Label
 	try
 	{
-		if(pWs->label != NULL)
+		if(ws.GetLabel() != NULL)
 		{
 			CTableCell cellWsDesc("Label", "");
-			CTableCell cellWsValue(pWs->label, "");
+			CTableCell cellWsValue(ws.GetLabel(), "");
 
 			CTableRow row("");
 			row.AddCell(cellWsDesc);
@@ -92,10 +91,10 @@
 	//Description
 	try
 	{
-		if(pWs->description != NULL)
+		if(ws.GetDescription() != NULL)
 		{
 			CTableCell cellWsDesc("Description", "");
-			CTableCell cellWsValue(pWs->description, "");
+			CTableCell cellWsValue(ws.GetDescription(), "");
 
 			CTableRow row("");
 			row.AddCell(cellWsDesc);
@@ -112,166 +111,164 @@
 	//Properties
 	try
 	{
-		if(pWs->references.referenceList != NULL)
+		const ARReferenceList& refs = this->ws.GetReferences();
+
+		for(unsigned int i=0; i< refs.numItems; i++)
 		{
-			for(unsigned int i=0; i< pWs->references.numItems; i++)
-			{
-				stringstream strmWsDesc, strmWsValue;
-				strmWsDesc.str("");
-				strmWsValue.str("");
+			stringstream strmWsDesc, strmWsValue;
+			strmWsDesc.str("");
+			strmWsValue.str("");
 
-				ARReferenceStruct ref = pWs->references.referenceList[i];
-				switch(ref.type)
+			const ARReferenceStruct& ref = refs.referenceList[i];
+			switch(ref.type)
+			{
+			case ARREF_WS_PROPERTIES:
 				{
-				case ARREF_WS_PROPERTIES:
+					strmWsDesc << "Property";
+					switch(ref.reference.u.extRef.value.dataType)
 					{
-						strmWsDesc << "Property";                    
-						switch(ref.reference.u.extRef.value.dataType)
+					case AR_DATA_TYPE_CHAR:
 						{
-						case AR_DATA_TYPE_CHAR:
+
+							try
 							{
+								int schemaId = pInside->SchemaGetInsideId(ws.GetOwnerObjects().ownerObjList[0].ownerName);
+
+								CFieldRefItem *refItemMap = new CFieldRefItem();
+								refItemMap->arsStructItemType = AR_STRUCT_ITEM_XML_CONTAINER;
+								refItemMap->fromName = ws.GetName();
+								refItemMap->schemaInsideId = schemaId;
+								refItemMap->description = "Webservice Property";
 
-								try
-								{				
-									int schemaId = pInside->SchemaGetInsideId(pWs->ownerObjList.ownerObjList[0].ownerName);
-
-									CFieldRefItem *refItemMap = new CFieldRefItem();
-									refItemMap->arsStructItemType = AR_STRUCT_ITEM_XML_CONTAINER;
-									refItemMap->fromName = pWs->name;						
-									refItemMap->schemaInsideId = schemaId;
-									refItemMap->description = "Webservice Property";
-
-									string tmpValue = CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal);							
-									strmWsValue << "<pre class=\"preWsInfo\">" << pInside->XMLFindFields(tmpValue, schemaId, rootLevel, refItemMap) << "</pre>";								
-
-									delete refItemMap;
-								}
-								catch(...)
-								{
-								}								
+								string tmpValue = CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal);
+								strmWsValue << "<pre class=\"preWsInfo\">" << pInside->XMLFindFields(tmpValue, schemaId, rootLevel, refItemMap) << "</pre>";
 
+								delete refItemMap;
 							}
-							break;
+							catch(...)
+							{
+							}
+
 						}
+						break;
 					}
-					break;
-				case ARREF_WS_OPERATION:
+				}
+				break;
+			case ARREF_WS_OPERATION:
+				{
+					strmWsDesc << "Operation";
+					switch(ref.reference.u.extRef.value.dataType)
 					{
-						strmWsDesc << "Operation";
-						switch(ref.reference.u.extRef.value.dataType)
+					case AR_DATA_TYPE_CHAR:
 						{
-						case AR_DATA_TYPE_CHAR:
+							try
+							{
+								int schemaId = pInside->SchemaGetInsideId(ws.GetOwnerObjects().ownerObjList[0].ownerName);
+
+								CFieldRefItem *refItemMap = new CFieldRefItem();
+								refItemMap->arsStructItemType = AR_STRUCT_ITEM_XML_CONTAINER;
+								refItemMap->fromName = ws.GetName();
+								refItemMap->schemaInsideId = schemaId;
+								refItemMap->description = "Webservice Operation";
+
+								string tmpValue = CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal);
+								strmWsValue << "<pre class=\"preWsInfo\">" << pInside->XMLFindFields(tmpValue, schemaId, rootLevel, refItemMap) << "</pre>";								
+
+								delete refItemMap;
+							}
+							catch(...)
 							{
-								try
-								{				
-									int schemaId = pInside->SchemaGetInsideId(pWs->ownerObjList.ownerObjList[0].ownerName);
-
-									CFieldRefItem *refItemMap = new CFieldRefItem();
-									refItemMap->arsStructItemType = AR_STRUCT_ITEM_XML_CONTAINER;
-									refItemMap->fromName = pWs->name;						
-									refItemMap->schemaInsideId = schemaId;
-									refItemMap->description = "Webservice Operation";
-
-									string tmpValue = CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal);							
-									strmWsValue << "<pre class=\"preWsInfo\">" << pInside->XMLFindFields(tmpValue, schemaId, rootLevel, refItemMap) << "</pre>";								
-
-									delete refItemMap;
-								}
-								catch(...)
-								{
-								}
 							}
-							break;
 						}
+						break;
 					}
-					break;
-				case ARREF_WS_ARXML_MAPPING:
+				}
+				break;
+			case ARREF_WS_ARXML_MAPPING:
+				{
+					strmWsDesc << "Mapping";
+					switch(ref.reference.u.extRef.value.dataType)
 					{
-						strmWsDesc << "Mapping";
-						switch(ref.reference.u.extRef.value.dataType)
+					case AR_DATA_TYPE_CHAR:
 						{
-						case AR_DATA_TYPE_CHAR:
+							try
+							{
+								int schemaId = pInside->SchemaGetInsideId(ws.GetOwnerObjects().ownerObjList[0].ownerName);
+
+								CFieldRefItem *refItemMap = new CFieldRefItem();
+								refItemMap->arsStructItemType = AR_STRUCT_ITEM_XML_CONTAINER;
+								refItemMap->fromName = ws.GetName();
+								refItemMap->schemaInsideId = schemaId;
+								refItemMap->description = "Webservice Field Mapping";
+
+								string tmpValue = CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal);
+								strmWsValue << "<pre class=\"preWsInfo\">" << pInside->XMLFindFields(tmpValue, schemaId, rootLevel, refItemMap) << "</pre>";
+
+								delete refItemMap;
+							}
+							catch(...)
 							{
-								try
-								{				
-									int schemaId = pInside->SchemaGetInsideId(pWs->ownerObjList.ownerObjList[0].ownerName);
-
-									CFieldRefItem *refItemMap = new CFieldRefItem();
-									refItemMap->arsStructItemType = AR_STRUCT_ITEM_XML_CONTAINER;
-									refItemMap->fromName = pWs->name;						
-									refItemMap->schemaInsideId = schemaId;
-									refItemMap->description = "Webservice Field Mapping";
-
-									string tmpValue = CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal);							
-									strmWsValue << "<pre class=\"preWsInfo\">" << pInside->XMLFindFields(tmpValue, schemaId, rootLevel, refItemMap) << "</pre>";								
-
-									delete refItemMap;
-								}
-								catch(...)
-								{
-								}
 							}
-							break;
 						}
+						break;
 					}
-					break;
-				case ARREF_WS_WSDL:
+				}
+				break;
+			case ARREF_WS_WSDL:
+				{
+					strmWsDesc << "WSDL";
+					switch(ref.reference.u.extRef.value.dataType)
 					{
-						strmWsDesc << "WSDL";
-						switch(ref.reference.u.extRef.value.dataType)
+					case AR_DATA_TYPE_CHAR:
 						{
-						case AR_DATA_TYPE_CHAR:
-							{																
-								if(ref.reference.u.extRef.value.u.charVal != NULL)
-								{
-									strmWsValue << "<pre class=\"preWsInfo\">" << CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal) << "</pre>";								
-								}
+							if(ref.reference.u.extRef.value.u.charVal != NULL)
+							{
+								strmWsValue << "<pre class=\"preWsInfo\">" << CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal) << "</pre>";
 							}
-							break;
 						}
+						break;
 					}
-					break;
-				case ARREF_WS_PUBLISHING_LOC:
+				}
+				break;
+			case ARREF_WS_PUBLISHING_LOC:
+				{
+					strmWsDesc << "Publishing Location";
+					switch(ref.reference.u.extRef.value.dataType)
 					{
-						strmWsDesc << "Publishing Location";
-						switch(ref.reference.u.extRef.value.dataType)
+					case AR_DATA_TYPE_CHAR:
 						{
-						case AR_DATA_TYPE_CHAR:
+							if(ref.reference.u.extRef.value.u.charVal != NULL)
 							{
-								if(ref.reference.u.extRef.value.u.charVal != NULL)
-								{								
-									strmWsValue << "<pre class=\"preWsInfo\">" << CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal) << "</pre>";								
-								}
+								strmWsValue << "<pre class=\"preWsInfo\">" << CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal) << "</pre>";
 							}
-							break;
 						}
+						break;
 					}
-					break;
-				case ARREF_WS_XML_SCHEMA_LOC:
+				}
+				break;
+			case ARREF_WS_XML_SCHEMA_LOC:
+				{
+					strmWsDesc << "XML Schema";
+					switch(ref.reference.u.extRef.value.dataType)
 					{
-						strmWsDesc << "XML Schema";
-						switch(ref.reference.u.extRef.value.dataType)
+					case AR_DATA_TYPE_CHAR:
 						{
-						case AR_DATA_TYPE_CHAR:
+							if(ref.reference.u.extRef.value.u.charVal != NULL)
 							{
-								if(ref.reference.u.extRef.value.u.charVal != NULL)
-								{								
-									strmWsValue << "<pre class=\"preWsInfo\">" << CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal) << "</pre>";								
-								}
+								strmWsValue << "<pre class=\"preWsInfo\">" << CWebUtil::Validate(ref.reference.u.extRef.value.u.charVal) << "</pre>";
 							}
-							break;
 						}
+						break;
 					}
-					break;
 				}
-
-				CTableRow row("");
-				row.AddCell(CTableCell(strmWsDesc.str()));
-				row.AddCell(CTableCell(strmWsValue.str()));
-				tblProp.AddRow(row);
+				break;
 			}
-		}
 
+			CTableRow row("");
+			row.AddCell(CTableCell(strmWsDesc.str()));
+			row.AddCell(CTableCell(strmWsValue.str()));
+			tblProp.AddRow(row);
+		}
 	}
 	catch(exception& e)
 	{

Modified: branches/work_jls17/doc/DocWebserviceDetails.h
==============================================================================
--- branches/work_jls17/doc/DocWebserviceDetails.h	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/doc/DocWebserviceDetails.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -22,13 +22,13 @@
 	public CDocBase
 {
 public:
-	CDocWebserviceDetails(CARInside &arIn, CARContainer &obj);
+	CDocWebserviceDetails(CARContainer &obj);
 	~CDocWebserviceDetails(void);
 
 	void Documentation();
 
 private:
-	CARContainer *pWs;
+	CARContainer& ws;
 
 	string WSInformation();
 };

Added: branches/work_jls17/lists/ARContainerList.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/work_jls17/lists/ARContainerList.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -0,0 +1,335 @@
+//Copyright (C) 2010 John Luthgers | jls17
+//
+//This file is part of ARInside.
+//
+//    ARInside is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, version 2 of the License.
+//
+//    ARInside is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with ARInside.  If not, see <http://www.gnu.org/licenses/>.
+
+#include "stdafx.h"
+#include "ARContainerList.h"
+#include "../ARInside.h"
+#include "BlackList.h"
+
+CARContainerList::CARContainerList(void)
+{
+	internalListState = EMPTY;
+	reservedSize = 0;
+	
+	ARZeroMemory(&names);
+	ARZeroMemory(&permissions);
+	ARZeroMemory(&subadmins);
+	ARZeroMemory(&ownerObjects);
+	ARZeroMemory(&labels);
+	ARZeroMemory(&descriptions);
+	ARZeroMemory(&types);
+	ARZeroMemory(&references);
+	ARZeroMemory(&helpTexts);
+	ARZeroMemory(&changedTimes);
+	ARZeroMemory(&owners);
+	ARZeroMemory(&changedUsers);
+	ARZeroMemory(&changeDiary);
+	ARZeroMemory(&objProps);
+}
+
+CARContainerList::~CARContainerList(void)
+{
+	if (internalListState == INTERNAL_ALLOC)
+	{
+		try
+		{
+			delete[] names.nameList;
+			delete[] permissions.permissionList;
+			delete[] subadmins.internalIdListList;
+			delete[] ownerObjects.ownerObjListList;
+			delete[] labels.stringList;
+			delete[] descriptions.stringList;
+			delete[] types.intList;
+			delete[] references.referenceListList;
+			delete[] changedTimes.timestampList;
+			delete[] helpTexts.stringList;
+			delete[] owners.nameList;
+			delete[] changedUsers.nameList;
+			delete[] changeDiary.stringList;
+			delete[] objProps.propsList;
+		}
+		catch (...)
+		{
+		}
+	}
+	else if (internalListState == ARAPI_ALLOC)
+	{		
+		try
+		{
+			FreeARNameList(&names,false);
+			FreeARPermissionListList(&permissions,false);
+			FreeARInternalIdListList(&subadmins,false);
+			FreeARContainerOwnerObjListList(&ownerObjects,false);
+			FreeARTextStringList(&labels,false);
+			FreeARTextStringList(&descriptions,false);
+			FreeARUnsignedIntList(&types,false);
+			FreeARReferenceListList(&references,false);
+			FreeARTextStringList(&helpTexts,false);
+			FreeARTimestampList(&changedTimes,false);
+			FreeARAccessNameList(&owners,false);
+			FreeARAccessNameList(&changedUsers,false);
+			FreeARTextStringList(&changeDiary,false);
+			FreeARPropListList(&objProps,false);
+		}
+		catch (...)
+		{
+		}
+	}
+}
+
+bool CARContainerList::LoadFromServer()
+{
+	ARBooleanList   cntExists;
+	ARStatusList    status;
+	CARInside*      arIn = CARInside::GetInstance();
+	ARNameList*     objectsToLoad = NULL;
+	ARNameList      objectNames;
+	unsigned int    originalObjectNameCount = 0;
+	bool            funcResult = false;
+	ARContainerTypeList cntTypes;	int cntType = ARCON_ALL;
+	ARReferenceTypeList refTypes;	int refType = ARREF_ALL;
+
+	ARZeroMemory(&cntExists);
+	ARZeroMemory(&status);
+	
+	cntTypes.numItems = 1;
+	cntTypes.type = &cntType;
+
+	refTypes.numItems = 1;
+	refTypes.refType = &refType;
+
+	objectNames.numItems = 0;
+
+	// if the blacklist contains containers, we should first load all names
+	// from the server and remove those that are contained in the blacklist.
+	// after that call ARGetMultiple... to retrieve just the needed objects.
+	if (arIn->blackList.GetCountOf(ARREF_CONTAINER) > 0)
+	{
+		ARContainerInfoList cntInfoList;
+		ARZeroMemory(&objectNames);
+		ARZeroMemory(&cntInfoList);
+		if (ARGetListContainer(&arIn->arControl, 0, NULL, AR_HIDDEN_INCREMENT, NULL, NULL, &cntInfoList, &status) == AR_RETURN_OK)
+		{
+			// create a temporate ARNameList
+			objectNames.numItems = cntInfoList.numItems;
+			objectNames.nameList = new ARNameType[cntInfoList.numItems];
+			for (unsigned int index = 0; index < cntInfoList.numItems; ++index)
+				memcpy(&objectNames.nameList[index], cntInfoList.conInfoList[index].name, sizeof(ARNameType));
+
+			// clean up the structs we dont need anymore
+			FreeARContainerInfoList(&cntInfoList, false);
+
+			// backup count and exclude all name contained in the blacklist
+			originalObjectNameCount = objectNames.numItems;
+			arIn->blackList.Exclude(ARREF_CONTAINER, &objectNames);
+			objectsToLoad = &objectNames;
+		}
+		else
+			cerr << arIn->GetARStatusError(&status);
+	}
+
+	// ok, now retrieve all informations of the containers we need
+	if (ARGetMultipleContainers(&arIn->arControl,
+		0,
+		objectsToLoad,
+		&cntTypes,
+		AR_HIDDEN_INCREMENT,
+		NULL, // owners list
+		&refTypes,
+		&cntExists,
+		&names,
+		&permissions,
+		&subadmins,
+		&ownerObjects,
+		&labels,
+		&descriptions,
+		&types,
+		&references,
+		&helpTexts,
+		&owners,
+		&changedTimes,
+		&changedUsers,
+		&changeDiary,
+		&objProps,
+		&status) == AR_RETURN_OK)
+	{
+		FreeARBooleanList(&cntExists, false);
+		internalListState = ARAPI_ALLOC;
+
+		sortedList.reserve(names.numItems);
+		for (unsigned int i=0; i<names.numItems; ++i)
+		{
+			appRefNames.push_back("");
+			sortedList.push_back(i);
+		}
+		funcResult = true;
+	}
+	else
+	{
+		cerr << arIn->GetARStatusError(&status);
+	}
+
+	// check if we have to clean up the name list
+	if (originalObjectNameCount > 0)
+	{
+		objectNames.numItems = originalObjectNameCount;
+		delete[] objectNames.nameList;
+	}
+
+	return funcResult;
+}
+
+void CARContainerList::Reserve(unsigned int size)
+{
+	if (internalListState != EMPTY) throw AppException("object isnt reusable!", "ContainerList");
+
+	sortedList.reserve(size);
+	appRefNames.reserve(size);
+
+	names.numItems = 0;
+	names.nameList = new ARNameType[size];
+
+	permissions.numItems = 0;
+	permissions.permissionList = new ARPermissionList[size];
+
+	subadmins.numItems = 0;
+	subadmins.internalIdListList = new ARInternalIdList[size];
+
+	ownerObjects.numItems = 0;
+	ownerObjects.ownerObjListList = new ARContainerOwnerObjList[size];
+
+	labels.numItems = 0;
+	labels.stringList = new char*[size];
+
+	descriptions.numItems = 0;
+	descriptions.stringList = new char*[size];
+
+	types.numItems = 0;
+	types.intList = new unsigned int[size];
+
+	references.numItems = 0;
+	references.referenceListList = new ARReferenceList[size];
+
+	helpTexts.numItems = 0;
+	helpTexts.stringList = new char*[size];
+
+	changedTimes.numItems = 0;
+	changedTimes.timestampList = new ARTimestamp[size];
+
+	owners.numItems = 0;
+	owners.nameList = new ARAccessNameType[size];
+
+	changedUsers.numItems = 0;
+	changedUsers.nameList = new ARAccessNameType[size];
+
+	changeDiary.numItems = 0;
+	changeDiary.stringList = new char*[size];
+
+	objProps.numItems = 0;
+	objProps.propsList = new ARPropList[size];
+
+	reservedSize = size;
+	internalListState = INTERNAL_ALLOC;
+}
+
+int CARContainerList::AddContainerFromXML(ARXMLParsedStream &stream, const char* containerName, unsigned int *outDocVersion)
+{
+	if (internalListState != INTERNAL_ALLOC) throw AppException("illegal usage!", "ContainerList");
+	if (names.numItems >= reservedSize) return -1;
+	if (outDocVersion != NULL) *outDocVersion = 0;
+	
+	CARInside* arIn = CARInside::GetInstance();
+	ARNameType appBlockName; appBlockName[0] = 0;
+	ARStatusList status;
+
+	unsigned int arDocVersion = 0;
+	unsigned int index = names.numItems;
+	strncpy(names.nameList[index], containerName, 254);	// copy name over
+	names.nameList[index][254] = 0;
+
+	if (ARGetContainerFromXML(&arIn->arControl,
+		&stream,
+		names.nameList[index],
+		appBlockName,
+		&permissions.permissionList[index],
+		&subadmins.internalIdListList[index],
+		&ownerObjects.ownerObjListList[index],
+		&labels.stringList[index],
+		&descriptions.stringList[index],
+		&types.intList[index],
+		&references.referenceListList[index],
+		owners.nameList[index],
+		changedUsers.nameList[index],
+		&changedTimes.timestampList[index],
+		&helpTexts.stringList[index],
+		&changeDiary.stringList[index],
+		&objProps.propsList[index],
+		&arDocVersion,
+		&status) == AR_RETURN_OK)
+	{
+		++names.numItems;
+		++permissions.numItems;
+		++subadmins.numItems;
+		++ownerObjects.numItems;
+		++labels.numItems;
+		++descriptions.numItems;
+		++types.numItems;
+		++references.numItems;
+		++helpTexts.numItems;
+		++changedTimes.numItems;
+		++owners.numItems;
+		++changedUsers.numItems;
+		++changeDiary.numItems;
+		++objProps.numItems;
+
+		sortedList.push_back(index);
+		appRefNames.push_back("");
+
+		if (outDocVersion != NULL) *outDocVersion = arDocVersion;
+
+		return index;
+	}
+	else
+	{
+		cerr << arIn->GetARStatusError(&status);
+		return -1;
+	}
+}
+
+int CARContainerList::Find(const char* name)
+{
+	unsigned int count = GetCount();
+	for (unsigned int i = 0; i < count; ++i)
+	{
+		int result = strcoll(names.nameList[sortedList[i]], name);
+		if (result == 0)
+		{
+			return i;
+		}
+		else if (result > 0)	
+			// the current string in the sorted list is greater as the string we are looking for.
+			// stop searching here.
+			break;
+	}
+	return -1;
+}
+
+void CARContainerList::Sort()
+{
+	if (GetCount() > 0)
+		std::sort(sortedList.begin(),sortedList.end(),SortByName<CARContainerList>(*this));
+}
+

Added: branches/work_jls17/lists/ARContainerList.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/work_jls17/lists/ARContainerList.h	Tue Feb  2 10:43:06 2010	(r125)
@@ -0,0 +1,82 @@
+//Copyright (C) 2009 John Luthgers | jls17
+//
+//This file is part of ARInside.
+//
+//    ARInside is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, version 2 of the License.
+//
+//    ARInside is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with ARInside.  If not, see <http://www.gnu.org/licenses/>.
+#pragma once
+#include "../ARApi.h"
+#include "../util/Uncopyable.h"
+#include "ARListHelpers.h"
+#include <assert.h>
+
+class CARContainerList : Uncopyable
+{
+public:
+	CARContainerList(void);
+	~CARContainerList(void);
+
+	// loading...
+	bool LoadFromServer();
+	int AddContainerFromXML(ARXMLParsedStream& stream, const char* cntName, unsigned int *arDocVersion = NULL);
+
+	// list functions
+	inline unsigned int GetCount() { return names.numItems; }
+	int Find(const char *name);
+	void Reserve(unsigned int size);
+	void Sort();
+
+	// data access
+	const ARNameType& ContainerGetName(unsigned int index) const { assert(index < names.numItems); return names.nameList[sortedList[index]]; }
+	const ARPermissionList& ContainerGetPermissions(unsigned int index) const { assert(index < permissions.numItems); return permissions.permissionList[sortedList[index]]; }
+	const ARInternalIdList& ContainerGetSubadmins(unsigned int index) const { assert(index < subadmins.numItems); return subadmins.internalIdListList[sortedList[index]]; }
+	const ARContainerOwnerObjList& ContainerGetOwnerObjects(unsigned int index) const { assert(index < ownerObjects.numItems); return ownerObjects.ownerObjListList[sortedList[index]]; }
+	char* ContainerGetLabel(unsigned int index) const { assert(index < labels.numItems); return labels.stringList[sortedList[index]]; }
+	char* ContainerGetDescription(unsigned int index) const { assert(index < descriptions.numItems); return descriptions.stringList[sortedList[index]]; }
+	unsigned int ContainerGetType(unsigned int index) const { assert(index < types.numItems); return types.intList[sortedList[index]]; }
+	const ARReferenceList& ContainerGetReferences(unsigned int index) const { assert(index < references.numItems); return references.referenceListList[sortedList[index]]; }
+	char* ContainerGetHelptext(unsigned int index) const { assert(index < helpTexts.numItems); return helpTexts.stringList[sortedList[index]]; }
+	const ARTimestamp& ContainerGetTimestamp(unsigned int index) const { return changedTimes.timestampList[sortedList[index]]; }
+	const ARAccessNameType& ContainerGetOwner(unsigned int index) const { assert(index < owners.numItems); return owners.nameList[sortedList[index]]; }
+	const ARAccessNameType& ContainerGetModifiedBy(unsigned int index) const { assert(index < changedUsers.numItems); return changedUsers.nameList[sortedList[index]]; }
+	const char* ContainerGetChangeDiary(unsigned int index) const { assert(index < changeDiary.numItems); return changeDiary.stringList[sortedList[index]]; }
+	const ARPropList& ContainerGetPropList(unsigned int index) const { assert(index < objProps.numItems); return objProps.propsList[sortedList[index]]; }
+	const string& ContainerGetAppRefName(unsigned int index) const { assert(index < appRefNames.size()); return appRefNames[sortedList[index]]; }
+	void ContainerSetAppRefName(unsigned int index, const string& appName) { assert(index < appRefNames.size()); appRefNames[sortedList[index]] = appName; }
+
+	// the sort class needs access the the "names" member variable
+	friend class SortByName<CARContainerList>;
+private:
+	// allocation state of internal structures
+	enum ContainerListState { EMPTY, ARAPI_ALLOC, INTERNAL_ALLOC };
+
+private:
+	unsigned int reservedSize;
+	ARNameList names;
+	ARPermissionListList permissions;
+	ARInternalIdListList subadmins;
+	ARContainerOwnerObjListList ownerObjects;
+	ARTextStringList labels;
+	ARTextStringList descriptions;
+	ARUnsignedIntList types;
+	ARReferenceListList references;
+	ARTextStringList helpTexts;
+	ARTimestampList changedTimes;
+	ARAccessNameList owners;
+	ARAccessNameList changedUsers;
+	ARTextStringList changeDiary;
+	ARPropListList objProps;
+	vector<string> appRefNames;
+
+	ContainerListState internalListState;
+	vector<int> sortedList;
+};

Modified: branches/work_jls17/lists/ARMenuList.cpp
==============================================================================
--- branches/work_jls17/lists/ARMenuList.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/lists/ARMenuList.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -98,7 +98,7 @@
 			cerr << arIn->GetARStatusError(&status);
 	}
 
-	// ok, now retrieve all informations of the active links we need
+	// ok, now retrieve all informations of the menus we need
 	if (ARGetMultipleCharMenus(&arIn->arControl,
 		0,
 		objectsToLoad,

Modified: branches/work_jls17/output/ContainerTable.cpp
==============================================================================
--- branches/work_jls17/output/ContainerTable.cpp	Tue Jan 26 06:57:56 2010	(r124)
+++ branches/work_jls17/output/ContainerTable.cpp	Tue Feb  2 10:43:06 2010	(r125)
@@ -39,7 +39,7 @@
 	CTableRow tblRow("");
 	string cellNameValue = cont.GetURL(rootLevel);
 
-	switch(cont.type)
+	switch(cont.GetType())
 	{
 	case ARCON_FILTER_GUIDE:
 		{
@@ -60,9 +60,9 @@
 	}
 
 	tblRow.AddCell( CTableCell(cellNameValue));
-	tblRow.AddCell( CTableCell(CAREnum::ContainerType(cont.type)));
-	tblRow.AddCell( CTableCell(CUtil::DateTimeToHTMLString(cont.timestamp)));
-	tblRow.AddCell( CTableCell(this->pInside->LinkToUser(cont.lastChanged, rootLevel)));
+	tblRow.AddCell( CTableCell(CAREnum::ContainerType(cont.GetType())));
+	tblRow.AddCell( CTableCell(CUtil::DateTimeToHTMLString(cont.GetTimestamp())));
+	tblRow.AddCell( CTableCell(this->pInside->LinkToUser(cont.GetLastChanged(), rootLevel)));
 	this->tbl.AddRow(tblRow);
 }
 
@@ -82,7 +82,7 @@
 				const ARActiveLinkActionStruct &action = al.GetIfActions().actionList[nAction];
 				if(action.action == AR_ACTIVE_LINK_ACTION_CALLGUIDE)
 				{
-					if(strcmp(action.u.callGuide.guideName, obj.name.c_str())==0)
+					if(strcmp(action.u.callGuide.guideName, obj.GetARName())==0)
 					{
 						nResult++;
 					}
@@ -95,7 +95,7 @@
 				const ARActiveLinkActionStruct &action = al.GetElseActions().actionList[nAction];
 				if(action.action == AR_ACTIVE_LINK_ACTION_CALLGUIDE)
 				{
-					if(strcmp(action.u.callGuide.guideName, obj.name.c_str())==0)
+					if(strcmp(action.u.callGuide.guideName, obj.GetARName())==0)
 					{
 						nResult++;
 					}
@@ -105,7 +105,7 @@
 	}
 	catch(exception& e)
 	{
-		cout << "EXCEPTION enumerating NumRelatedActiveLinks() in container '" << obj.name << "': " << e.what() << endl;
+		cout << "EXCEPTION enumerating NumRelatedActiveLinks() in container '" << obj.GetName() << "': " << e.what() << endl;
 	}
 
 	return nResult;
@@ -127,7 +127,7 @@
 				ARFilterActionStruct &action = filter.GetIfActions().actionList[nAction];
 				if(action.action == AR_FILTER_ACTION_CALLGUIDE)
 				{
-					if(obj.name.compare(action.u.callGuide.guideName)==0)
+					if(strcmp(action.u.callGuide.guideName, obj.GetARName())==0)
 					{
 						nResult++;
 					}
@@ -140,7 +140,7 @@
 				ARFilterActionStruct action = filter.GetElseActions().actionList[nAction];
 				if(action.action == AR_FILTER_ACTION_CALLGUIDE)
 				{
-					if(strcmp(action.u.callGuide.guideName, obj.name.c_str())==0)
+					if(strcmp(action.u.callGuide.guideName, obj.GetARName())==0)
 					{
 						nResult++;
 					}
@@ -150,7 +150,7 @@
 	}
 	catch(exception& e)
 	{
-		cout << "EXCEPTION enumerating NumRelatedFilters() in container '" << obj.name << "': " << e.what() << endl;
+		cout << "EXCEPTION enumerating NumRelatedFilters() in container '" << obj.GetName() << "': " << e.what() << endl;
 	}
 
 	return nResult;


More information about the arinside-src mailing list