/*
* This file is part of rasdaman community.
*
* Rasdaman community 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, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community 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 rasdaman community. If not, see .
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see
* or contact Peter Baumann via .
/
/**
* SOURCE: rasmgr_dbm.cc
*
* MODULE: rasmgr
* CLASS: DatabaseHost, DatabaseHostManager, Database, DatabaseManager
*
* COMMENTS:
* none
*
\*/
#include "rasmgr_dbm.hh"
#include "rasmgr_srv.hh"
#include "rasmgr_users.hh"
#include "debug.hh"
extern bool hostCmp( const char *h1, const char *h2);
DatabaseHost::DatabaseHost()
{ hostName[0]=0;
connectString[0]=0;
valid=false;
activServers=0;
}
DatabaseHost::~DatabaseHost()
{
}
const char* DatabaseHost::getName()
{ return hostName;
}
const char* DatabaseHost::getConnectionString()
{ return connectString;
}
void DatabaseHost::changeConnectionString(const char *connectString)
{ strcpy(this->connectString,connectString);
}
void DatabaseHost::changeName(const char *newName)
{ strcpy(hostName,newName);
}
void DatabaseHost::init(const char* hostName,const char* connectString)
{
strcpy(this->hostName,hostName);
strcpy(this->connectString,connectString);
valid=true;
}
void DatabaseHost::regStartServer() { activServers++;}
void DatabaseHost::regDownServer() { activServers--;}
//void DatabaseHost::incrConnServers() { connServers++;}
//void DatabaseHost::decrConnServers() { connServers--;}
//void DatabaseHost::incrConnDatabases() { connDatabases++;}
//void DatabaseHost::decrConnDatabases() { connDatabases--;}
bool DatabaseHost::isBusy()
{
//std::cout<<"DBH="<::iterator iter=hostPtrList.begin();
for(int i=0;igetName(),hostName))
{
for(int j=0;jdecrConnDatabases();
hostPtrList.erase(iter);
return true;
}
iter++;
}
return false;;
}
void Database::disconnectForRemove()
{
// this means disconnect from all database hosts
list::iterator iter=hostPtrList.begin();
int listsize=hostPtrList.size();
for(int i=0;idecrConnDatabases();
iter++;
}
for(int i=0;i::iterator iter=hostPtrList.begin();
for(int i=0;i::iterator iter=hostPtrList.begin();
for(int i=0;igetName();
}
return "noHost!";
}
bool Database::connectToRasServer(const char *serverName)
{
RasServer &rasServer=rasManager[serverName];
if(rasServer.isValid()==false) return false; // no such serverName
if(checkConnection(rasServer)) return false; // is already connected
rasPtrList.push_back(&rasServer);
return true;
}
bool Database::disconnectFromRasServer(const char *serverName)
{
list::iterator iter=rasPtrList.begin();
for(int i=0;igetName(),serverName))
{
rasPtrList.erase(iter);
return true;
}
iter++;
}
return false;
}
bool Database::isConnectedToRasServer(const char *serverName)
{
RasServer &r = rasManager[serverName];
if(r.isValid()==false) return false;
return checkConnection(r);
}
int Database::countConnectionsToRasServers()
{
return rasPtrList.size();
}
const char* Database::getRasServerName(int x)
{
if( x < rasPtrList.size() )
{
list::iterator iter=rasPtrList.begin();
for(int i=0;igetName();
}
return "noRasServer!";
}
bool Database::checkConnection(RasServer &rasServer)
{
list::iterator iter=rasPtrList.begin();
for(int i=0;i::iterator iter=dtbList.begin();
for(int i=0;igetName(),databaseName))
{
iter->disconnectForRemove();
dtbList.erase(iter);
return true;
}
iter++;
}
return false;
}
bool DatabaseManager::testUniqueness(const char* databaseName)
{
list::iterator iter=dtbList.begin();
for(int i=0;igetName(),databaseName))
return false;
iter++;
}
return true;
}
Database& DatabaseManager::operator[](int x)
{
list::iterator iter=dtbList.begin();
for(int i=0;i::iterator iter=dtbList.begin();
for(int i=0;igetName(),dbName))
return *iter;
iter++;
}
return protElem;
}
void DatabaseManager::disconnectAllDatabasesFromDBH(const char* dbhName)
{
list::iterator iter=dtbList.begin();
for(int i=0;idisconnectFromDBHost(dbhName);
}
}
int DatabaseManager::countDatabases()
{
return dtbList.size();
}
bool DatabaseManager::reset()
{
if(config.isTestModus()==false) return false;
list::iterator iter=dtbList.begin();
for(int i=0;idisconnectForRemove();
}
while(dtbList.size())
{
dtbList.pop_front();
}
return true;
}
bool DatabaseManager::acceptChangeName(const char *oldName,const char *newName)
{
if(hostCmp(oldName,newName))
return true; // if someone really wants to change a name with the same,
return testUniqueness(newName);
}